《基于单片机的16位数模转换波形发生器项目报告.doc》由会员分享,可在线阅读,更多相关《基于单片机的16位数模转换波形发生器项目报告.doc(28页珍藏版)》请在三一办公上搜索。
1、目录一、 概述21.1 课题研究的内容和意义21.2达到的技术指标2二、系统总体设计42.1 系统设计方案论证(几种方案选一)42.2 系统总体框图及简要说明实现了的主要功能4三、 硬件电路设计63.1 元器件的选择63.2单片机控制模块133.3温度数据采集模块143.4显示模块143.5温度数据无线传输电路15四、软件设计174.1主程序流程图174.2其他功能流程图19五、系统调试235.1测试环境和方法235.2测试结果235.3出现问题及解决方法23六、展望26一、 概述1.1 课题研究的内容和意义本课题采用51单片机对两个DAC0832进行控制来实现16位DA输出。因为高精度DAC
2、转换芯片价格比较贵,而且有时不易购买,通过对2个DAC0832进行控制,可以构成高精度的DAC,既降低了成本又解决了实际需要。1.2技术指标设计并制作一个基于单片机的16位DA输出,能够输出方波、锯齿波、三角波、梯形波、正弦波这5种波形,在输出波形的同时能够实现波形的调频和调幅,波形在示波器上显示。本设计可以通过按键控制实现波形调频,通过改变DA的基准电压输入来实现调幅。二系统的总体设计2.1系统设计方案论证第一种方案:直接采用16位DA转换芯片,让单片机对16位DA芯片进行控制,从而输出波形。第二种方案:采用2个8位DA转换芯片DAC0832,两个DA芯片采用双缓冲数据输入方式,让单片机先后
3、控制这两个DA芯片的数据输入,最后再一起把数据经DA转换器转换输出,从而输出波形。最终采用第二种方案。2.2系统总体框图及简要说明实现了的主要功能。单片机 示波器两个DAC0832按键 实现了波形输出和波形的调频调幅。三、硬件电路设计3.1元器件的选择:硬件电路用了STC89C51RC单片机,8位DA转换芯片DAC0832,运放LM358,还有MAX232.3.2单片机控制模块3.3DA输出模块:软件设计1. 主程序流程图:开始 调用 显示波形 子程序 调用独立键盘扫描 子程序 单片机端口 初始化2. 子程序独立按键检测及波形显示程序流程图 开始 判断键1是否被按下,是则置标志位a+;a5置0
4、 是 判断 标志位a 是否等于0 否检测键2是否按下波形调频延时函数时间标志位加大 否 是 否 是 否波形调频延时函数时间标志位减小检测键3是否按下 是 否 结束产生梯形波产生正弦波产生三角波产生方波产生锯齿波 结束判断标志位a=5?判断标志位a=4?判断标志位a=3?判断标志位a=2?判断标志位a=1? 开始 是 否是否是否是 否是否总程序:#include#include#include#define uchar unsigned char#define uint unsigned intsbit da1wr1=P10;sbit da1wr2=P11;sbit da2wr1=P12;sbi
5、t da2wr2=P11;sbit ile=P13;sbit cs=P12;sbit key1=P34;sbit key2=P35;sbit key3=P36;sbit key4=P37;uint i=0;uint ih=0;uint il=0;/uchar numdis=0;uchar a=0;uchar d=0;uchar c=10;uchar k;uchar num=3;uchar code tab256=0x80,0x82,0x85,0x88,0x8b,0x8e,0x91,0x94,0x97,0x9a,0x9d,0xa0,0xa3,0xa6,0xa9,0xac,0xaf,0xb2,0x
6、b6,0xb9,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0x
7、f7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x
8、60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x
9、01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80;code unsigne
10、d char table2=0,255;void delayms(uint xms)uint i,j;for(i=xms;i0;i-)for(j=110;j0;j-);/*void delay( ) uchar i; for(i=0;i=10)num=1;if(c=20)c=5;if(key3=0)delayms(10);if(key3=0)while(!key3);c-;num-;if(num=0)num=10;if(c3)c=20;void display(uchar a)if(a=1)/锯齿波i=i+5;ih=i/256;il=i%256;P0=il;da1wr1=0;da1wr1=1;
11、P0=ih;da2wr1=0;da2wr1=1;da1wr2=0;da1wr2=1;for(k=0;kc;k+)_nop_();if(a=2)/方波/da1wr1=0;/da2wr1=0;/da1wr2=0;P0=0;da1wr1=0;da1wr1=1;da2wr1=0;da2wr1=1;da1wr2=0;da1wr2=1;for(k=0;kc-2;k+)_nop_();P0=255;da1wr1=0;da1wr1=1;da2wr1=0;da2wr1=1;da1wr2=0;da1wr2=1;for(k=0;kc;k+)_nop_();if(a=3)/ 三角波if(d=0)i=i+5;if(i=
12、65535)d=1;ih=i/256;il=i%256;P0=il;da1wr1=0;da1wr1=1;P0=ih;da2wr1=0;da2wr1=1;da2wr2=0;da2wr2=1;for(k=0;kc;k+)_nop_();elsei=i-5;if(i=5)d=0;if(i=65535)d=1;ih=i/256;il=i%256;P0=il;da1wr1=0;da1wr1=1;P0=ih;da2wr1=0;da2wr1=1;da2wr2=0;da2wr2=1;for(k=0;kc;k+)_nop_();if(a=4)/正弦波 if(+i=256)i=0;P0=tabi;da1wr1=0
13、;da1wr1=1;da2wr1=0;da2wr1=1;da1wr2=0;da1wr2=1;for(k=0;kc;k+)_nop_();if(a=5)/梯形波if(d=0)i=i+5;P0=i;da1wr1=0;da1wr1=1;da2wr1=0;da2wr1=1;da1wr2=0;da1wr2=1;if(i=255)P0=255;da1wr1=0;da1wr1=1;da2wr1=0;da2wr1=1;da1wr2=0;da1wr2=1;delayms(num);d=1;elsei=i-5;P0=i;if(i=0)d=0;da1wr1=0;da1wr1=1;da2wr1=0;da2wr1=1;
14、da1wr2=0;da1wr2=1;void main()ile=1;cs=0;da1wr1=1;da2wr1=1;da1wr2=1;while(1)keyscan();display(a); 系统调试 1. 测试环境和方法(1) 软件测试软件测试的环境是在Proteus软件。首先是搭建电路,总电路如下图所示。然后通过电路中的单片机下载编写好的程序,打开示波器查看是否产生了预料的波形。调试过程先是用一块DAC0832搭建电路并进行测试,之后进行两块DAC0832搭建电路实现16位数模转换测试。(2) 硬件测试硬件是在万能板上进行焊接,先是焊接出一个单片机小系统,包括电源电路,晶振电路,复位电路
15、,串口下载电路,独立键盘电路等。为了测试小系统是否正常工作,又加上了led灯电路进行测试。焊接好电路后接到示波器上进行测试。2.测试结果(1)软件测试在Proteus软件中测试一块DAC0832产生波形时可以正常显示。而两块DAC0832一起工作时便出现了问题。其中锯齿波,方波能够正常显示,但三角波,梯形波,正弦波就出现了问题,三角波和梯形波在显示时只能先显示波形上升部分,也就是先显示一个上升的锯齿波,隔段时间再显示波形下降部分,也就是一个下降的锯齿波。两个总是不能同时显示。(2) 硬件测试首先单片机小系统通过led灯测试通过,单片机正常工作。之后进行一块DAC0832数模转换产生波形测试,发
16、现无法产生波形,都是一些杂波,而且电压的峰值很小,只有几毫伏,完全达不到5伏的电压要求。两块DAC08332一起工作也是一样。3.产生问题及解决方法(1)软件两块DAC0832一起工作时Proteus软件中测试出现了问题。其中锯齿波,方波能够正常显示,但三角波,梯形波,正弦波就出现了问题,三角波和梯形波在显示时只能先显示波形上升部分,也就是先显示一个上升的锯齿波,隔段时间再显示波形下降部分,也就是一个下降的锯齿波。两个总是不能同时显示。但是产生波形的程序使用的思想是一样的,为什么会出现这样的结果呢?通过修改多次程序循环的方式后以失败告终,后来采用改变数模转换加数字的幅度,发现,当数字提高到25
17、7时,波形就可以正常输出了,此时相当于每次两块DAC0832都是输出同样的转换数据。因为加数字的幅度过大,所以失去了16位数模转换的意义,但尝试过多种方法仍然无法解决,最后只能通过牺牲精度换取波形的正常显示。而正弦波在使用正弦函数后无法产生预料的波形,总是出现杂波。我们通过Visual C+6.0测试正弦函数发现函数可以产生正常的正弦数组,证明我们产生数模转换的数据是没有问题的,但是把数据送去转换后出来的波形就是一些杂波,同上面一样,我们又尝试用精度来换取波形的正常显示,发现是可以的,但这种方法缺陷大,它牺牲了精度,使16位数模转化的意义无法很好地体现。(2) 硬件一块DAC0832数模转换产
18、生波形测试,发现除了方波能显示(但电压不够),其他都是一些杂波,而且电压的峰值很小,只有几毫伏,完全达不到5伏的电压要求。两块DAC08332一起工作也是一样。起初我们测试是不是单片机发送数据出现问题,于是采用串口通信进行测试,发现单片机发出的数据是对的,排除了一个可能。之后又测试是否DA芯片、运算放大器芯片LM385与单片机连接是否有问题,于是对电路板进行大加修改,用万能表进行测试,线路的连接都是没有问题的,但发现还是无法产生波形,且电压还是很小。冲着电压很小这一点,我们用实验室的恒压源进行测试,发现我们电压再升高时,波形依然出不来。最后我们把目光转向了运算放大器。查阅大量资料后,发现MAX
19、232芯片2、6管脚的电压是在+10,-10左右,于是我们想到把这个电压加在运算放大器电源管脚,经过测试后波形终于出来了,电压虽然有所提高,提到了3点多伏,但还是达不到要求。我们想到我们这个电路所使用的运算放大器芯片总共有两块LM385双运放。所以我们猜测是因为两块运放把电压分走了,所以我们又加上了一块MAX232上去,每个运放接电源的两管脚都接上MAX232的2、6脚。此时电压终于提了上来,符合要求了。最后一个问题是波形不够准,很粗糙。我们开始怀疑是软件有问题,但转念一想,仿真测试是通过的,但我们还是报着试试的心态进行程序修改。考虑到DAC0832转换时间的问题,所以在程序上进行延时处理,发
20、现波形还是一样粗糙。后来经过多种尝试未果,就否决了软件问题,转向硬件方面。我们最后使用买来的单片机实验板来给DAC0832提供数据,发现此时波形光滑了。终于找出了原因,于是重新焊电路板,省略了原先的led电路。电路板焊出来后波形正常产生了。至此遇到的问题基本解决。 展望在做项目的期间,碰到了某些波形无法正常输出的问题,虽然已经解决了,但解决的方法缺陷大,在接下来的时间里,将学习汇编语言,尝试用汇编看能否解决此问题。也会尝试使用其他种类的运算放大器来搭建电路看能否有所好转如果可以解决的话,利用这种思路,我们还可以用四块DAC0832实现32位数模转换,甚至用更多的芯片实现更高的精度的数模转换,做
21、出更加精密的波形发生器。另外,我们将用标准的16位数模转换芯片来做信号发生器,与我们用两块8位芯片做的信号发生器做对比,看它们的差距。作为一个信号发生器,做得足够精确的话,给下一级电路供给信号源将得到非常准确的结果。信号源往往是电子系统的第一级电路,这一级的好坏与否,直接影响到下面种种电路的效果,其意义非常重大。在这次做项目的过程中,我们学习到许多调试电路的方法,为以后做更难的项目打下基础。同时,好的开端是成功的一半,我们第一个项目的成功,将推动我们后面更多项目的进展。相信凭借我们此次项目中所表现出来的努力争取,绝不放弃的精神,我们会学到更多的东西。附录1:原理图附录2:PCB附录3:程序:附录4:主要元件的PDF文件(另附)项目所用元器件:元件列表:型号 封装价格(元)公司1.STC89C51单片机DIP40 7.8 STC2.晶振11.0592MXTAL1.33.DAC0832DIP206.45NationalSemiconductor4.LM358DIP80.68COPES-VULCAN5.MAX232DIP161.06.电容30pf直插0.017电容10uf直插0.028.电阻1K直插0.039.电阻10K直插0.0210.电阻15K直插0.0211.电阻240K直插0.031210K排阻直插0.213.发光二极管DIP0.1314.按键直插0.03