简易数字信号发生器.ppt_第1页
简易数字信号发生器.ppt_第2页
简易数字信号发生器.ppt_第3页
简易数字信号发生器.ppt_第4页
简易数字信号发生器.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第十三讲 简易数字信号发生器,单片机程序设计实践教程,2,13.0 项目演示效果,图XP_13_01 步骤1-插接短接片连接示波器探针,3,图XP_13_02 步骤2-开机后系统默认进入正弦波发生模式,4,图XP_13_03 步骤3-系统的三角波发生模式,5,图XP_13_04 步骤4-系统的锯齿波发生模式,6,图XP_13_05 步骤5-系统的方波发生模式,7,13.1 项目目标设计,掌握DAC0832的工作原理和控制方式; 熟练掌握STC89C52RC的总线控制方法; 掌握示波器的基本使用方法; 理解给出的C语言源程序的结构和各语句所起作用; 在达到以上四点目标之后,根据本章“项目扩展任务”中提出的问题,以组或个人为单位,在规定时间里完成扩展项目任务。,8,13.2 项目任务,图13-1 简易数字信号发生器项目的电路原理图,9,简易数字信号发生器项目的电路原理图如图13-1所示,简易数字信号发生器主要是借助于DAC0832数模转换芯片来实现。数字量由STC89C52RC给出,通过DAC0832转换为模拟量并由参考电压Vrbf端输出。通过示波器,可以观测到由DAC0832的8脚产生的4种波形,这4种波形分别为正弦波、三角波、锯齿波和方波。 可以通过开发板上的按键S2、S3和S4选择三角波、锯齿波和方波的输出波形,S1、S5S16为正弦波选择按键,程序应实现按压S1S16键时,在数码管的1和2位置显示相应键值。即, 按压S1S16键,数码管1和2位置显示01,外接端子J3的1脚输出正弦波。 按压S2键,数码管1和2位置显示02,外接端子J3的1脚输出三角波。 按压S3键,数码管1和2位置显示03,外接端子J3的1脚输出锯齿波。 按压S4键,数码管1和2位置显示04,外接端子J3的1脚输出方波。 外接端子J3的1脚输出波形可以通过引入示波器来检测和观察,请读者在项目实践前准备好示波器。,10,13.3 系统板上硬件连线,简易数字信号发生器项目的连接插线设置见图13-2。,图13-2 简易数字信号发生器项目的连接插线设置,11,13.4 程序流程图,图13-3 简易数字信号发生器项目的C语言程序流程图,12,13.5 C语言源程序(略),13.6 系统构成和程序分析,13.6.1 DAC0832内部引脚功能和受控方式,DAC0832是8位的D/A转换器,CMOS工艺,芯片内有R-2R梯形电阻网络,用于对参考电压产生的电流进行分流完成模数转换,转换结果以一组差动电流IOUT1和IOUT2输出。 以下为DAC0832的主要参数: 分辨率8位。 D/A转换时间1s。 参考电压(Verf)为10+10V。 单电源+5+15V供电。 满量程误差为1+11LSB,其中1LSB为Vref1/2n(n是D/A转换的分辨率,此处为8位)。,13,图13-4 DAC0832内部结构和引脚功能,14,DAC0832是20引脚的双列直插式器件【26】,引脚分配如图13-4所示。 各引脚的含义解释如下: Vref 参考电压输入端,10+10V。 VCC 工作电压输入端,+5+15V。 DI7DI0 数字信号输入,其中DI0为最低位,DI7为最高位。 IOUT1 模拟电流输出端1,当输入数字为全1时,输出电流最大;全0时,输出电流为0。为了输出模拟电压,输出端须加I/V(电流/电压)转换电路。 IOUT2 模拟电流输出端2,规定IOUT1+IOUT2=常数。 Rfb 片内反馈电阻引脚,与运放配合构成I/V转换电路。 ILE 输入锁存使能信号输入端,高电平有效。 nCS 片选信号端,低电平有效。 nWR1 写信号1端,低电平有效。 nWR2 写信号2端,低电平有效。 nXfer 传输控制信号输入端,低电平有效。,15,当ILE为高电平,nCS和nWR1同时为低电平时,8位数字量可以通过DI0DI7引脚输入寄存器;当nCS或nWR1由低变高时,数据被锁存在输入寄存器的输出端。 对于DAC寄存器来讲,当nXfer和nWR2同时为低电平时,DAC寄存器中的数据与输入寄存器的输出数据一致;当nXfer或nWR2由低变高时,输入寄存器的数据被锁存在DAC寄存器的输出端,即可加到D/A转换器去进行转换。 图13-4还给出了DAC0832 内部结构功能图,在DAC0832 内部有1个8位的输入寄存器和1个8位的DAC寄存器,根据前面给出的分析,它们可以分别被选通。这样,CPU送来的数据先进入输入寄存器(由nCS控制),在需要进行D/A转换时,再选通DAC 寄存器(由nXfer控制),实现D/A转换,这种方式称为双缓冲方式。,16,图13-5 DAC0832的双缓冲控制方式,17,如图13-5为DAC0832的双缓冲控制方式构成示意图,地址译码可以由74HC138来实现,当CS0832A和CS0832B片选信号被分别给出,即可实现双缓冲控制方式。 DAC0832也可以工作在单缓冲方式,这种方式下可将输入寄存器设为直通状态,选通DAC 寄存器;也可将DAC寄存器设为直通状态,选通输入寄存器。图13-6给出了输入寄存器工作于受控状态,DAC寄存器工作于直通状态的单缓冲控制方式,对照图13-1可以看出PMY单片机开发板即采用了上述单缓冲控制方式。,18,图13-6 DAC0832的单缓冲控制方式,19,13.6.2 为什么模拟输出电压从参考电压输入端Vref引出,正常情况下,DAC0832转换后的模拟信号由IOUT1和IOUT2引脚输出,为了得到输出模拟电压,输出端须加I/V转换电路,见图13-5和图13-6所示。但是图13-1给出的开发板这一部分原理图中并未采用上面提及的转换电路,而是直接从参考电压输入端Vref引出了模拟输出电压,这是什么原因呢? 先来看看DAC0832内部是如何进行数模转换的,DAC0832内部数模转换是由8位T型电阻网络完成的【26】,其原理图如图13-7所示。,20,图13-7 DAC0832的8位T型电阻网络工作原理图,21,由图13-7可以看出,解码网络电阻只有两种,即R和2R,且构成T型,故又称为R-2R型电阻网络DAC。其中,S0S7为模拟开关,表示了8位二进制数DI0DI7,当某一位数DIi=1,即表示Si接1,这时相应电阻上通过电流Ii流向IOUT1;当DIi=0,即表示Si接0,这时相应电阻上通过电流Ii流向IOUT2。 由于用作分流的电阻网络中各电阻值为R或2R,而IOUT1是流向运算放大器的反相输入端,其“虚地”可以看作0V。因此,电阻网络从各节点A、B、C、H向右看的二端网络的等效电阻为R,这与开关Si接0还是接1无关,由任一个节点向右流出去的两个支路电流Ii和ILi总是相等。 设基准电压源电压为Vref,则总电流为I=Vref/R,则流过各开关支路(从左到右)的电流分别为I/2、I/4、I/128。经过计算(此处省略),对于在图13-7电路中输入的每一个二进制数,均能在其输出端Vout得到与之成正比的模拟电压。,22,图13-8 DAC0832的8位全1时T型电阻网络等效电路示意图,23,在分析完DAC0832的内部解码原理之后,接着讨论图13-1给出的DAC0832外部接法原理。按照开发板上的接法,讨论两个极端的情况,即给出数字量FFH和0,对于前一种情况,实际上型电阻网络的8位二进制数DI0DI7都为1,这时所有开关Si都接1,等效电路见图13-8,反馈电阻Rfb与外接电阻R9并联,一端接电源VCC,另一端接R10和其它8个2R电阻的一端,由电路分析【27】中的基尔霍夫电流定律可以算出H点电流和电压值,该点电压即为Vref输出电压值,此时为最大输出值。 当数字量为0时,所有开关Si都接0,等效电路见图13-9。此时除了外接电阻R9、R10和反馈电阻Rfb中有电流流过之外,型电阻网络内无电流流过,因此H点电压值为0。 数字量FFH0之间的电压输出呈线型变化,数字量中间值的T型电阻网络原理图分析请读者自行完成。,24,图13-9 DAC0832的8位全0时T型电阻网络等效电路示意图,25,13.6.3 DAC0832总线地址确定,在图13-1所示电路原理图中,三八译码器74HC138的Pin12引脚输出与DAC0832的nCS引脚相连,74HC138的Pin12引脚为nY3输出,低电平有效。因此,要求74HC138译码输入端的CBA编码为011,则STC89C52RC的P27P20的值为01111111B(7FH),P24P20悬空应设为1;74HC373的地址引出脚A7A0的选取与DAC0832的地址确定无关,取值为11111111B(FFH),所以DAC0832的地址最终确定为0x7fffH。 由第8章内容可知,对DAC0832进行总线控制前,必须使STC89C52RC的P16引脚设为低电平,该信号(CS138)使三八译码器74HC138被选中。,26,13.6.4 定时器0和外部中断1的关系,在3.1小节和10.6小节中,已经对外部中断1的概念和程序进行了详尽地介绍和分析,本项目中的外部中断1同样是用来检测由ZLG7290发出的按键中断信号,当矩阵键盘中的任一键被按下时,ZLG7290不但能够记录键值,而且还发出按键中断信号,请读者复习相关内容。 void time_t0() interrupt 1函数是定时器T0的中断服务子程序,主要完成4个波形选择和采样计数的任务,定时时间间隔(装入值)为: 装入值=65536要计算的脉冲数。,27,对于程序中的TH0=(65536div_value)/256,当div_value70时,16位定时器就是从(6553670)65466开始自加,加到65536就计满,如果允许定时器中断,就会产生定时器T0的中断,所以16位方式装入值的计算很简单。开发板的机器周期是12/晶振值,如果外接晶振是12MHZ,那么机器周期是1s,开发板的外接晶振实际上是11.0592MHZ,机器周期是1.1s左右,所以定时时间间隔大约是77us,由于这个原因,用单片机自己的定时器做数字钟设计,并不能准确计时,这里用11.0592MHZ的晶振主要是为了串行通信中便于产生所需波特率。,28,13.6.5 项目结果分析,在本项目中用到了外部中断1和定时器T0的中断,外部中断1服务子程序void INT1_SVC() interrupt 2中的2代表在MCS-51单片机中外部中断1的优先级为第2级;同样,对于定时器T0中断服务子程序中的1来说,就代表优先级为第1级。因此,定时器T0可以打断外部中断1的正常执行而进行嵌套运行,而外部中断1却不能打断定时器T0的运行。 这一点在将程序中的div_value值减小后将会显现。实验表明,当div_value50时,定时器T0中断间隔减小,加上定时器T0中断服务程序的运行时间,44键盘所产生的外部中断1很难找到时间使得CPU对其进行处理,几乎所有的系统资源都被定时器T0所占用,有兴趣的读者可以修改给出的C语言程序源代码,观察开发板会出现何种现象。,29,按图13-1给出的原理图,通过引入示波器来观察外接端子J3的1脚输出波形。给开发板上电后,程序默认是正弦波输出,图13-10(a)给出了由示波器实测的波形图,截图显示正弦波的频率在40.65Hz左右,最大幅值为1.82V,最小为140mV(包含测量误差),最大幅值对应数字量FFH,即对应图13-8给出的情况;最小幅值对应数字量0,对应图13-9给出的情况。 图13-10(b)和图13-11(a)所示分别三角波和锯齿波截图,频率和幅值情况与正弦波一样。,30,图13-10 简易数字信号发生器项目的正弦波和三角波波形图,31,图13-11(b)所示为方波的截图,可以看出频率比上述三种波形的频率要大一倍左右(80.99Hz)。这是因为程序中的方波数据表给出的是2个周期的数据,因此频率比一个周期的波形数据大一倍。 本项目的缺点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论