- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于单片机的信号发生器讲述
合肥工业大学
课 程 实 践
实践科目 仪器及系统课程设计
学生姓名
学 号
专业班级 测控12-2班
指导教师 吴晔 张阳 张育中
2015年 月 日
课 程 设 计 任 务 书
设计
题目 基于单片机的函数信号发生器
主
要
内
容 以51单片机为核心设计一个函数信号发生器。
信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、三角波、梯形波,波形的频率和幅度在一定范围内可改变。波形和频率的改变通过软件控制,幅度的改变通过硬件实现。最后通过D/A转换得到想要的波形。 指导
教师
意见 成绩
工作原理:
数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及、数模转换及波形输出、放大电路等部分,即可构成所需的波形发生器。
系统框图:按键电路→单片机→波形→D/A转换电路→放大电路→波形输出
硬件设计:
主控电路:
AT89C51单处机内部设置两个16位可编程的定时器/计数器T0和T1,它们具有计数器方式和定时器方式两种工作方式及4种工作模式。在波形发生器中,将其作定时器使用,用它来精确地确定波形的两个采样点输出之间的延迟时间。模式1采用的是16位计数器,当T0或T1被允许计数后,从初值开始加计数,最高位产生溢出时向CPU请求中断。
在波形发生器中,只用到片内定时器/计数器溢出时产生的中断请求,即是在AT89C51输出一个波形采样点信号后,接着启动定时器,在定时器未产生中断之前,AT89C51等待,直到定时器计时结束,产生中断请求,AT89C51响应中断,接着输出下一个采样点信号,如此循环产生所需要的信号波形。
AT89C51从P0口接收来自键盘的信号,并通过P2口输出一些控制信号,将其输入到8155的信号控制端,用于控制其信号的输入、输出。如果有键按下,则在读控制端会产生一个读信号,使单片机读入信号。如果有信号输出,则在写控制端产生一个写信号,并将所要输出的信号通过8155的PB口输出,并在数码管上显示出来。
数/模转换和运放电路:
由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以必须用到数模转换器件,我们选用的DAC0832,此器件具有8位分辨率的数模转换,它价格低廉、接口简单、转换控制容易等优点。DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。以便于示波器显示其波形及调节其幅度。所以又用到了运放,我们用到的是LM324,此运放采用±12V双电源供电,其内部集成有4个放大器,我们用到了其中两个,2和3,没有用到的放大器接地。
软件设计:
主程序流程图:主程序先是进行一些初始化的工作,然后根据波形标志a,b,c,d,e的值进入相应的while循环。在while循环中,单片机根据地址标志位不停的查表,然后把查得的值赋给DAC0832的数据口,然后地址标志位加一,并判断地址标志位是否等于64,如果是就置0再往下执行,如果不是直接往下执行。然后根据频率标志位进行相应的延时。
附录
附录1:源程序
#includereg51.h
#define uchar unsigned char
#define uint unsigned int
sbit csda=P2^2; //DAC0832的片选信号,低电平有效
sbit wr=P2^1; //输入寄存器的写选通输入端,负脉冲有效
sbit s1=P3^2; //波形选择中断入口
sbit s2=P3^3; //频率选择中断入口
uchar k=0,p=0,delay=0;
uchar bxxz=0;pinglv=0;
uchar a=1,b=0,c=0,d=0,e=0;
//正弦波数据
uchar code sin[64]={135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,146
文档评论(0)