DAC0832波形发生器课程设计实验报告目录第1章系统设计方案 (2)1.1 设计思路 (2)1.2 方案比较与选择 (2)第2章系统硬件设计..................................................................................2. 2.1 主控制器电路 (2)2.2 数模转换电路 (3)第3章系统软件设计................................................................................ .6 3.1 系统整体流程...................................................................................... .6 3.2 数模转换程序...................................................................................... .6 第4章系统调试 (8)4.1 proteus的调试 (8)第5章结论与总结 (11)5.1 结论 (11)(系统总体设计与完成做一个总结,是客观的,主要包括:设计思路,设计过程,测试结果及完善改进的方向。
)5.2 总结 (11)(这是一个主观的总结,谈谈自己收获和不足等方面的内容。
)第1章系统设计方案1.1 设计思路(一)、课设需要各个波形的基本输出。
如输出矩形波、锯齿波,正弦波。
这些波形的实现的具体步骤:正弦波的实现是非常麻烦的。
它的实现过程是通过定义一些数据,然后执行时直接输出定义的数据就可以了。
然而为了实现100HZ的频率,终于发现,将总时间除了总步数,根据每步执行时间,算出延时时间,最终达到要求,然后建一个表通过查表来进行输出,这样主要工作任务就落到了建表的过程中。
这样做的好处在于,查表所耗费的时钟周期相同,这样输出的点与点之间的距离就相等了,输出的波形行将更趋于完美,当然更让我们感到的高兴的是它输出波形的频率将近达到了100赫兹,能够满足我们设计的扩展要求了。
而三角波,则每次累加1,当达到初值时,每次累减1,算出延时时间,也就达到要求了,矩形波和锯齿波类似。
(二)、这次做的三种波形可以相互转换,这个实现起来找了很多人最终发现,在每次循环之初进行扫描,而在每个中断入口处,对中断优先级进行设定,最终达到设计目的。
1.2 方案比较与选择方案一:采用模拟电路搭建函数信号发生器,它可以同时产生方波、三角波、正弦波。
但是这种模块产生的不能产生任意的波形(例如梯形波),并且频率调节很不方便。
方案二:采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。
方案三:使用集成信号发生器发生芯片,例如AD9854,它可以生成最高几十MHZ的波形。
但是该方案也不能产生任意波形(例如梯形波),并且价格昂贵。
方案四:采用AT89C51单片机和DAC0832数模转换器生成波形,加上一个低通滤波器,生成的波形比较纯净。
它的特点是可产生任意波形,频率容易调节,频率能达到设计的500HZ以上。
性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。
经比较,方案四既可满足课程设计的基本要求又能充分发挥其优势,电路简单,易控制,性价比高,所以采用该方案.第2章系统硬件设计2.1 主控制器电路89C52可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。
其内部还有一个控制寄存器,即控制口。
通常A口、B口作为输入输出的数据端口。
C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。
它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。
89C52可编程并行接口芯片工作方式说明:方式0:基本输入/输出方式。
适用于三个端口中的任何一个。
每一个端口都可以用作输入或输出。
输出可被锁存,输入不能锁存。
方式1:选通输入/输出方式。
这时A口或B 口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。
方式2:双向总线方式。
只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号。
原理框图:硬件设计2.2 数模转换电路由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。
DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。
但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。
DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。
1、DAC0832的引脚及功能:DAC0832是8分辨率的D/A转换集成芯片。
与微处理器兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
各引脚功能说明:D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS:片选信号输入线(选通数据锁存器),低电平有效;WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;IOUT2:电流输出端2,其值与IOUT1值之和为一常数;Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;Vcc:电源输入端,Vcc的范围为+5V~+15V;VREF:基准电压输入线,VREF的范围为-10V~+10V;AGND:模拟信号地DGND:数字信号地◆DAC0832三种数据输入方式:◆(1)双缓冲方式:即数据经过双重缓冲后再送入D/A转换电路,执行两次写操作才能完成一次D/A转换。
这种方式可在D/A转换的同时,进行下一个数据的输入,可提高转换速率。
更为重要的是,这种方式特别适用于要求同时输出多个模拟量的场合。
此时,要用多片DAC0832组成模拟输出系统,每片对应一个模拟量。
◆(2)单缓冲方式:不需要多个模拟量同时输出时,可采用此种方式。
此时两个寄存器之一处于直通状态,输入数据只经过一级缓冲送入D/A转换电路。
这种方式只需执行一次写操作,即可完成D/A转换。
◆(3)直通方式:此时两个寄存器均处于直通状态,因此要将、、和端都接数字地,ILE接高电平,使LE1、LE2均为高电平,致使两个锁存寄存器同时处于放行直通状态,数据直接送入D/A转换电路进行D/A转换。
这种方式可用于一些不采用微机的控制系统中或其他不须0832缓冲数据的情况。
第3章系统软件设计3.1 系统整体流程3.2 数模转换程序#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define DAC0832 P2#define ALL 65536#define Fosc 12000000uchar TH_0,TL_0,flag1,flag=0;uint FREQ=100,num;float temp;uchar code sin_num[]={0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,2, 2, 2,2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7,7, 8, 8, 9, 9,10, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21,22, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37,38, 39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 54, 55, 56,57, 59, 60, 61, 63, 64, 66, 67, 68, 70, 71, 73, 74, 75, 77, 78,80, 81, 83, 84, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101,102,104, 106,107, 109, 110, 112, 113, 115, 116, 118, 120, 121, 123, 124, 126, 128,129, 131, 132, 134, 135, 137, 139,140, 142, 143, 145, 146,148, 149, 151, 153, 154, 156, 157, 159, 160, 162, 163,165, 166, 168, 169, 171, 172, 174, 175, 177, 178, 180, 181, 182, 184, 185, 187,188, 189, 191, 192, 194, 195, 196, 198, 199, 200, 201, 203, 204, 205, 206, 208,209, 210, 211, 213, 214, 215, 216, 217, 218,219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 243, 243, 244, 245, 245, 246, 246, 247, 247, 248, 248, 249, 249, 250, 250, 251, 251, 251,252, 252, 253, 253, 253, 253, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 };sbit cs=P3^6;sbit change1=P3^2;sbit change2=P3^1;sbit change3=P3^0;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void init(){TMOD=0X01;temp=ALL-Fosc/12.0/256/FREQ;TH_0=(uint)temp/256;TL_0=(uint)temp%256;EA=1;EX0=1;IT0=1;ET0=1;TR0=1;}void changefreq(void){if(change==0){flag++; if(flag==4) {flag=0;num=0;}}TH_0=(uint)temp/256;TL_0=(uint)temp%256;}void sanjiaobo(void){for(num=0;num<255;num++){cs=0;DAC0832=num;cs=1;}for(num=255;num>0;--num){cs=0;DAC0832=num;cs=1;}}void fangbo(void){cs=0;DAC0832=0XFF;cs=1;for(num=0;num<255;num++);cs=0;DAC0832=0X00;cs=1;for(num=255;num>0;num--);}void juchibo(void){cs=0;DAC0832=++num;cs=1;}void zhengxianbo(void){for(num=0;num<255;num++){cs=0;DAC0832=sin_num[num];cs=1;}for(num=255;num>0;num--){cs=0;DAC0832=sin_num[num];cs=1;}}void ext0() interrupt 0{changefreq();}void timer0() interrupt 1{TH0=TH_0;TL0=TL_0;TR0=0;switch(flag){case 0: {sanjiaobo();TR0=1;break;}case 1: {fangbo();TR0=1;break;}case 2: {juchibo();TR0=1;break;}case 3: {zhengxianbo();TR0=1;break;}default: ;}}void main(){init();while(1);}第4章系统调试4.1 proteus的调试矩形波锯齿波正弦波第5章结论与总结5.1 结论基于单片机的信号发生器设计,这个信号发生器的设计中涉及到一个典型的控制过程。