《单片机C语言第7章并行扩展的C51编程3课件.ppt》由会员分享,可在线阅读,更多相关《单片机C语言第7章并行扩展的C51编程3课件.ppt(27页珍藏版)》请在三一办公上搜索。
1、D/A转换器(Digital to Analog Converter)能把数字量转换为模拟量的电子器件(简称为DAC)。A/D转换器(Analog to Digital Converter)能把模拟量转换成相应数字量(简称为ADC)。,单片机测控系统中的ADC和DAC,7.3 A/D与D/A的C51编程,7.3.1 D/A转换器基础,D/A转换器(Digital to Analog Conve,电流输出型D/A转换原理,转换电流,电流输出型D/A转换原理总电流分支电流转换电流,转换电压,转换电压与VREF和B成正比(与R无关),转换电压Vo与VREF和(D0D7)成正比。,DAC0832外接放
2、大器反馈电阻转换电压转换电压与VREF和,DAC的性能指标:1、分辨率通常将DAC能够转换的二进制的位数n称为分辨率; 一般n = 8位、10位、12位、16位等;有时也将最小输出电压叫做分辨率 n 一定时,最小输出电压Vmin与VREF成正比; 例如 n=8时,若VREF=10V,则Vmin=10V/25639.1mV ; 若VREF为5V,则Vmin19.5.1mV,2、转换时间将一个数字量转换为稳定模拟信号所需的时间称为转换时间;一般DAC的转换时间在几十纳秒(ns)几微秒(s)。,DAC的性能指标:2、转换时间,DA转换芯片:DAC0832,20只引脚,主要特性参数8位DA转换器分辨率
3、 19.5mV(VREF=5V) 转换时间 1s电流输出型数字量并行输入方式参考电压 -10V10V工作电压 5V15V功耗 20m,DA转换芯片:DAC083220只引脚主要特性参数,DAC0832的结构,内部组成:1个8位输入锁存器1个8位DAC寄存器1个8位D/A转换器5个控制端(2级控制),工作过程:8位并行数据到达输入锁存器输入端;1级控制允许后,数据到达DAC寄存器输入端;2级控制允许后,数据达到D/A转换器;s后,转换电流由Iout1引脚输出。,DAC0832的结构内部组成:工作过程:第1级第2级,【例7-4】 DAC0832单缓冲方式举例。,通过电压表测量DAC0832转换输出
4、的电压值。,【例7-4】 DAC0832单缓冲方式举例。通过电压表测量D,#include#include#define uchar unsigned char#define DAC0832 XBYTE0 x7fff /DAC032的端口地址为7FFFHvoid main( ) P1=0 xff; /P1口为输入口while(1) DAC0832=P1; /P1口的内容作为D/A转换器的输入,#include,【例7-5】双缓冲器工作方式示例。,两路模拟量同步输出电路原理图,【例7-5】双缓冲器工作方式示例。两路模拟量同步输出电路原理,#include#define INPUTR1 XBYTE
5、0 xdfff#define INPUTR2 XBYTE0 xbfff#define DACR XBYTE0 x7fff#define uchar unsigned charvoid delay()unsigned int i;for(i=0;i2500;i+);void main( )while(1)INPUTR1=0 x80; /第一个值送入1#DAC0832 INPUTR2=0 xff; /第二个值送入2#DAC0832 DACR=0; /两值同时输出 delay( ); INPUTR1=0 x00; INPUTR2=0 x00; DACR=0; delay( );,#include,【
6、例7-6】生成阶梯波。 #include#include#define uchar unsigned char#define DAC0832 XBYTE0 x7fffvoid main( )uchar i=0; while(1) for(i=0;i256;i+) DAC0832=i; /从0开始到0FFH ,【例7-6】生成阶梯波。,【例7-7】产生三角波。,#include#include#define uchar unsigned char#define DAC0832 XBYTE0 x7fff /DAC0832端口地址7FFFHvoid main( ) uchar i=0; while(
7、1) for(i=0; i0; i-) DAC0832=i;/下降阶段 ,【例7-7】产生三角波。#include,【例7-8】生成矩形波。,#include#include#define uchar unsigned char#define DAC0832 XBYTE0 x7fffvoid delay1( )uchar j; for(j=0;j250;j+);void delay2( )uchar j; for(j=0;j250;j+);void main( )uchar i=0; while(1) DAC0832=0 xff; delay1( ); DAC0832=0; delay2( )
8、; ,【例7-8】生成矩形波。#include,【例7-9】生成正弦波。,#include#include#define uchar unsigned char#define DAC0832 XBYTE0 x7fffcode uchar sintab =0 x7f,0 x89,0 x94,0 x9f,0 xaa, 0 xb4,0 xbe,0 xc8,0 xd1,0 xd9, 0 xe0,0 xe7,0 xed,0 xf2,0 xf7,0 xfa,0 xfc,0 xfe,0 xff;void delay( ) uchar j; for(j=0;j0;i-) DAC0832=sintabi;/第2
9、个1/4周期 ,【例7-9】生成正弦波。#include, for(i=0;i0;i-) DAC0832=sintabi;/第4个1/4周期 ,逐次逼近型双积分型-型并行比较型/串行比较型压频变换型,A/D转换器的分类:,按转化原理,按转化速度,超高速(转换速度1ns)高速(转换速度20s)中速(转换速度1ms)低速(转换速度1s),8位12位14位16位,按转化位数,ADC0809:8位中速逐次逼近型ADC,7.3.2 A/D转换器基础,逐次逼近型双积分型-型并行比较型/串行比较型压频,逐次逼近式ADC的工作原理:,逐次逼近寄存器SAR,天平秤重过程若有四个砝码分别为8、4、2、1克。设待秤
10、重物为13克,称量步骤:顺序 砝码重 比较判断 暂时结果 1 8g 8g13g 撤消2g 4 8+4+1g 13g=13g 保留13g,N位寄存器最高位=1,其余位=0 VN = 1/2Vref;比较Vin与VN :若VinVN ,最高位保持1,次高位置1 Vn=3/4Vref;反之最高位=0,次高位=1 Vn=1/4Vref;以此类推直至Vin=VN ,或误差小于预期值;N位寄存器结果锁存缓存器EOC。,逐次逼近式ADC的工作原理:逐次逼近寄存器SAR天平秤重过程,ADC的性能指标:1、分辨率用系统可分辨的最小模拟电压表示AD转换分辨率 一般以1个bit对应的模拟电压大小作为评判基准通常也以
11、转换后输出的二进制位数n表示分辨率 一般n = 8位、10位、12位、16位等;2、转换时间完成一次AD转换所需要的时间称为转换时间 逐次逼近型ADC的典型值为1200s,ADC的性能指标:,主要特性参数分辨率 位 转换时间 100s 逐次比较型模数转换工作量程 05V功耗 15m工作电压 +5V具有锁存控制的8路模拟开关输出与TTL电平兼容,A/D转换芯片:ADC0809,28只引脚,主要特性参数A/D转换芯片:ADC080928只引脚,8路模拟开关外接IN0IN7 共8路模拟信号,具有8选1功能;地址锁存译码采用三根地址线A、B、C编码模入通道;8路AD转换器采用SAR原理;三态输出锁存器
12、可实现转换结果的锁存/隔离;START启动AD转换,CLK转换时钟,VR+/VR-参考电压,EOC结束标志, OE输出使能,ALE地址锁存使能,ADC0809的结构组成:,8路模拟开关外接IN0IN7 共8路模拟信号,具有8选,工作时序,ALE锁存ADDA、ADDB、ADDC,START正脉冲启动AD转换,EOC由高变低(AD启动后) 保持低电平(转换期间) 由低变高(转换结束),OE正脉冲,打开三态门输出,工作时序ALE锁存ADDA、ADDB、ADDCSTART正脉,【例7-10】采用ADC0809芯片实现1路模拟输入A/D转换。,【例7-10】采用ADC0809芯片实现1路模拟输入A/D转
13、,#include#include#define uchar unsigned char#define ADC08090 XBYTE0 x78ffsbit P33=P33;void delay( ) uchar j; for(j=0;j250;j+); /*void main( ) /无条件方式 while(1) ADC08090=0; / delay( ); P1=ADC08090; */,#include,/*void main( ) /查询方式 while(1) ADC08090=0; l1: P33=1; if(P33=0) P1=ADC08090; else goto l1; ,/*
14、void main( ) /查询方式,void main( ) /中断方式 EA=1; EX1=1; IT1=1; ADC08090=0; while(1); void int0( ) interrupt 2 P1=ADC08090; /读取数据 ADC08090=0; /启动A/D,void main( ) /中断方式,【例7-11】8路模拟输入A/D转换示例。,#define uchar unsigned charxdata uchar *ad;uchar i=0;uchar data adtab8;addv( ) interrupt 2adtabi=*ad;/读入转换数据 ad=ad+0 x100;/指向下一通道 i+; *ad=0;/启动转换,【例7-11】8路模拟输入A/D转换示例。#define,void main( )EA=1;EX1=1;IT1=1; ad=0 x78ff;/置地址指针 *ad=0;/启动转换 while(i8)/8路未转换完,继续等待 EA=0;,void main( ),