1课设题目:波形发生器设计——按键控制波形2内容摘要:近年来,波形发生器在各种领域中得到越来越广泛的应用。本系统主要通过研究51单片机的功能,外加D/A转换器等其它器件,进行硬件设计和软件编程,完成锯齿波、梯形波、三角波、方波和正弦波共五种波形的形成。波形频率的变化由程序来控制,即通过改变定时器的初值来改变输出波形相邻两点的时间间隔,从而实现波形频率的改变。3设计任务和要求:3.1课程设计任务:利用DAC0832产生三角波,锯齿波和方波。在矩形按键中任选三个按键作为按键“1”,“2”,“3”。按“1”键产生三角波;按“2”键产生锯齿波;按“3”键产生方波。波形频率为100Hz。用示波器观察输出。3.2课程设计基本要求:课题分析,查阅资料,方案论证,方案实现,系统联调,撰写实验设计报告成果要求:(1)系统方案(2)硬件电路原理图(3)软件源程序(4)设计说明书(课程设计报告)4设计方案4.1总体设计思路本次设计采用AT89C51及其外围扩展系统,软件方面主要是应用C语言设计程序。系统以AT89C51为核心,配置相应的外设及接口电路,用Keil及C等软件开发,用C语言编程,组成一个多功能信号发生器。用户通过按键选择输出实验室中经常使用到的几种基本波形:方波、锯齿波和三角波。方波由AT89C51单片机将最大值和最小值输出给D/A进行转换,并由用户通过键盘选择波形周期。可采用单片机程序产生以上3种波形,并通过一片D/A转换器输出。另外可采用一片D/A转换器来控制前一片D/A转换器的参考电压,从而可以改变输出波形幅值。通过外接键盘来设定波形的类型、幅值和频率。4-1总体方案结构图实验程序参考实验设计书(xl2000实验指导手册)中的实验6(端口按键判断技术(按键显示数字))和实验12(DA转换dac0832的原理与应用)的相应程序,再根据我们小组的课设实际要求,适当改变其程序,改写出适合我们小组的程序。我们小组利用端口按键判断技术(按键显示数字)中的按键设计。端口按键判断部份由8个轻触按键组成,一端接地,一端由JP48引出,当按下按键时,相应端口为低电平。我们需要这个键盘去对应相应的波形,通过按键盘上的K01,,K02,K03三个按键,实现相应的波形输出。然后我们应用实验12:DA转换DAC0832的原理与应用来实现波形的变换。锯齿波我们在实验课上就已经实现了,而三角波我们在考试的时候也实现了,剩下的矩形波比较简单,根据书本上的程序就可以得出相应的结果。4.2设计方法——硬件设计51单片机的最小系统由振荡电路、电源电路、复位电路、EA及应用程序组成。它有三种联接方式。一种是两级缓冲器型,即输入数据经过两级缓冲器型,即输入数据经过两级缓冲器后,送入D/A转换电路。第二种是单级缓冲型,输入数据经输入寄存器直接送入DAC寄存器,然后送D/A转换电路。第三种是两个缓冲器直通,输入数据直接送D/A转换电路进行转换。本电路仿真图如下:DAC0832的引脚及功能:DAC0832是双列直插式8位D/A转换器,完成数字量输入到模拟量输出的转换。图3-2DAC0832引脚图DAC0832结构:D0~D7:8位的数据输入端,D7为最高位,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS:片选信号输入线(选通数据锁存器),低电平有效;WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ms)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ms)有效。WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ms)有效。由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换;IOUT1:模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当DAC寄存器中数据全为0时,输出电流为0;IOUT2:模拟电流输出端2,IOUT2与IOUT1的和为一个常数;Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;Vcc:电源输入端,范围为(+5~+15)V;VREF:基准电压输入线,范围为(-10~+10)V;AGND:模拟信号地;DGND:数字信号地。4.3设计方法——软件设计系统软件由主程序和产生波形的子程序组成,软件设计主要是产生各种波形的子程序的编程。通过编程可得到各种波形。频率的改变可采用插入延时子程序的方法来实现。实验流程图:4-2实验流程图本电路仿真图如下:图4-3电路仿真图图4-4三角波仿真图图4-5锯齿波仿真图图4-6方波仿真图4.4波形的产生:锯齿波:voidju()//锯齿波函数{uchari;cs=0;//拉低片选位wr=0;//拉低写数据位for(i=0;i255;i++){DATA=i;delay();delay();}}三角波:voidsan()//三角波函数{uchari;cs=0;//拉低片选位wr=0;//拉低写数据位for(i=0;i255;i++){DATA=i;delay();}for(i=255;i0;i--){DATA=i;delay();}}方波:voidfang(){cs=0;//拉低片选位wr=0;//拉低写数据位DATA=0xff;delay1();delay1();delay2();//延迟DATA=0;delay1();delay1();delay2();}5系统调试5.1使用的主要仪器和仪表XL2000单片机综合仿真试验仪主机一台,USB通信电缆一根,系统连接数据线若干,装有WINDOWSXP系统的电脑一台,DS5022ME示波器一台5.2实验步骤接线方法:1用一个1PIN数据线一端插入CPU部份JP53(P3口)的P3.4,另外一端插入DAC0832部份的输入端JP24的WR端。2用一个1PIN数据线一端插入CPU部份JP53(P3口)的P3.1,另外一端插入DAC0832部份的输入端JP24的CS端。3用一根8PIN的数据排线,一端插入DAC0832部份的数据输入端JP27,另一端插入CPU部份JP51(P0口)4用一台示波器,在J2口观察DA转换后的输出信号。建议调整到Y轴0.2V/格X轴1MS/格.5按键接到P1口。用一条8PIN数据排线,把按键部份的JP48,接到CPU部份的P1口JP44.完成接线以后,将实验箱连到电脑上。接着运用Keil生成.hex文件,并通过XLISP程序写入实验箱中的芯片,然后打开示波器,将示波器连接线接到实验箱的J2接口。就可以在示波器上观察到相应波形。按K1产生三角波,按K2产生锯齿波,按K3产生方波。即可以得到实验所求。5.3整理性能测试数据和波形,并与设计要求比较分析对于本波形发生器,其硬件电路的调试可以按如下步骤进行1)硬件电路的总体检查2)单元电路调试3)波形输出电路调试实验结果图:图5-1三角波波形图图5-2锯齿波波形图图5-3方波波形图5.4调试中出现的故障、原因及排除方法(1)第一次我们编完程序以后,发现按键无法改变波形,一直显示的是锯齿波。但是我们反复检查程序,无法查出有错误之处。后来在老师的指导下,我们换了一个实验箱,就得出了正确的实验结果。这是实验箱的问题,由于按键老化接触不良。(2)在换完箱子之后,波形一切正常。但是频率不正确,没有达到实验要求的100Hz。我们小组查阅了资料,改动程序之后,三角波和锯齿波的波形频率是正常的,但是方波的频率不太正常。我们通过网上查阅资料,改变延迟函数可以改变频率,但是我们小组成员改变了之后还是不能得到正确结果。后来经过老师的提醒,是keil的晶振频率和实验箱上的频率没有对上。改好以后,波形的频率就正常了。6设计结论:本次的课程设计我是利用AT89C51和DAC0832来完成电路的设计的,用开关来控制各种波形的发生及转换,用单片机输出后,经过模数转换器生成波形,最终可以通过示波器观察。在这次的软件设计中,程序设计采用的是C语言。因为C语言简洁高效,是最贴近硬件的高级编程语言,并且我又有C语言的基础,所以编译起来比较容易。由于此次是第一次进行课设,很多东西都没有接触过,因此还不是很得心应手,所以在设计中遇到了很多问题及难点。比如:D/A转换器和锁存器的结构、功能等等,这些都需要自己去查找资料了解这些。但是毕竟是找的参考书和资料,做到后来发现很多程序都是不完整的,这让我们伤透了脑筋。看着别的小组都弄得有模有样了,可是我们连一个程序都还没有定好。好不容易又找到了相关类似的程序,可是结果还是很不尽人意。程序接线什么的都弄好了,调试也没有问题,可是就是无法达到预期想要的结果。课程设计这种东西最后还是要靠大家一起动脑筋。然后我们大家一起齐心协力,从平时做的实验﹑老师上课的举例﹑书本上的知识以及老师的辅导和其他同学的帮助下终于完成了。课程设计的过程中,当我们碰到不明白的问题时,老师总是耐心的讲解,给我们的设计以极大的帮助,使我们获益匪浅。因此非常感谢老师的教导。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名大学生,这种程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。单片机的课程设计是一门实践性很强的课程。通过这次课程设计,让我进一步理解单片机的硬件、软件和综合应用方面的知识,培养了我实践能力和综合应用能力,开拓了我的学习积极性、主动性,还让我学会灵活运用已经学过的知识,并能不断接受新的知识。并且培养了我大胆发明创造的设计理念,为今后就业打下良好的基础。通过这次课程设计,我掌握单片机应用系统的总体方案的设计方法;单片机应用系统的硬件设计方式;单片机应用系统的软件程序设计;还有单片机开发系统的应用和调试能力。这对我接下来的学习生活是有很大的帮助的。在此,感谢老师的悉心教导,可以让我这次课设顺利完成。答辩记录DAC0832的数模转换原理:D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。直通方式:处于直通方式时,8位输入寄存器、8位DAC寄存器都处于直接导通状态,8位数字量送到D/A的输入口,则直接进行D/A转换,从输出端得到的转换的模拟量。单缓冲方式:使得两个缓冲器中的一个处于导通状态,另一个处于受控状态,或者两个被控同时导通。DAC0832是电流型D/A转换电路,通过运算放大器将电流信号转换成电压信号输出。双缓冲方式:在DAC0832内部的8位数据寄存器和8位DAC寄存器可以分别选通,因此可以通过选通输入寄存器的控制端,将单片机输出的数据输入到输入寄存器,在需要D/A转换时,再选通DAC寄存器,实现D/A转换。我们这个课设选择双缓冲方式,来达到课设目的。附件(源程序)#includereg51.h#defineucharunsignedchar#defineuintunsignedint#defineKEYP1#defineDATAP0sbitcs=P3^1;sbitwr=P3^4;voiddelay(){ucharj;for(j=0;j3;j++);}voidsan(){uchari;cs=0;wr=0;for(i=0;i255;i++){DATA=i;delay();}for(i=255;i0;i--){DATA=i;delay