用dac0832产生正弦波的设计
- 格式:doc
- 大小:35.00 KB
- 文档页数:8
并行数模转换设计报告(DAC0832芯片)学校:院系:专业:学生:指导老师:目录:1. 设计任务 (1)2.设计方案 (2)2.1 DAC0832工作模式选择……………2.2 输出级放大器确定参数确定………3.电路测试及结果分析 (19)4.参考文献 (20)5.附录 (21)1. 设计任务:用ATmega128单片机及DA0832芯片设计一个能产生正弦波的电路。
2. 设计方案2.1 DAC0832工作模式选择2.1.1 DAC0832芯片引脚介绍DAC0832主要性能参数:①分辨率8位;②转换时间1μs;③参考电压±10V;④单电源+5V+15v;⑤功耗20mW。
D/A转换器品种繁多,有权电阻DAC、变形权电阻DAC、T型电阻DAC、电容型DAC和权电流DAC等。
其中DAC0832是双列直插式8位D/A转换器。
能完成数字量输入到模拟量(电流)输出的转换。
逻辑电平输入与TTL兼容,共20引脚。
如下图所示:D0~D7:数字信号输入端。
ILE:输入寄存器允许,高电平有效。
CS:片选信号,低电平有效。
WR1:写信号1,低电平有效。
XFER:传送控制信号,低电平有效。
WR2:写信号2,低电平有效。
IOUT1、IOUT2:DAC电流输出端。
Rfb:是集成在片内的外接运放的反馈电阻。
Vref:基准电压(-10~10V)。
Vcc:是源电压(+5~+15V)。
AGND:模拟地NGND:数字地,可与AGND接在一起使用。
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
2.1.2 DAC0832的结构DAC0832的内部结构如图10.9所示。
DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的锁存信号为ILE;第二级锁存器称为DAC寄存器,它的锁存信号为传输控制信号XFER。
因为有两级锁存器,DAC0832可以工作在双缓冲器方式,即在输出模拟信号的同时采集下一个数字量,这样能有效地提高转换速度。
实验六D/A0832(幅频可调正弦波发生器)实验1.实验目的(1)了解D/A转换与单片机的接口方法;掌握D/A转换芯片DA0832的性能及编程方法。
(2)掌握通过DA0832数字合成正弦波形信号的方法。
(3)掌握正弦波形信号幅度、频率调节的软件处理方法。
2.实验内容单片机P1口与4个按键连接,用于信号幅度和频率调节操作键。
单片机P0、P2.7、P3.6(-WR)与DA0832、2个741(运放)连接构成波形信号输出电路。
编程使波形信号输出电路输出正弦波信号,并且可通过操作键调节信号的幅度和频率。
幅度和频率调节级别从0~10,共11个等级。
3.实验器材(1)Proteus仿真软件(2)keil C51开发环境软件4.实验原理(1)外扩模拟输出口——利用单片机总线功能,通过单片机的P0、P2.7、P3.6(-WR)与DA0832、1个741(运放)连接,可外扩一个模拟输出口;该口在经过1个741(运放)的单到双信号变换处理,可输出双极性波形信号。
(2)通过“正弦表.exe”软件产生8位量化级数和36个采样点数的正弦波信号波表数组数据。
通过DA0832双极性波形信号电路顺序输出波表数组数据中的数据,可实现数字合成的正弦波信号。
(3)通过调节(键操作)顺序输出波表数据的时间间隔延时,可改变正弦信号的频率。
时间间隔延时控制参数TC=0~10,共有11个等级。
(4)通过调节(键操作)比例系数,将比例系数乘于波表中各个数据,可改变正弦信号的幅度。
幅度调整的计算公式解释如下:y=x×K+(1-K)×128 公式(1)其中:x原波表数据;y调整后的波表数据;K比例系数;(1-K)×128用于双极性信号输出位移调整。
为了提高计算速度,所有参与运算参数采用整型变量,比例系数K可变换成如下形式:K=RC÷10 公式(2)其中:R C幅度控制参数。
R C=0~10(11个等级),K=0~1。
基于单片机和dac0832的波形发生器目录一、内容摘要二、设计任务三、元器件说明四、硬件电路设计五、程序编译一、内容摘要波形发生器是一种常用的信号源,广泛的应用于电子电路、自动控制系统和教学实验等领域,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源。
由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察。
测量被测仪器的输出响应,以分析确定它们的性能参数。
信号发生器是电子测量领域中最基本、应用最为广泛的一类电子仪器。
它可以产生多种波形信号,如方波、锯齿波、三角波等,因而广泛应用于通信、雷达、导航、宇航等领域。
本次课程设计使用的AT89C51单片机构成的发生器可产生三角波,正弦波和方波,波形的周期可用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、性能优越等特点。
此设计给出了源代码,通过仿真测试,其性能指标达到了设计要求。
二、设计任务利用DAC0832输出正弦波信号(用示波器观察输出波形),初始频率为50Hz,变频采用“+”、“-”键控制,实时测量输出信号的频率值,并分析和实测输出信号的频率范围。
具体完成以下任务:1.完成系统的方案设计,给出系统框图。
2.完成系统的硬件设计,给出硬件电路图和系统资源分配表。
3.完成系统的软件设计,给出程序流程图和程序编写。
4.运用Proteus仿真软件对所设计的系统进行调试和仿真,直到预定的功能全部仿真通过,给出仿真结果。
5.准确、高质量地进行印刷电路板的焊接。
6.完成课程设计报告。
三、元器件说明知识简介:DAC0832当今世界在以电子信是8位分辨率的D/A转换集成芯片,与微处理器完全兼容,这个系列的芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到了广泛的应用。
这类D/A转换器由8位输入锁存器,8位DAC寄存器,8位DA转换电路及转换控制电路构成。
摘要:DAC转换器是一种将数字量转换成模拟量的器件,本论文简要介绍模数转换器DAC0832的工作原理和芯片结构,并利用模数转换器DAC0832输出正弦波进一步分析输出波形的模拟失真度。
关键词:模数转换器DAC0832,正弦数据区,模拟失真度,FFT变换。
引言:1.DAC1us D0~D7ILECSWR1、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;IOUT2:电流输出端2,其值与IOUT1值之和为一常数;Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;VccVREFAGNDDGND1数据只通过一级缓冲器送入D/A转换器。
通常的做法是将和XFER均接地,使DAC寄存器处于直通方式,而把ILE接高电平,接端口地址译码信号,WR1接CPU系统总线的IOW信号,使输入寄存器处于锁存方式。
单缓冲方式只需执行一次写操作即可完成D/A转换。
一般不需要多个模拟量同时输出时,可采用单缓冲方式。
3.单缓冲方式单缓冲方式就是使两个寄存器均处于锁存方式,数据要经过两级锁存(即两级缓冲)后再送入D/A转换器,这就是说,要执行两次写操作才能完成一次D/A转换。
只要将ILE接高电平,WR1和WR2接CPU的IOW,CS和XFER分别接两个不同的I/O地址译码信号即可。
图中的+10V2利用2.12.21)START:JMPDACONTORLDACONTORL:CALLFORMATCALLLEDDISPMOVDX,DAPORTSS2:MOVAL,80H;初始值MOVBX,0HDACON1:OUTDX,ALMOVCX,0008H;INCBXCMPBX,32;比较一个周期是否结束JZSS2OUTDX,AL ADDBYTEPTRDS:[0600H],01H JNZLED1LED2:RETFORMAT:MOVBX,0MOVWORDPTRDS:[BX+0500H],4006HADDBX,2MOVWORDPTRDS:[BX+0500H],4040HADDBX,2MOVWORDPTRDS:[BX+0500H],4F5BHRET2时,通过3计算模拟失真度3.1模拟失真度的定义模拟失真度一般由基波剔除法和频谱分析法来计算,本论文采用频谱分析法来计算。
显示频率,幅度可调,可产生四种波形,正弦波,方波,锯齿波,三角波,希望你能喜欢,给你发了一张效果图,喜欢的话别忘了采纳我的回答啊#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define DAdata P0 //DA数据端口sbit DA_S1= P2^0; // 控制DAC0832的8位输入寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit DA_S2= P2^1; // 控制DAC0832的8位DAC寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit key= P3^2;uchar wavecount; //'抽点'计数uchar THtemp,TLtemp;//传递频率的中间变量uchar judge=1; //在方波输出函数中用于简单判别作用uchar waveform; //当其为0、1、2时,分别代表三种波uchar code freq_unit[3]={10,50,200}; //三种波的频率单位uchar idata wavefreq[3]={1,1,1}; //给每种波定义一个数组单元,用于存放单位频率的个数uchar code lcd_hang1[]={"Sine Wave " "Triangle Wave " "Square Wave " "Select Wave: " "press No.1 key! "};uchar idata lcd_hang2[16]={"f= Hz "};uchar code waveTH[]={0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe};uchar code waveTL[]={0x06,0x8a,0x10,0x4e,0x78,0x93,0xa8,0xb3,0xbe,0xc6, //正弦波频率调整中间值0xac,0xde,0x48,0x7a,0x99,0xaf,0xbb,0xc8,0xd0,0xde, //三角波频率调整中间值0x88,0x50,0x90,0x32,0x34,0xbe,0x4a,0xa3,0xe5,0x2c};/**************************************************************************************** *********/uchar code triangle_tab[]={ //每隔数字8,采取一次0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x 60,0x68,0x70,0x78,0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0x e0,0xe8,0xf0,0xf8,0xff,0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x9 8,0x90,0x88,0x80,0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x 18,0x10,0x08,0x00};uchar code sine_tab[256]={//输出电压从0到最大值(正弦波1/4部分)0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa 5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,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,//输出电压从最大值到0(正弦波1/4部分)0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7 ,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0x d6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9 c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,//输出电压从0到最小值(正弦波1/4部分)0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5 a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x 22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x 03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,//输出电压从最小值到0(正弦波1/4部分)0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x 06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x 29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x 63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};void delay(uchar z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void triangle_out() //三角波输出{DAdata=triangle_tab[wavecount++];if(wavecount>64) wavecount=0;DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器void sine_out() //正弦波输出{DAdata=sine_tab[wavecount++];DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器}void square_out() //方波输出{judge=~judge;if(judge==1) DAdata=0xff;else DAdata=0x00;DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器}/************1602液晶的相关函数*************/#define lcd_ports P1sbit rs=P2^2;sbit rw=P2^3;sbit lcden=P2^4;void write_com(uchar com){rs=0; //置零,表示写指令lcden=0;lcd_ports=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date){rs=1; //置1,表示写数据(在指令所指的地方写数据)lcden=0;lcd_ports=date;delay(5);lcden=1;delay(5);lcden=0;void disp_lcd(uchar addr,uchar *temp1){uchar num;write_com(addr);delay(1); //延时一会儿???for(num=0;num<16;num++){write_date(temp1[num]);//或者这样写write_date(*(temp1+num));delay(1);}}void init_lcd(){//uchar num;lcden=0; //可有可无???rw=0; //初始化一定要设置为零,表示写数据write_com(0x38); //使液晶显示点阵,为下面做准备write_com(0x0c); //初始设置write_com(0x06); //初始设置write_com(0x01); //清零write_com(0x80); //使指针指向第一行第一格disp_lcd(0x80,&lcd_hang1[3*16]); //在第一行显示disp_lcd(0xc0,&lcd_hang1[4*16]); //在第二行显示}/********************1602液晶函数声明结束*********************/ void main(){uchar i=0;DA_S2=0; //使DAC寄存器处于直通状态DAdata=0;DA_S1=1; //关闭8位输入寄存器init_lcd();waveform=0;TMOD=0x01; //设置定时器0为16位工作方式IT0=1; //设置外部中断0为下降沿触发ET0=1; //开定时器中断EX0=1;EA=1;while(1){//DAout(0xff); //可输出TTL波形//DAout(0x80);//T_temp=32;}}void timer0() interrupt 1{TH0=THtemp;TL0=TLtemp;if(waveform==0) sine_out();else if(waveform==1) triangle_out();else if(waveform==2) square_out();}void key_int0() interrupt 0{uchar keytemp;uint total_freq; //总频率EA=0; TR0=0; //关总中断与定时器delay(5); //延时够吗???if(key==0) //确实有按键按下而引发中断{keytemp=P3&0xf0; //获取P3口高四位的值switch(keytemp){case 0xe0: //选择波形waveform++;if(waveform>2) waveform=0;break;case 0xd0: //频率按规定单位依次增加wavefreq[waveform]++;if(wavefreq[waveform]>10) wavefreq[waveform]=1; // /*这边要用“>10”,因为它比“=11”可靠break;case 0xb0: //频率按规定单位依次衰减wavefreq[waveform]--;if(wavefreq[waveform]<1) wavefreq[waveform]=10; //这边要用“<1”,因为它比“=0”可靠性更高break;case 0x70: //TTL输出DA_S2=1; //使DAC寄存器关闭break;}THtemp=waveTH[waveform*10+(wavefreq[waveform]-1)]; //方括号中选取第几个数后,并把该值赋给T_tempTLtemp=waveTL[waveform*10+(wavefreq[waveform]-1)];total_freq= wavefreq[waveform] * freq_unit[waveform]; //求输出频率(个数*单位)lcd_hang2[5]=total_freq%10+0x30; //在液晶中显示个位,(0x30 在液晶显示中表示数字0)total_freq/=10; lcd_hang2[4]=total_freq%10+0x30; //在液晶中显示时十位total_freq/=10; lcd_hang2[3]=total_freq%10+0x30; //在液晶中显示时百位total_freq/=10; lcd_hang2[2]=total_freq%10+0x30; //在液晶中显示时千位disp_lcd(0x80,&lcd_hang1[waveform*16]); //在第一行显示disp_lcd(0xc0,lcd_hang2); //在第二行显示}wavecount=0; //'抽点'计数清零while(!key);EA=1; TR0=1; //开启总中断与定时器}。
微机原理与接口技术课程设计题目:利用DAC0832实现正弦波输出.班级:.姓名:.学号:.日期:2011年12月15日目录1、引言 ........................................................................................................... 错误!未定义书签。
1.1背景和编写目的..................................................................................... 错误!未定义书签。
1.2 术语和缩写................................................................................................ 错误!未定义书签。
2.系统组成........................................................................................................ 错误!未定义书签。
3.硬件设计........................................................................................................ 错误!未定义书签。
3.1 8259A模块:............................................................................................. 错误!未定义书签。
3.2 DAC0832模块 ........................................................................................... 错误!未定义书签。
摘要:DAC 转换器是一种将数字量转换成模拟量的器件,本论文简要介绍模数转换器DAC0832 的工作原理和芯片结构,并利用模数转换器DAC0832 输出正弦波进一步分析输出波形的模拟失真度。
关键词:模数转换器DAC0832 ,正弦数据区,模拟失真度,FFT 变换。
引言:1 . 简要模数转换器DAC0832 的介绍DAC 转换器是一种将数字量转换成模拟量的器件,其特点是接收、保持和转换的是数字信息,不存在随温度和时间的漂移问题,因此电路的抗干扰性能较好。
DAC0832 是8 位分辨率的D/A 转换集成芯片,它具有价格低廉、接口简单及转换控制容易等特点。
它由8 位输入锁存器、8 位DAC 寄存器、8 位DIA 转换电路及转换控制电路组成,能和CPU 数据总线直接相连,属中速转换器,大约在1u s内将一个数字量转换成模拟量输出。
1.1 DAC0832 的结构如下:D0 ~D7 :8 位数据输入线,TTL 电平,有效时间应大于90ns( 否则锁存器的数据会出错) ;ILE :数据锁存允许控制信号输入线,高电平有效;CS :片选信号输入线(选通数据锁存器),低电平有效;WR1 :数据锁存器写选通输入线,负脉冲(脉宽应大于500ns )有效。
由ILE 、CS 、WR1 的逻辑组合产生LE1 ,当LE1 为高电平时,数据锁存器状态随输入数据线变换,LE1 的负跳变时将输入数据锁存;XFER :数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns )有效;WR2 :DAC 寄存器选通输入线,负脉冲(脉宽应大于500ns )有效。
由WR1 、X FER的逻辑组合产生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 :数字信号地1.2 DAC0832 的引脚图和内部结构1.3 DAC0832 的三种工作方式1 .直通方式直通方式就是使DAC0832 内部的两个寄存器(输入寄存器和DAC 寄存器)处于不锁存状态,数据一旦到达输入端DI7 ~DI0, 就直接送入D/A 转换器,被转换成模拟量。
桂林电子科技大学单片机最小应用系统设计报告指导老师:吴兆华学生:刘毅学号: 082011119桂林电子科技大学机电工程学院单片机最小应用系统设计报告一、设计题目 (3)二、设计目的 (3)三、系统硬件图 (4)3.1系统的硬件电路原理图 (4)3.2 最小系统原理电路图 (4)3.3 电压放大电路 (6)四、程序流程图 (6)五、系统说明与分析 (8)5.1设计步骤 (8)5.2 D/A转换器与MCS-51单片机接口 (8)5.3 D/A转换器选择要点及辅助电路 (9)5.4典型的D/A转换器芯片DAC0832性能介绍 (10)5.5 8051单片机简要介绍 (13)5.6 数码显示部分 (16)六、源程序 (17)七、总结 (24)八、参考文献 (24)单片机最小应用系统设计报告一、设计题目单片机的D/A 接口应用:用0832单片机控制生成正弦波,频率和幅值可调。
二、设计目的设计目的:1.了解单片微机系统中实现D/A(数字/模拟)转换的原理及方法;2.详细了解D/A转换芯片0832的性能及编程方法;3.了解单片机系统中扩展D/A转换的基本原理,了解单片机如何进行数据采集;4.掌握DAC0832,AT89C51输入/输出接口电路设计方法;5.掌握DAC0832转换实现的程序控制方法;6.掌握单片机汇编编程技术中的设计和分析方法;7.学会使用并熟练掌握电路绘制软件Protel99SE(或DXP);8.掌握电路图绘制及PCB图布线技巧。
设计要求:1、在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。
2、完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。
3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。
4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。
5、用AT89C51,DAC0832设计出题目所要求的正弦波实现频率和幅值可调输出,并针对实际设计过程中软、硬件设计方面出现的问题提出相应解决办法。
微机原理与接口技术课程设计报告书题目:DAC0832 波形发生器学院名称:湖南科技大学潇湘学院班级:电子信息工程001班指导老师:欧青立陈君宋芳学号:姓名:赵翔- 1 -潇湘学院电子信息001班学号:姓名:赵翔目录一、引言 (1)二、设计目的 (2)三、原理说明 (2)四、硬件设计 (4)五、设计原理 (6)六、程序编译 (7)1、输出方波子程序 (7)2、输出三角波子程序 (8)3、输出锯齿波子程序 (8)4、输出正弦波子程序 (9)5、输出梯形波的子程序 (10)6、主程序 (11)七、调试方法与结果 (15)八、心得体会 (16)- 2 - 一.引言波形发生器是一种常用的信号源,广泛的应用于电子电路、自动控制系统和教学实验等领域,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源。
由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察。
测量被测仪器的输出响应,以分析确定它们的性能参数。
信号发生器是电子测量领域中最基本、应用最为广泛的一类电子仪器。
它可以产生多种波形信号,如锯齿波、三角波、梯形波等,因而广泛应用于通信、雷达、导航、宇航等领域。
本次课程设计使用的AT89C51单片机构成的发生器可产生三角波,波形的周期可用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、性能优越等特点。
此设计给出了源代码,通过仿真测试,其性能指标达到了设计要求。
二、设计目的1、掌握DAC0832与PC机的接口方法。
2、掌握D/A转换应用程序设计方法。
三、原理说明◆知识简介:DAC0832当今世界在以电子信是8位分辨率的D/A转换集成芯片,与微处理器完全兼容,这个系列的芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到了广泛的应用。
这类D/A转换器由8位输入锁存器,8位DAC寄存器,8位DA转换电路及转换控制电路构成。
桂林电子科技大学单片机最小应用系统设计报告指导老师:吴兆华学生:刘毅学号: 082011119桂林电子科技大学机电工程学院单片机最小应用系统设计报告一、设计题目 (3)二、设计目的 (3)三、系统硬件图 (4)3.1系统的硬件电路原理图 (4)3.2 最小系统原理电路图 (4)3.3 电压放大电路 (6)四、程序流程图 (6)五、系统说明与分析 (8)5.1设计步骤 (8)5.2 D/A转换器与MCS-51单片机接口 (8)5.3 D/A转换器选择要点及辅助电路 (9)5.4典型的D/A转换器芯片DAC0832性能介绍 (10)5.5 8051单片机简要介绍 (13)5.6 数码显示部分 (16)六、源程序 (17)七、总结 (24)八、参考文献 (24)单片机最小应用系统设计报告一、设计题目单片机的D/A 接口应用:用0832单片机控制生成正弦波,频率和幅值可调。
二、设计目的设计目的:1.了解单片微机系统中实现D/A(数字/模拟)转换的原理及方法;2.详细了解D/A转换芯片0832的性能及编程方法;3.了解单片机系统中扩展D/A转换的基本原理,了解单片机如何进行数据采集;4.掌握DAC0832,AT89C51输入/输出接口电路设计方法;5.掌握DAC0832转换实现的程序控制方法;6.掌握单片机汇编编程技术中的设计和分析方法;7.学会使用并熟练掌握电路绘制软件Protel99SE(或DXP);8.掌握电路图绘制及PCB图布线技巧。
设计要求:1、在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。
2、完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。
3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。
4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。
5、用AT89C51,DAC0832设计出题目所要求的正弦波实现频率和幅值可调输出,并针对实际设计过程中软、硬件设计方面出现的问题提出相应解决办法。
摘要:DAC 转换器是一种将数字量转换成模拟量的器件,本论文简要介绍模数
转换器DAC0832 的工作原理和芯片结构,并利用模数转换器DAC0832 输出正弦波
进一步分析输出波形的模拟失真度。
关键词:模数转换器DAC0832 ,正弦数据区,模拟失真度,FFT 变换。
引言:
1 . 简要模数转换器DAC083
2 的介绍
DAC 转换器是一种将数字量转换成模拟量的器件,其特点是接收、保持和转换
的是数字信息,不存在随温度和时间的漂移问题,因此电路的抗干扰性能较好。
DAC0832 是8 位分辨率的D/A 转换集成芯片,它具有价格低廉、接口简单及转
换控制容易等特点。
它由8 位输入锁存器、8 位DAC 寄存器、8 位DIA 转换电路
及转换控制电路组成,能和CPU 数据总线直接相连,属中速转换器,大约在1u s
内将一个数字量转换成模拟量输出。
1.1 DAC0832 的结构如下:
D0 ~D7 :8 位数据输入线,TTL 电平,有效时间应大于
90ns( 否则锁存器的数
据会出错) ;
ILE :数据锁存允许控制信号输入线,高电平有效;
CS :片选信号输入线(选通数据锁存器),低电平有效;
WR1 :数据锁存器写选通输入线,负脉冲(脉宽应大于500ns )有效。
由ILE 、
CS 、WR1 的逻辑组合产生LE1 ,当LE1 为高电平时,数据锁存器状态随输入数据
线变换,LE1 的负跳变时将输入数据锁存;
XFER :数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns )
有效;
WR2 :DAC 寄存器选通输入线,负脉冲(脉宽应大于500ns )有效。
由WR1 、X FER
的逻辑组合产生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 :数字信号地
1.2 DAC0832 的引脚图和内部结构
1.3 DAC0832 的三种工作方式
1 .直通方式
直通方式就是使DAC0832 内部的两个寄存器(输入寄存器和DAC 寄存器)
处于不锁存状态,数据一旦到达输入端DI7 ~DI0, 就直接送入D/A 转换器,被转
换成模拟量。
当ILE 为高电平,CS 和WR 1 ﹑WR 2 和XFER 端都接数字地,这时
锁存信号LE 1 ﹑LE 2 均为高
电平,输入寄存器和DAC 寄存器均处于不锁存状态,即直通方式。
2 .单缓冲方式
单缓冲方式就是使两个寄存器中的一个处于缓冲方式,另一个处于锁存方式,
数据只通过一级缓冲器送入D/A 转换器。
通常的做法是将和XFER 均接地,使
DAC 寄存器处于直通方式,而把ILE 接高电平,接端口地址译码信号,WR 1 接
CPU 系统总线的IOW 信号,使输入寄存器处于锁存方式。
单缓冲方式只需执行
一次写操作即可完成D/A 转换。
一般不需要多个模拟量同时输出时,可采用单
缓冲方式。
3 .单缓冲方式
单缓冲方式就是使两个寄存器均处于锁存方式,数据要经过两级锁存(即两级
缓冲)后再送入D/A 转换器,这就是说,要执行两次写操作才能完成一次D/A 转
换。
只要将ILE 接高电平,WR 1 和WR 2 接CPU 的IOW ,CS 和XFER 分别接两
个不同的I/O 地址译码信号即可。
图中的Rfb 是内部电阻,是为外部运算放大器提供的反馈电阻,用以提供适当
的输出电压,Vref 端是由外电路为芯片提供的参考电源,电压范围在-10V ~
+10V 。
另外,DAC0832 为电流输出型DAC ,使用时需外接运算放大器,芯片
的电源电压最好工作在+15V 。
2 利用DAC0832 产生正弦波
2.1 设计出原理图
2.2 编写程序和必要说明
1 )CODE SEGMENT
ASSUME CS:CODE
DAPORT EQU 0070H
CONTPORT EQU 00DFH
DATAPORT EQU 00DEH
DATA EQU 0500H
START: JMP DACONTORLDACONTORL:CALL FORMAT CALL LEDDISP
MOV DX,DAPORT
SS2 : MOV AL, 8 0H ;初始值
MOV BX , 0H
DACON1: OUT DX,AL
MOV CX, 0008 H ;
INC BX
CMP BX,32 ; 比较一个周期是否结束
JZ SS2
DACON2: LOOP DACON2
MOV AL,CS:[BX+OFFSET SINDATA] ; 正弦取值
JMP DACON1
LEDDISP:MOV AL,90H
MOV DX,CONTPORT
OUT DX,AL
MOV BYTE PTR DS:[0600H],00 H
LED1: CMP BYTE PTR DS:[0600H],07H JA LED2
MOV BL,DS:[0600H]
MOV BH,0H
MOV AL,CS:[BX+DATA]
MOV DX,DATAPORT
OUT DX,AL
ADD BYTE PTR DS:[0600H],01H
JNZ LED1
LED2: RET
FORMAT: MOV BX,0
MOV WORD PTR DS:[BX+0500H],4006H ADD BX,2
MOV WORD PTR DS:[BX+0500H],4040H ADD BX,2
MOV WORD PTR DS:[BX+0500H],4F5BH ADD BX,2
MOV WORD PTR DS:[BX+0500H],3F7FH ADD BX,2
RET
SINDATA: DB 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh ;正弦波数据数据区
DB 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h
DB 80h,66h,4eh,38h,25h,15h,09h,04h
DB 00h,04h,09h,15h,25h,38h,4eh,66h
CODE ENDS
END START
2 )说明上面程序中的正弦波数据区的数据共有32 个,通过两个公式算出。
当
0<=x<=8*pi/16 时,通过128+127*sin(x) 计算数据,当24*pi/16<=x<=2*pi 时,
通过127* 【1+sin(x) 】来计算数据,pi/2 到3*pi/2 区间的数据可对称写出。
3 计算模拟失真度
3.1 模拟失真度的定义
模拟失真度一般由基波剔除法和频谱分析法来计算,本论文采用频谱分析法来
计算。
基本方法就是通过傅里叶变换,产生出信号的频谱图,根据频谱含量Cn ,
计算出失真度。
基于FFT 的失真度仪,采用频域分析方法,通过计算傅立叶系数,C1 、C2 …Cn ,最后得到失真度基于F FT
的失真度仪,采用频域分
析方法,通过计算傅立叶系数,C1 、C2 …Cn ,最后得到失真度
3.2 用MATLAB 软件绘出实际频谱的程序如下:
x=[0,0.975,1.913,2.778,3.535,4.157,4.619,4.904,5,4.904,4.619,4.157,3. 535,2.778,1.913,0.975,0,-0.975,-1.913,-2.778,-3.535,-4.157,-4.619,-
4.904,-5,-4.904,-4.619,-4.157,-3.535,-2.778,-1.913,-0.975,0]
n=0:31;
Xk=fft(x);
magXk=abs(x(1:17));
k1=0:1:16;w1=2*pi/32*k1;
subplot(212);stem(w1,magXk);title('samples of DTFT magnitude'); xlabel('freuency in pi');
axis([0,pi,0,100]);
3.3 正弦函数的时域图形、理想频谱和实际频谱理想连续波形
正弦序列
理想频谱结论:本设计产生的信号模拟失真度位12.5 %. 可知失真度较大,可采取的
具体措施为一个周期取更多的点,0832 最多抽256 个有效点数。