基于51单片机的波形发生器设计报告(毕业论文).doc
- 文档编号:18836415
- 上传时间:2024-01-03
- 格式:DOC
- 页数:24
- 大小:792.50KB
基于51单片机的波形发生器设计报告(毕业论文).doc
《基于51单片机的波形发生器设计报告(毕业论文).doc》由会员分享,可在线阅读,更多相关《基于51单片机的波形发生器设计报告(毕业论文).doc(24页珍藏版)》请在冰点文库上搜索。
目录
摘要 2
一、题目要求及分析 3
二、总体系统方案设计 4
2.1总体设计思路 4
2.2总体框图 5
2.3信号发生部分 5
2.4显示部分 6
2.5按键部分 6
三、硬件电路 6
3.1功能与基本原理 7
3.2资源分配 8
3.2显示接口电路 8
3.3波形转换(D/A)电路 9
3.4红外电路 10
3.5复位电路 11
3.6外部时钟电路 11
3.7LCD显示部分电路 12
3.8电源部分 12
3.9独立按键部分 13
3.10串口通信模块 13
四、软件设计 14
4.1程序流程图 15
4.2LCD显示流程图 15
五、系统仿真 16
5.1仿真电路图 16
5.2输出波形图 16
六、硬件和软件测试 17
6.1硬件调试 17
6.2软件调试 18
七、设计心得 18
八、参考文献 20
九、附件 21
摘要:
本系统采用单片机C8051为控制核心,输出数字量,然后由DAC0832把数字量转换成模拟量;但是输出的是电流,需要用运放(OP07),把电流转换成电压量。
显示利用的是LCD1602的液晶,显示其波形,幅值。
按键应用的是独立按键,用来波形的切换,幅值,频率的调解。
其运算核心,我们通过MATLAB对正弦波,三角板,正弦波进行采样,得到一组组数据,然后同过数组存储;利用中断对数组进行扫描。
其频率的调解就是调节其中断间隔的时间,幅值就是调节其数字的大小(同时乘以某个小于1的数)。
为了波形的合成,我们采用的点的个数都是20个。
AT-89C51DAC0832独立按键OP07
一、题目要求及分析
设计任务:
设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。
示意图如下:
图1设计要求图
设计要求:
1.具有产生正弦波、方波、三角波三种周期性波形的功能;
2.用键盘输入编辑生成上述三种波形(同周期)的线性组合波形,以及由基波及其谐波(5次以下)线性组合的波形。
3.具有波形存储功能。
4.输出波形的频率范围为100Hz~20kHz(非正弦波频率按10次谐波计算);重复频率可调,频率步进间隔≤100Hz。
5.输出波形幅度范围O~5V(峰—峰值),可按步进0.1V(峰—峰值)调整。
6.具有显示输出波形的类型、重复频率(周期)和幅度的功能。
7.增加红外配置功能(串口配置程序或其他方式)
二、总体系统方案设计
题目要求实现的任务是设计并制作一个函数信号发生器,能够产生正弦波、方波、三角波,要求不用DDS和专用的波形产生芯片,频率范围在1Hz~1MHZ可调,在频率范围为1HZ~10KHz时,步进不大于10Hz在频率范围为10KHz~1MHz时,步进不大于100Hz,并且电压范围在0~5V可调,步进为0.1V,能够实时的显示波形的类型及其频率和幅值。
现在对以下方案进论证和验证。
2.1总体设计思路
根据题目的要求,经过仔细的考虑各种要素,制定了整体方案:
以AT89C51单片机为控制核心,P0口接DAC0832信号输入并进行数模转换,P1口接矩阵键盘,P2口接液晶显示器LCD1602,由程序控制P0口产生波形(分别是正弦波、方波、三角波),再由按键及按键次数控制产生波形的种类及频率和幅值在一定范围内可调,并且能够按任意键实现波形频率和幅值的设定(不通过步进按键设定来控制)。
由运放OP07实现DAC0832输出电流到电压的转换,即实现数字信号到模拟信号的转换。
在LCD上实时的显示波形的频率和幅值,波形在示波器上产生。
其波形的存储方式,我们通过按键确定,一旦按键按下后,就把当时的波形对应的参数存储起来,例如幅度值,频率值等参数。
波形的合成:
为了波形的合成,我们在采样的时候,对正弦波,三角波,方波都只取乐20个点;因为点越少,其频率达到的值就会越大;合成时就是对幅值点进行一个叠加后赋给DAC0832输出一组波形。
红外,通过外部中断高低电平的延时的时间来进行解码。
2.2总体框图
本系统总体框图如图2所示:
图2系统总体框图
2.3信号发生部分
方案一:
采用模拟分立元件或单片压控函数发生器,可以产生正弦波、方波、三角波,通过调整外部元件可以改变输出频率,但采用模拟元器件由于元件分散性太大,因而产生频率稳定性较差,精度低,地抗干扰能力低,成本高,而且灵活心性较差,不能实现任意波形以及波形运算输出等智能化的功能。
方案二:
采用锁相式频率合成方案,锁相式频率合成一个高稳定度和精确度的大量离散技术,他在一定程度上解决了既要频率稳定精确又要频率在较大的范围内可调的矛盾,但是频率受VCO可便频率范围的影响,高低频率比不可能做的很高,而且只能产生正弦波或方波,不能满足任意波形的要求。
方案三:
采用单片机和数模转换DAC0832实现波形的产生。
波形的产生是通过AT89C51执行方波波形程序,向D/A转换器的输入端按一定的规律发生数据,从而在DA转换电路输出端得到相应的电压波形。
在AT89C51的P1口接矩阵按键,通过软件编程来选择波形、幅值、频率,每种波形对应一个按键,此方案原理简单,实现起来比较容易。
经比较,方案三能够更好的实现题目的要求,三种波形的产生可有程序控制,并通过按键选择波形的输出,在示波器上显示波形。
波形的周期与频率步进也可以用程序控制,具有线路简单、结构紧凑等优点。
在本设计的基础上,加上LCD显示器,则可以通过按键设定波形频率,并在LCD显示频率、幅值电压。
输出的波形稳定,精度高,滤波好,抗干扰效果好,连接简单,性价比高。
综上所述,我们选择第三种方案。
2.4显示部分
方案一:
数码管显示,由于本题要求实时的显示输出信号的幅度、频率,而数字不能显示字符。
方案二:
LED点阵显示,LED点阵显示虽然能够显示数字和字符,但是显示的效果不好,而且不易编程。
方案三:
LCD液晶显示,LCD液晶显示不但能显示字符和数字,而且效果较好,且容易实现。
2.5按键部分
方案一:
采用独立按键,他的按键的数目比少,但是它的结构简单,方便操作,执行效率高等优势。
方案二:
采用矩阵键盘,它以较少得IO口实现了按键的功能,随之其操作比较复杂。
经对比,由于我们需求的按键比较少,但是对执行的效率比较高,所以采用独立按键。
三、硬件电路
本系统由单片机、波形转换(D/A)电路、显示接口电路、键盘电路、电源电路、串口电路等六部分组成。
电路图如图3.1所示:
图3硬件电路原理图
3.1功能与基本原理
功能:
形成扫描码、键值识别、案件处理、参数设置、字符设置等形成液晶显示波形的类型及频率和幅值;通过定时器0产生定时中断,形成波形的数字编码,并输出到D/A接口电路和显示驱动电路。
AT89C51外接12M晶振作为时钟频率,并采用电源复位设计。
复位电路采用上电复位,其工作原理是,当通电时,电容两端相当于短路,于是TST引脚为高电平,然后对电容充电。
RST端电压慢慢下降,降到一定程度,即为低电平,单片机开始工作。
产生方波程序思路:
对于小于100Hz的频率,根据定时器溢出时间1us,将频率值换算为定时器溢出次数,当达到规定的次数时,将输出管脚的状态取反达到方波的产生;对于大于100HZ的频率,直接根据频率值设置其定时溢出的时间,当溢出时间达到时,将输出管脚取反达到方波的产生。
产生三角波程序思路:
要产生峰值电压为5V的三角波,一个周期需要定时510次,由此便可以计算出每次定时溢出的时间,再将每次定时的电压加权便可以达到三角波的波形;产生正弦波程序思路:
给正弦波的一个周期设定table表,由20个数据,相当于每个周期定时255次,则每次定时溢出的时间便可计算出,每个点的电压加权便可得到正弦波的电压,即,形成正弦波。
3.2资源分配
软、硬件设计是比不可少的,为了满足功能和指标的要求,资源分配为:
单片机用12MHz晶振,P0口与DAC0832相连;P1口接矩阵按键,实现频率、幅值以及波形的选择;P2口接LCD1602液晶显示器,实时显示波形的频率、幅值、类型。
3.2显示接口电路
功能:
驱动LCd液晶显示、扫描按钮。
由LCD1602液晶显示器和矩阵按键组成。
当某一按键按下时,扫描程序扫描到之后,通过P2口将数字信号发送到LCD1602,LCD1602液晶专门用于显示字母、数字、符号等点阵式LCD,其外接电压时5V。
扫描利用软件程序实现,当某一按键按下时,扫描立即检测到,随即调用子程序,执行相应的功能。
其与单片机连接如图4所示:
图4显示部分电路图
3.3波形转换(D/A)电路
功能:
将波形样值得编码转换成模拟值,完成波形的输出。
由一片DAC0832和LF356运放组成。
DAC0832是一个具有两个输入数据寄存器的8位DAC。
目前生产的DAC芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。
另一类芯片内没有数据寄存器,输出信号随数据输入线的状态的变化而变化,因此不能直接与微型计算机接口,必须通过并行口与微型计算机接口。
DAC0832是具有20条引线的双列直插式CMOS器件,它内部具有两级数据寄存器,完成8位电流D/A转换,股不需要外加电路。
DAC0832是电流输出型,示波器上显示波形,通常需要电压信号,电流信号到电压信号的转换可以用运算放大器LF356实现。
单片机想DAC0832发送数字编码,产生不同的输出。
先利用采样定理对各种波形进行抽样,然后把各种采样值进行编码,收到的数字量存入各个波形表,执行程序时通过查表的方法依次取出,经过D/A转换后输出就可以得到波形。
假如N个点构成波形的一个周期,则DAC0832输出N个样点值后,样值点形成运动轨迹,即,一个周期。
重复输出N个点后,成为第二个周期。
利用单片机的晶振控制输出周期的速度,也就是控制输出的波形的频率。
这样就控制了输出波形的及其幅值和频率,例如:
正弦波,取20个样值点。
具体连接的电路图如图5所示:
图5D/A转换的电路连接图
3.4红外电路
图6红外电路
红外的工作原理:
51单片机对遥控的解码和我们前面所讲的串口并口通信不同,他不是单纯的用高电平代表1,低电平代表0。
这一点大家要从思想上面转变过来。
他是发送一连串的数据帧,这个数据帧就是一连串的二进制代码,单片机通过区分高电平的持续时间来区别红外编码的。
我们就以HC6800单片机上的红外接头为例来说明,当高电平的脉冲宽度为1.12ms的时候单片机认为它为0,当高电平的脉冲宽度为2.25的时候单片机认为它为1。
单片机是通过判断脉冲的宽度来得到信息位为0还是为1的。
当我们按下遥控器的按键时,遥控器将发出如图2的一串二进制代码,我们称它为一帧数据。
根据各部分的功能。
可将它们分为5部分,分别为引导码、地址码、地址码、数据码、数据反码。
遥控器发射代码时.均是低位在前。
高位在后。
由图2分析可以得到.引导码高电平为4.5ms,低电平为4.5ms。
当接收到此码时.表示一帧数据的开始。
单片机可以准备接收下面的数据。
地址码由8位二进制组成,共256种.图中地址码重发了一次。
主要是加强遥控器的可靠性.如果两次地址码不相同.则说明本帧数据有错.应丢弃。
不同的设备可以拥有不同的地址码.因此。
同种编码的遥控器只要设置地址码不同,也不会相互干扰。
。
在同一个遥控器中.所有按键发出的地址码都是相同的。
数据码为8位,可编码256种状态,代表实际所按下的键。
数据反码是数据码的各位求反,通过比较数据码与数据反码.可判断接收到的数据是否正确。
如果数据码与数据反码之间的关系不满足相反的关系.则本次遥控接收有误.数据应丢弃。
在同一个遥控器上.所有按键的数据码均不相同。
在图2中,数据码为十六进制的0CH,数据反码为十六进制的0F3H(注意低位在前).两者之和应为0FFH。
3.5复位电路
这种复位电路的工作原理是:
单片机的复位电路在刚接通电时,刚开始电容是没有电的,电容内的电阻很低,通电后,5V的电通过电阻给电容进行充电,电容两端的电会由0V慢慢的升到4V左右(此时间很短一般小于0.3秒),RC构成的微分电路在上电瞬间产生一个微分脉冲,其宽度大于两个机器周期,89C51将复位。
正因为这样,复位脚的电由低电位升到高电位,引起了内部电路的复位工作,RST端电压慢慢下降,降到一定电压值以后,即为低电平,单片机开始正
常工作(这是单片机的上电复位,也叫初始化复位);当按下复位键时,电容两端放电,电容又回到0V了,于是又进行了一次复位工作(这是手动复位原理)。
图7复位电路
3.6外部时钟电路
图3采用11.0592MHz的晶振和两个22pf的电容组成时钟电路部分
图8外部时钟电路
3.7LCD显示部分电路
为了节约成本,采用1602来作为显示器,用独立按键来控制不同的显示,能完成基本的显示功能。
图9LCD液晶显示电路
3.8电源部分
本电源设计了两个接口,方便不同接口的电源接入,并且在电源部分加上滤波电容,起过滤接入电源的杂波的作用,为了电路中得到+12V、-12V和+5V的直流工作电压,用变压器变压后再通过芯片和电容设计出所需要的电路。
图10电源电路
3.9独立按键部分
图八为用独立按键来控制不同的输出波形
图11独立按键
3.10串口通信模块
图中通过MAX232进行TTL电平和232电平转换,从而单片机和上位机之间通信提供通道。
图12串口通信电路
通信电路的目的就是让通信双发的电平匹配,单片机用的是TTL电平,上位机的串口用的是232电平。
TTL电平的逻辑1的电压范围是+3.3V到+5V,逻辑0的电压范围是0到+3.3V;232电平的逻辑1的电压范围是-15V到-5V,逻辑0的电压范围是+5V到+15V。
因此设计串口通信电路就是让这两种电平统一。
四、软件设计
主程序和子程序都存放在AT89C51单片机中。
主程序的功能是:
开机以后负责查键,即做出键盘扫描及显示工作,然后根据用户所按的键转到相应的子程序进行处理。
子程序的功能有:
延时子程序、中断程序、显示子程序、按键子程序,按键子程序中有任意频率的设置的数字键(0~9)及确定键、幅值和频率的加和减键、幅值频率的转换键、波形的转换键等共15个键。
主程序的流程图如图4.1所示:
完成全部硬件和软件过后,将程序下载到单片机中进行测试,通过反复测试,反复的修改函数的功能,同时完善硬件的功能,使系统达到最优控制。
4.1程序流程图
图13程序流程图
4.2LCD显示流程图
图14LCD显示框图
五、系统仿真
5.1仿真电路图
通过Proteus软件和电路原理图绘制出如下仿真电路图,对程序和电路功能进行测试
图15proteus仿真电路图
5.2输出波形图
将编写好的程序下载到单片机中进行仿真,通过反复测试,反复的修改函数的功能,使系统输出如下波形:
图16正弦波
图17方波
图18三角波
图19正弦波、方波、三角波三种波形叠加后的波形
六、硬件和软件测试
6.1硬件调试
整个硬件调试过程基本顺利,由于采用了分单元模块制作,各个单元电路工作稳定,给调试工作带来很大的方便。
放大模块部分在实物模拟时,出现发送信号不稳定、跳变的问题,经过仔细的检查,电路连线路劲和线路连接问题,最终发现电路连接是出现连接未牢固的问题,从而得以解决。
6.2软件调试
虽然对于单片机的变成较熟悉,但是还存在一些问题,主要有以下问题:
(1)在写调幅值的程序时,按照自己的想法写好,下载带单片机中,发现,每按一次键,幅值一次性增大到5V或者一次性减为0V,经过对程序的分析得知,当按下键时,程序循环很多次,为次添加一条键按下时死循环的语句使每次按下键幅值加一次后的只保持住,从而解决了问题。
(2)当幅值和显示调试成功后,写调频程序时,在硬件电路中调试时发现,三种波形融合到一起出现,在经过添加定时器中断的方法,结果使P0口不能够输出模拟信号,经过努力,最后终于解决了这个问题。
(3)由于AT89C51本身性能的问题,而且硬件方面又没有用倍频电路,产生的三角波和方波的频率没有达到1MHz,只达到2KHz,但是方波达到了1MHz。
七、设计心得
本次课程设计,我系统电路的主要设计,在做课程设计的时间了我学到了很多东西,总的来说有如下收获:
(1)通过对电路的设计,对51系列单片机的原理和功能有了进一步的了解,学到了更多的电路知识,如复位电路的原理,晶振电路的作用,旁路电容的作用,上拉电阻的功能,串口通信电路,熟悉了ULN2003芯片的原理和功能,认识了温湿度传感器DHT21,并且能对其进行应用。
(2)通过原理图和PCB图的绘制,学会了AltumDesigner软件的使用,并且能用它完成一些简单的电路设计,并且对元器件的封装有了一定的了解和认识。
(3)通过元器件的购买和电路板的焊接,增强了自身的实践动手能力,对电路原理的应用有了更深刻的认识。
(4)在测试阶段,尤其是在硬件电路的检查阶段,有很深的体会,有时候一个简单的错误就有可能造成电路无法正常工作,通过找错排错,更加熟悉了电路的原理和51单片机的工作原理。
(5)通过本次课程设计,我更加深刻的认识到团队合作的重要性,小组成员分工合作,是设计成功的关键,只有大家团结一致,才能更快更好的完成任务,但是从本课程设计中,我也看到了自身还存在许多不足,在实践动手能力方面比较弱,对一些电路知识掌握得不是很好。
八、参考文献
[1]童诗白,华成英.模拟电子技术基础〔M〕.北京:
高等教育出版社,2003.345-362
[2]潘永雄,沙河,刘向阳.电子线路CAD实用教程〔M〕.西安:
西安电子科技大学出版社,2001.13-118.
[3]张毅刚,彭喜源,谭晓昀,曲春波.MCS-51单片机应用设计[M].哈尔滨:
哈尔滨工业大学出版社,1997.53-61
九、附件
程序如下:
波形的发生,产生正弦波方波,方波,三角波,产生的频率要求为100HZ到20KHZ,峰峰值为5v,步进为1.1v,为了准确的确定产生频率,利用定时器1来做,用了波形的设定采用红外,波形产生是用DAC0832来产生,同时采用直通的方式,数据发生过去就发生转换
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineDAC0832P2
#defineLCD_DATAP0//液晶的数据端口
sbitDAC0832_K1=P3^3;//DAC0832的控制端口
sbitDAC0832_K2=P3^4;//为低电平时候表示导通
sbitIRIN=P3^5;
sbitLCD_RS=P3^0;//寄存器选择输入
sbitLCD_RW=P3^1;//液晶读/写控制
sbitLCD_EN=P3^2;//液晶使能控制
sbitK1=P1^3;//波形:
正弦波,方波,三角波之间的转变
sbitK2=P1^4;//频率和幅值之间转变
sbitK3=P1^5;//缩小
sbitK4=P1^6;//波形的存储增大
sbitK5=P1^7;//
uintTIME=0;//定时的时间
uintSIN_TIME=500,SIN_VALUE=50;//输出波形的频率和周期,电压的值
uintFAN_TIME=500,FAN_VALUE=50;//方波的参数
uintTRIG_TIME=500,TRIG_VALUE=50;//三角波的参数
uintTRIG_FRENCE=100,FAN_FRENCE=100,SIN_FRENCE=100;
ucharnext=0,boxing_chose=1,count=0;//用于正弦波的采样数组的移动;boxing_chose为0是正弦波,当为1时为方波,当为2是三角波
ucharvaluefrenc_chose=0;
ucharY0=0;//红外接收的数据
ucharcodeLcd_table[10]={'0','1','2','3','4','5','6','7','8','9'};//数值表用于液晶的显示
ucharIRCOM[7];
ucharcodeSin_table[20]={0x80,0xa7,0xcb,0xe7,0xf9,0xff,0xf9,0xe7,0xcb,
0xa7,0x80,0x58,0x34,0x18,0x6,0x0,0x6,0x18,0x34,0x58};
//正弦波数据表采用的是72个点
voidDelay_ms(ucharms)
{//延时为1ms
uchari=0;
for(i=110;i>0;i--)
for(ms;ms>0;ms--);
}
/**********************************************************/
//红外线高低电平的延时
voiddelay(unsignedcharx)//x*0.14MS
{
unsignedchari;
while(x--)
{
for(i=0;i<13;i++){}
}
}
voiddelay1(intms)
{
unsignedchary;
while(ms--)
{
for(y=0;y<250;y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
//==========================================================//
//液晶的显示程序
//==========================================================//
voidLCD_WCOM(ucharcmd)
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
Delay_ms
(1);
LCD_EN=1;
Delay_ms
(1);
LCD_EN=0;
}
voidLCD_WDAT(uchardat)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
Delay_ms
(1);
LCD_EN=1;
Delay_ms
(1);
LCD_EN=0;
}
voidLCD_INIT()
{
LCD_WCOM(0x38);//扩充指令操作
Delay_ms
(1);
LCD_WCOM(0x0c);//基本指令操作
Delay_ms
(1);
LCD_WCOM(0x06);//显示开,关光标
Delay_ms
(1);
LCD_WCOM(0x01);//清除LCD的显示内容
Delay_ms
(1);
}
voidDisplay()
{
uchari,dis_table[6];
if(boxing_chose==0)
{
LCD_WCOM(0x80);//显示正弦波形三个英文字母
LCD_WDAT('s');
Delay_ms
(1);
LCD_WCOM(0x80+1);
LCD_WDAT('i');
Delay_ms
(1);
LCD_WCOM(0x80+2);
LCD_WDAT('n');
LCD_WCOM(0x80+4);//显示频率的英文
LCD_W
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 波形 发生器 设计 报告 毕业论文