用dac0832产生正弦波的设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

摘要:DAC转换器是一种将数字量转换成模拟量的器件,本论文简要介绍模数转换器DAC0832的工作原理和芯片结构,并利用模数转换器DAC0832输出正弦波进一步分析输出波形的模拟失真度。关键词:模数转换器DAC0832,正弦数据区,模拟失真度,FFT变换。引言:1.简要模数转换器DAC0832的介绍DAC转换器是一种将数字量转换成模拟量的器件,其特点是接收、保持和转换的是数字信息,不存在随温度和时间的漂移问题,因此电路的抗干扰性能较好。DAC0832是8位分辨率的D/A转换集成芯片,它具有价格低廉、接口简单及转换控制容易等特点。它由8位输入锁存器、8位DAC寄存器、8位DIA转换电路及转换控制电路组成,能和CPU数据总线直接相连,属中速转换器,大约在1us内将一个数字量转换成模拟量输出。1.1DAC0832的结构如下:D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS:片选信号输入线(选通数据锁存器),低电平有效;WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、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端外接电阻值可调整转换满量程精度;Vcc:电源输入端,Vcc的范围为+5V~+15V;VREF:基准电压输入线,VREF的范围为-10V~+10V;AGND:模拟信号地DGND:数字信号地1.2DAC0832的引脚图和内部结构1.3DAC0832的三种工作方式1.直通方式直通方式就是使DAC0832内部的两个寄存器(输入寄存器和DAC寄存器)处于不锁存状态,数据一旦到达输入端DI7~DI0,就直接送入D/A转换器,被转换成模拟量。当ILE为高电平,CS和WR1﹑WR2和XFER端都接数字地,这时锁存信号LE1﹑LE2均为高电平,输入寄存器和DAC寄存器均处于不锁存状态,即直通方式。2.单缓冲方式单缓冲方式就是使两个寄存器中的一个处于缓冲方式,另一个处于锁存方式,数据只通过一级缓冲器送入D/A转换器。通常的做法是将和XFER均接地,使DAC寄存器处于直通方式,而把ILE接高电平,接端口地址译码信号,WR1接CPU系统总线的IOW信号,使输入寄存器处于锁存方式。单缓冲方式只需执行一次写操作即可完成D/A转换。一般不需要多个模拟量同时输出时,可采用单缓冲方式。3.单缓冲方式单缓冲方式就是使两个寄存器均处于锁存方式,数据要经过两级锁存(即两级缓冲)后再送入D/A转换器,这就是说,要执行两次写操作才能完成一次D/A转换。只要将ILE接高电平,WR1和WR2接CPU的IOW,CS和XFER分别接两个不同的I/O地址译码信号即可。图中的Rfb是内部电阻,是为外部运算放大器提供的反馈电阻,用以提供适当的输出电压,Vref端是由外电路为芯片提供的参考电源,电压范围在-10V~+10V。另外,DAC0832为电流输出型DAC,使用时需外接运算放大器,芯片的电源电压最好工作在+15V。2利用DAC0832产生正弦波2.1设计出原理图2.2编写程序和必要说明1)CODESEGMENTASSUMECS:CODEDAPORTEQU0070HCONTPORTEQU00DFHDATAPORTEQU00DEHDATAEQU0500HSTART:JMPDACONTORLDACONTORL:CALLFORMATCALLLEDDISPMOVDX,DAPORTSS2:MOVAL,80H;初始值MOVBX,0HDACON1:OUTDX,ALMOVCX,0008H;INCBXCMPBX,32;比较一个周期是否结束JZSS2DACON2:LOOPDACON2MOVAL,CS:[BX+OFFSETSINDATA];正弦取值JMPDACON1LEDDISP:MOVAL,90HMOVDX,CONTPORTOUTDX,ALMOVBYTEPTRDS:[0600H],00HLED1:CMPBYTEPTRDS:[0600H],07HJALED2MOVBL,DS:[0600H]MOVBH,0HMOVAL,CS:[BX+DATA]MOVDX,DATAPORTOUTDX,ALADDBYTEPTRDS:[0600H],01HJNZLED1LED2:RETFORMAT:MOVBX,0MOVWORDPTRDS:[BX+0500H],4006HADDBX,2MOVWORDPTRDS:[BX+0500H],4040HADDBX,2MOVWORDPTRDS:[BX+0500H],4F5BHADDBX,2MOVWORDPTRDS:[BX+0500H],3F7FHADDBX,2RETSINDATA:DB80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh;正弦波数据数据区DB0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96hDB80h,66h,4eh,38h,25h,15h,09h,04hDB00h,04h,09h,15h,25h,38h,4eh,66hCODEENDSENDSTART2)说明上面程序中的正弦波数据区的数据共有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,最后得到失真度基于FFT的失真度仪,采用频域分析方法,通过计算傅立叶系数,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('samplesofDTFTmagnitude');xlabel('freuencyinpi');axis([0,pi,0,100]);3.3正弦函数的时域图形、理想频谱和实际频谱理想连续波形正弦序列理想频谱结论:本设计产生的信号模拟失真度位12.5%.可知失真度较大,可采取的具体措施为一个周期取更多的点,0832最多抽256个有效点数。

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功