490 likes | 676 Views
第 9 章 数/模及模/数转换器接口. 9-1 D/A 转换器接口及应用. 9-2 A/D 转换器接口及应用. 扩展 I/O 电路的功能:. 1 、速度协调; 2 、输出数据锁存; 3 、输入数据三态; 4 、数据转换: 模拟量→数字量:由 A/D 转换完成; 数字量→模拟量:由 D/A 转换完成。. 单片机和被控实体间的接口示意图. 举例 1 :温度测控系统. 举例 2 :速度测控系统. A. 1. BISS0001. 16. 1 OUT. 1 IN-. V 0. 2. 15. RR 1. 3. 14. 1 IN+. RC 1.
E N D
第9章 数/模及模/数转换器接口 9-1 D/A转换器接口及应用 9-2 A/D转换器接口及应用
扩展I/O电路的功能: 1、速度协调; 2、输出数据锁存; 3、输入数据三态; 4、数据转换: 模拟量→数字量:由A/D转换完成; 数字量→模拟量:由D/A转换完成。
A 1 BISS0001 16 1OUT 1IN- V0 2 15 RR1 3 14 1IN+ RC1 4 13 2IN- 12 2OUT RC2 5 11 VDD RR2 6 10 IB Vss 7 9 Vc 8 VRF/RESET 红外线传感器集成芯片BISS0001特点 (1)用CMOS工艺,功耗低。 (2)具有独立的高输入阻抗运算放大器,可与多种传感器匹配。 (3)双向鉴幅器可有效抑制干扰信号。 (4)内设延时和封锁定时器,性能稳定,调节范围宽。 (5)内置参考电源。 (6)工作电压范围宽(3V~5V)。
9-1 D/A转换器接口及应用 9-1-1 D/A转换概述 一、D/A(Digit to Analog)转换器: 为把数字量转换成模拟量,在D/A转换芯片中要有解码网络: ①权电阻网络; ②倒T型电阻网络。
T型电阻网络型D/A转换器: D/A转换器的原理: 把输入数字量中每位都按其权值分别转换成模拟量,并通 过运算放大器求和相加。根据克希荷夫定律,如下关系成立: I0=20 I1=21 I2=22 I3=23
二、D/A输出形式: ①电压; ②电流 运算放大器电压。 n位数字量与模拟量的关系式: VO =—VREF×(数字码 / 2n)(VREF —— 参考电压) 注:因使用反相比例放大器来实现电流到电压的转换,所以输出模拟信号(VO)的极性与参考电压(VREF)极性相反。
三、注意区分D/A内部是否带有锁存器: 与P1、P2接口:不需加锁存器,直接接口。 无锁存器 与P0接口:因P0的特殊功能,需加锁存器。 D/A内 如:DAC800、AD7520、AD7521等。 有锁存器:最好与P0直接接口。 如:DAC0832、DAC1230等。
四、性能指标: 1、分辨率(Resolution)是指D/A转换器能分辨的最小输出模拟增量,取决于输入数字量的二进制位数。 2、建立时间(Establishing Time)是描述D/A转换速度的快慢。 3、转换精度(Conversion Accuracy)指满量程时DAC的实际模拟输出值和理论值的接近程度。 4、偏移量误差(Offset Error)偏移量误差是指输入数字量为零时,输出模拟量对零的偏移值。 5、线性度(Linearity)线性度是指DAC的实际转换特性曲线和理想直线之间的最大偏移差。
主要技术指标: 1、分辨率(Resolution): 对D/A转换器输入量变化敏感程度进行描述, 与输入数字量的位数有关。 • 若数字量的位数为n,则分辨率为2-n。 • 数字量位数越多,分辨率就越高。 • 应用时,应根据分辨率的需要选定转换器的位数。 注:BCD码输出的A/D转换器用位数表示分辨率。 2、建立时间(Establishing Time):(转换速度) 描述D/A转换速度的快慢。 • 输出形式为电流的转换器比电压的建立时间短。 • D/A转换速度远高于A/D转换。 3、转换精度(Conversion Accuracy): 指满量程时DAC的实际模拟输出值和理论值的接近程度。
Rfb 输入 寄存器 DAC 寄存器 8位 DAC IOUT1 VO - + DI0~7 IOUT2 LE1 ILE 与 LE2 AGND CS 与 WR1 0:锁存; WR2 与 LE1(LE2)= XFER 1:直通。 DI0~7:转换数据输入(8位); CS:片选信号(输入); ILE:数据锁存允许信号(输入); XFER:数据传送控制信号(输入); WR1:第一写信号(输入),与ILE共同控制输入寄存器是数据直通方式还是 数据锁存方式; WR2:第2写信号(输入),与XFER共同控制DAC寄存器是数据直通方式还是 数据锁存方式; 一、内部结构:DAC 0832:8位双缓冲器结构的D/A转换器。 9-1-2 D/A转换芯片DAC0832 DAC 0832内部结构框图(请见P242图9.3)
DAC的应用: lDAC用作单极性电压输出; lDAC用作双极性电压输出; lDAC用作控制放大器。
输入数字量B b7 b6 b5 b4 b3 b2 b1 b0 Vout(理想值) +VREF时 -VREF时 1 1 1 1 1 1 1 1 |VREF|-LSB -|VREF|+LSB ┆ ┆ ┆ 1 1 0 0 0 0 0 0 |VREF|/2 -|VREF|/2 ┆ ┆ ┆ 1 0 0 0 0 0 0 0 0 0 ┆ ┆ ┆ 0 1 1 1 1 1 1 1 -LSB LSB ┆ ┆ ┆ 0 0 1 1 1 1 1 1 -|VREF|/2-LSB |VREF|/2+LSB ┆ ┆ ┆ 0 0 0 0 0 0 0 0 -|VREF| |VREF| 双极性输出电压与输入数字量的关系
1、直通方式: 输入寄存器和DAC寄存器共用一个地址,同时选通输出;WR1和WR2同时进行,并且不与CPU相接。 特点:转换速度快。 二、DAC 0832与单片机的接口: 有3种工作方法:直通方式、单缓冲方式和双缓冲方式。 MOV P1,A
100ms 举例: 例:D/A转换程序,用DAC0832输出0~+5V锯齿波, 电路为直通方式。设VREF=-5V,若DAC0832地址 为00FEH,脉冲周期要求为100ms。 DACS:MOV DPTR,#00FEH;0832I/O地址 MOV A,#00H ;开始输出0V DACL:MOVX @DPTR,A ;D/A转换 INC A ;升压 ACALL DELAY;延时100ms/256:决定锯齿波的周期 AJMP DACL ;连续输出 DELAY:…;延时子程序
2、单缓冲方式: 输入寄存器和DAC寄存器共用一个地址,同时选通输出,输入数据在控制信号作用下,直接进入DAC寄存器中;WR1和WR2同时进行,并且与CPU的WR相连,CPU对0832执行一次写操作,将数据直接写入DAC寄存器中。适用:只有一路模拟信号输出或几路模拟信号非同步输出。
80C51 单缓冲方式下的DAC0832
100ms 举例: 例:D/A转换程序,用DAC0832输出0~+5V三角波, 电路为单缓冲方式。设VREF=-5V,若DAC0832地 址为00FEH,脉冲周期要求为(100ms)。 ORG 2000H STAR:MOV DPTR,#00FEH;DAC0832地址 MOV A,#00H ;开始输出0V UP: MOVX @DPTR,A ;D/A转换 INC A ;产生上升段电压 JNZ UP;上升到A中为FFH(A≠0跳) DOWN:DEC A ;产生下降段电压 MOVX@DPTR,A JNZ DOWN;下降到A中为00H SJMP UP;重复 注:若想改变波形的周期(频率),只需在SJMP UP前插入延时程序即可。
C51程序: #include<absacc.h> #include<reg51.h> #define DAC0832 XBYTE[0x00FE] #define uchar unsigned char #define unit unsigned int void stair(void) { uchar i; while(1) { for(i=0;i<=255;i=i++) /*形成锯齿波输出值,最大255*/ {DAC0832=i; /*D/A转换输出*/ } } }
3、双缓冲器方式:输入寄存器和DAC寄存器分配有各自的地址,可分别选通用同时输出多路模拟信号。适用:同时输出几路模拟信号的场合,可构成多个0832同步输出电路。3、双缓冲器方式:输入寄存器和DAC寄存器分配有各自的地址,可分别选通用同时输出多路模拟信号。适用:同时输出几路模拟信号的场合,可构成多个0832同步输出电路。
举例: 例:用DAC0832实现驱动绘图仪,电路为双缓冲方式。 1#和2#DAC0832地址分别为00FEH和00FDH。 则绘图仪的驱动程序为: ORG 2000H MOV DPTR,#00FEH ;选中1#0832(的输入寄存器):A0=0 MOV A,#Datax MOVX @DPTR,A ;Datax写入1#0832输入寄存器 MOV DPTR,#00FDH ;选中2#0832(的输入寄存器):A1=0 MOV A,#Datay MOVX@DPTR,A ;Datay写入2#0832输入寄存器 MOV DPTR,#00FBH ;选中1#和2#0832的DAC寄存器: A2=0 MOVX@DPTR,A ;1#和2#输入寄存器的内容同时 传送到DAC寄存器中
C51程序: #include<absacc.h> #include<reg51.h> #define INPUTR1 XBYTE[0x00FE] #define INPUTR2 XBYTE[0x00FD] #define DACR XBYTE[0x00FB] #define uchar unsigned char void dac2b(data1,data2) uchar data1,data2; { INPUTR1=data1; /*数据送到一片DAC0832*/ INPUTR2=data2; /*数据送到另一片DAC0832*/ DACR=0; /*启动两路D/A同时转换*/ }
80C51 80C51与DAC1208的接口
PC/XT的D/A接口使用DAC0832。其有关信号接线如图所示,其输出电压Vo和输入数字量DI7-DI0之间呈线性且如表所示。现要求Vo从零开始按图示波形周期变化(周期可自定)。试用汇编语言编写其控制部分程序。
9-2 A/D转换器接口及应用 A/D接口设计要点: 1.选择合适的系统采样速度; 2.减小A/D转换的孔径误差; 3.合理选用A/D转换器。
A/D转换是把模拟量信号转化成与其大小成比例的数字信号。A/D转换是把模拟量信号转化成与其大小成比例的数字信号。 A/D转换电路主要分成: 1、双积分式(速度慢,精度高:用于速度要求不高的场合); 2、逐次逼近式(速度较快,精度较高:常用)。 常用芯片: MC14433(3 ½位) 双积分式 ICL7135(4 ½位) ICL7109(12位) ADC0808、ADC0809(8位) 逐次逼近式 ADC1210(12位) AD574(12位) 一、转换原理:
1、双积分型A/D转换器工作原理: 双积分型A/D转换是一种间接A/D 转换技术。首先将模拟电压转换成积分时 间,然后用数字脉冲计时方法转换成计数 脉冲数,最后将此代表模拟输入电压大小的脉冲数转换成 二进制或BCD码输出。因此,双积分型A/D转换器转换时 间较长,一般要大于40~50ms。
80C51 MC14433 MC14433与80C51直接连接的接口
80C51 ICL7109与80C51的接口电路图
2、逐次逼近A/D转换原理: N位寄存器用来存放N位二进制数码。 当VX≥VN,则保留DN-1=1,否则清0。 其余类推。
多路 转换 开关 IN0 IN1 IN7 A/D转换 A B C ADC 0809/0808为8路输入通道、8位逐次逼近式A/D转换器,可分时转换8路模拟信号。 二、ADC0809与单片机的接口: 1、结构: 一个8位逐次逼近式A/D转换器、8路模拟转换开关、3-8地址锁存译码器和三态输出数据锁存器(详见P249)。 2、引脚: (1)8路模拟量分时输入信号端: IN0~IN7; (2)8位数字量输出信号端: D0~D7; (3)通道选择地址信号输入端: ADDA、ADDB、ADDC; (4)基准参考电压为VR(+)和VR(-): 决定输入模拟量的范围。 典型值分别为+5V和0V。 (5)转换结束信号EOC: 0:正在进行转换; 1:一次转换完成。 (6)时钟信号输入端:CLK(其内部无时钟电路)。
转换数据的传送: ①定时传送方式; (不需接EOC脚) ②查询方式; (测试EOC脚的状态) ③中断方式。 (EOC脚接INT脚) 注: (1)不能用无条件方式; (2)2个ALE不能相接。 8 AD0~7 ALE INT WR P2.0 RD D0~7 ADDABC CLK EOC START ALE OE 3 1 ≥1 MCS-51 ADC0809 ≥1 3、ADC 0809与单片机连接: 涉及2个问题: (1)8路模拟信号通道选择; (2)A/D转换完成后转换数据的传送。 IN0~7 ADC0809的口地址:FEFFH; 8路模拟通道的地址:FEF8H~FEFFH。
A/D转换程序:(延时等待方法) MOV DPTR,#0FEFFH ;ADC0809地址 MOV A,#00H ;选中IN0 MOVX @DPTR,A ;启动A/D转换 LCALL DELAY ;等待转换结束 MOVX A,@DPTR ;读转换结果 RET 不用接EOC脚,采用定时传送方式。
例:P252应用举例 设有一个8路模拟量输入的巡回检测系统,采样数据依次存放在外部RAM 0A0H~0A7H单元中,ADC0809的8个通道地址为0FEF8H~0FEFFH。 初始化程序:(中断方式) MOV R0,#0A0H ;数据存储区首地址 MOV R2,#08H ;8路计数器 SETB IT1 ;边沿触发方式 SETB EA ;中断允许 SETB EX1 ;允许外部中断1中断 MOV DPTR,#0FEF8H ;指向ADC0809首地址 LOOP:MOVX @DPTR,A ;启动A/D转换 HERE:SJMP HERE ;等待中断 DJNZ R2,LOOP ;巡回,未完继续 CLR EA ;结束,关中断 SJMP $ ;结束停止
中断服务程序: MOVX A,@DPTR ;读数 MOVX @R0,A ;存数 INC DPTR ;指向下一模拟通道 INC R0;指向数据存储区下一单元 RETI
C51程序: #include<absacc.h> #include<reg51.h> #define uchar unsigned char #define IN0 XBYTE[0xFEF8] /*设置ADC0809的通道0地址*/ sbit ad_busy=P3^3; /*即EOC状态*/ void ad0809(uchar idata * x) /*采样结果放指针中的A/D采集函数*/ { uchar i; uchar xdata * ad_adr; ad_adr=&IN0; for(i=0;i<8;i++) /*处理8通道*/ { *ad_adr=0; /*启动转换*/ i=i; /*延时等待EOC变低*/ i=i; while(ad_busy==0); /*查询等待转换结束*/ x[i]=*ad_adr; /*存转换结果*/ ad_adr++; /*下一通道*/ } } void main(void) { static uchar idata ad[10]; ad0809(ad); /*采样ADC0809通道的值*/ }
80C51 三、AD574A与MCS-51单片机接口
小 结 1、D/A转换原理、内部结构、信号输出形式 和主要技术指标。 2、DAC0832内部结构、管脚、3种工作方 法及其对应接口的特点、电路和应用程序。 3、A/D转换原理和常用ADC芯片。 4、ADC0809的内部结构及管脚、转换数据 传送方式及其对应接口图和程序。
应用举例: 1、用8位DAC芯片组成双极性电压输出电路,其参考电压为-5V~+5V,求对应以下偏移码的输出电压: ①0100 0000 ②1111 1110 解:VOUT1=-VREF. VOUT2=-(VREF+2VOUT1) ① VOUT1=-VREF.=-1.25V~+1.25V VOUT2=-(VREF+2VOUT1) =-2.5V~+2.5V ② VOUT1=-VREF.=-4.96~+4.96V VOUT2=-(VREF+2VOUT1) =-4.92V~+4.92V
2、某12位A/D转换器的输入电压为0~+5V,求出当输入模拟量为下列值时输出的数字量:2、某12位A/D转换器的输入电压为0~+5V,求出当输入模拟量为下列值时输出的数字量: ①1.25V ②3.75V 解: ① ②
3、某梯度炉温变化范围为0~1600℃,经温度变送器输出电压为1~5V,再经ADC0809转换,ADC0809的输入范围为0~5V,试计算当采样数值为9BH时,所对应的梯度炉温是多少?3、某梯度炉温变化范围为0~1600℃,经温度变送器输出电压为1~5V,再经ADC0809转换,ADC0809的输入范围为0~5V,试计算当采样数值为9BH时,所对应的梯度炉温是多少? 解:9BH=155D