《基于单片机和dac0832的波形发生器.doc》由会员分享,可在线阅读,更多相关《基于单片机和dac0832的波形发生器.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、- -基于单片机和dac0832的波形发生器目录一、 容摘要二、 设计任务三、 元器件说明四、 硬件电路设计五、 程序编译一、容摘要波形发生器是一种常用的信号源,广泛的应用于电子电路、自动控制系统和教学实验等领域,是现代测试领域应用最为广泛的通用仪器之一。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源。由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察。测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最根本、应用最为广泛的一类电子仪器。它可以产生多种波形信号,如方波、锯齿波、三角波等,因而广泛应用于通信、雷达、导
2、航、宇航等领域。本次课程设计使用的AT89C51单片机构成的发生器可产生三角波,正弦波和方波,波形的周期可用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、构造紧凑、性能优越等特点。此设计给出了源代码,通过仿真测试,其性能指标到达了设计要求。二、设计任务利用DAC0832输出正弦波信号用示波器观察输出波形,初始频率为50Hz,变频采用“、“键控制,实时测量输出信号的频率值,并分析和实测输出信号的频率围。具体完成以下任务:1. 完成系统的方案设计,给出系统框图。2. 完成系统的硬件设计,给出硬件电路图和系统资源分配表。3. 完成系统的软件设计,给出程序流程图和程序编写。4. 运用
3、Proteus仿真软件对所设计的系统进展调试和仿真,直到预定的功能全部仿真通过,给出仿真结果。5. 准确、高质量地进展印刷电路板的焊接。6. 完成课程设计报告。三、元器件说明u 知识简介:DAC0832当今世界在以电子信是8位分辨率的D/A转换集成芯片,与微处理器完全兼容,这个系列的芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到了广泛的应用。这类D/A转换器由8位输入锁存器,8位DAC存放器,8位DA转换电路及转换控制电路构成。1、DAC0832的引脚及功能:DAC0832是8分辨率的D/A转换集成芯片。与微处理器兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等
4、优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC存放器、8位D/A转换电路及转换控制电路构成。u 应用特性:DAC0832是微处理器兼容型D/A转换器,可以充分利用微处理器的控制能力实现对D/A转换的控制。这种芯片有许多控制引脚,可以和微处理器控制线相连,承受微处理器的控制,如ILE、/CS、/WR1、/WR2、/XFER端。有两级锁存控制功能,能够实现多通道D/A的同步转换输出。DAC0832部无参考电压源;须外接参考电压源。DAC0832为电流输入型D/A转换器,要获得模拟电压输出时,需要外加转换电路。u 各引脚功能说明:D0D7:8位数据输入线,TTL电平
5、,有效时间应大于90ns(否那么锁存器的数据会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS:片选信号输入线选通数据锁存器,低电平有效;WR1:数据锁存器写选通输入线,负脉冲脉宽应大于500ns有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;XFER:数据传输控制信号输入线,低电平有效,负脉冲脉宽应大于500ns有效;WR2:DAC存放器选通输入线,负脉冲脉宽应大于500ns有效。由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC存放器的输出随存放器的输入而变化,LE2的负跳变时
6、将数据锁存器的容打入DAC存放器并开场D/A转换。IOUT1:电流输出端1,其值随DAC存放器的容线性变化;IOUT2:电流输出端2,其值与IOUT1值之和为一常数;Rfb:反应信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;Vcc:电源输入端,Vcc的围为+5V+15V;VREF:基准电压输入线,VREF的围为-10V+10V;AGND:模拟信号地DGND:数字信号地u DAC0832三种数据输入方式:1双缓冲方式:即数据经过双重缓冲后再送入DA转换电路,执行两次写操作才能完成一次DA转换。2单缓冲方式:不需要多个模拟量同时输出时,可采用此种方式。3直通方式:此时两个存放器均处于直通
7、状态,因此要将、和端都接数字地,ILE接高电平,使LE1、LE2均为高电平,致使两个锁存存放器同时处于放行直通状态,数据直接送入DA转换电路进展DA转换。2. CPU芯片AT89C511AT89C51概述AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。2. AT89C51引脚说明AT89C51单片机引脚图如图3-2所示。它有40个引脚,其中包含2个专用于主电源的引脚,2个外接晶体的引脚,4个
8、控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。四、设计原理D/A转换器产生各种波形的原理:利用D/A转换器输出的模拟量与输入数字量成正比关系这一特点,将D/A转换器作为微机输出接口,CPU通过程序向D/A转换器输出随时间呈现不同变化规律的数字量,那么D/A转换器就可输出各种各样的模拟量,如方波、三角波、锯齿波、正弦波等。仿真电路图输出正弦波、三角波,锯齿波仿真图:三角波:锯齿波:正弦波:五:程序编译主程序:#includesbit key2=P22;sbit key1=P21;sbit key0=P20;char flag; /波型输出标置变量bit time;unsigned c
9、har i;int num ;void frequency() ;void delay(int z) /延时z毫秒 int x,y; for(x=z;x0;x-) for(y=124;y0;y-);unsigned char sin(unsigned char x)/正弦波unsigned char code sin_tab=0x80, 0x83, 0x86, 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae, /上半周 0xb0, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf,
10、 0xc1, 0xc4, 0xc7, 0xc9, 0xcc, 0xce, 0xd1, 0xd3, 0xd5, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xed, 0xef, 0xf0, 0xf2, 0xf3, 0xf4, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe,
11、 0xfd, 0xfd, 0xfc, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf4, 0xf3, 0xf2, 0xf0, 0xef, 0xed, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe2, 0xe0, 0xde, 0xdc, 0xda, 0xd8, 0xd5, 0xd3, 0xd1, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb3, 0xb0, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x99,
12、 0x96, 0x92, 0x8f, 0x8c, 0x89, 0x86, 0x83, 0x80, 0x80, 0x7d, 0x7a, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52, /下半周期 0x4f, 0x4c, 0x49, 0x46, 0x43, 0x41, 0x3e, 0x3b, 0x39, 0x36, 0x33, 0x31, 0x2e, 0x2c, 0x2a, 0x27, 0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1b, 0x19, 0x17, 0x15,
13、 0x14, 0x12, 0x10, 0x0f, 0x0d, 0x0c, 0x0b, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 ,0x09, 0x0b, 0x0c, 0x0d,0x0f, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x23,
14、0x25, 0x27, 0x2a, 0x2c,0x2e, 0x30, 0x33, 0x35, 0x38, 0x3b, 0x3d, 0x3e, 0x40, 0x43, 0x46, 0x48, 0x4b, 0x4e, 0x51, 0x54, 0x57, 0x5a, 0x5d, 0x5f, 0x60, 0x63, 0x66, 0x69, 0x6b, 0x6d, 0x6f, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7e, 0x80; return sin_tabx;void DAC0832(unsigned char x) P1=x;void main()char d;d=1;
15、TMOD=0X02;num=10;TH0=256-num; /num用来控制采样一个点所用的时间TL0=256-num;ET0=1; /按键接于外部中断0,与中断1EA=1;TR0=1;flag=2; /开场时有输出i=0;while(1) if(key2=0) /按一下key3,d自加1 delay(5); if(key2=0) while(!key2);d+;if(d=21)/当d=21,d变为1d=1; frequency() ; if(time=1) time=0; if(i255) i=0; else i=i+d; /设置采样间隔 switch(flag) /当按键1的为输出三角波,
16、按键2时输出正弦波 case 0:DAC0832(i);break;/ 当flag=0时,锯齿波 case 1: if(i127)/ 当flag=1时,三角波 DAC0832(255-i); else DAC0832(i); break; case 2: DAC0832(sin(i); /当flag=2时,正弦波 break; default: break; void time0() interrupt 1TH0=256-num;TL0=256-num; time=1; void frequency() if(key0=0) / /key0控制flag,频率选择 delay(5) ; if(key0=0) /再次检测 while(!key0); /等待按键释放 flag+; /按一下加1 if(flag=3) /大于2返回0 flag=0; if(key1=0)/检测P21是否按下 delay(5) ; if(key1=0) /再次检测 while(!key1); num=num+10; /按一下减10 if(num=250) /小于5,返回5num=10; - -.可修编- .