实验5 模/数(ADC0809)和数/模(DAC0832)转换实验
一、实验目的
1:了解模/数转换的基本原理,掌握ADC0809的使用方法。
2:了解数/模转换的基本原理,掌握DAC0832的使用方法。
二、实验内容
(1)模/数转换器0809查询法实验(实验指导书148页的实验18)
ADC0809 是美国模拟器件公司生产的 8 位逐次逼近型 AD 转换芯片,是目前性价比较高的ADC 芯片之一。适合于对采集精度要求不高、速度不是很快的场合。ADC0809 是一种带有 8位转换器、8 位多路转换开关以及与微处理机兼容的控制逻辑的 CMOS 组件。8 位 A/D 转换器的转换方法为逐次逼近法。在 A/D 转换器的内部含有一个高阻抗斩波稳定比较器,一个带有模拟开关树组的 256R 分压器,以及一个逐次逼近的寄存器。八路的模拟开关由地址锁存器和译码器控制,可以在 8 个通道中任意访问一个单边的模拟信号,其原理框图如图所示。
ADCO809 无需调零和进行满量程调整,又由于多路开关的地址输入能够进行锁存和译码,而且它的三态 TTL 输出也可以锁存,因此易于与微处理机进行接口。从图中可以看出,ADCO809由两大部分组成。第一部分为八通道多路模拟开关,它用来控制 C、B、A 端子和地址锁存允许端子,可使其中一个通道被选中。第二部分为一个逐次逼近型 A/D 转换器,它由比较器、控制逻辑、输出缓冲锁存器、逐次逼近寄存器以及开关树组和 256R 电阻分压器组成。后两种电路(即开关树组和 256R 电阻分压器)组成 D/A 转换器。控制逻辑用来控制逐次逼近寄存器从高位到低位逐次取“1”,然后将此数字量送到开关树组(8 位开关),用来控制开关 S7~S0 与参考电平相连接。参考电平经 256R 电阻分压器后,输出一个模拟电压 Uo,Uo、Ui在比较器中进行比较。当Uo>Ui 时,本位D=0;当Uo≤Ui 时,本位D=1。因此,从D7~D0 比较 8 次即可逐次逼近寄存器中的数字量,即与模拟量 Ui 所对应的数字量相等。此数字量送入输出锁存器,并同时发转换结束脉冲。
【1】ADC0808/0809 的外引脚功能
ADC0808/0809 的管脚排列如下图所示,其主要管脚的功能如下:
INO~IN7:8 个模拟量输入端。
START:启动 A/D 转换器,当 START 为高电平时,开始 A/D 转换。
EOC:转换结束信号。当A/D 转换完毕之后,发出一个正脉冲,表示 A/D 转换结束。此信号可作为 A/D 转换是否结束的检测信号或中断申请信号。
OE:输出允许信号。如果此信号被选中,则允许从 A/D 转换器的锁存器中读取数字量。
CLOCK:时钟信号。
ALE:地址锁存允许,高电平有效。当ALE 为高电平时,允许 C、B、A 所示的通道被选中,并将该通道的模拟量接入 A/D 转换器。
ADDA、ADDB、ADDC:通道号地址选择端,C 为最高位,A 为最低位。当 C、B、A 为全零(000)时,选中 INO 通道接入;为 001 时,选中 IN1 通道接入;为 111 时,选中 IN7 通道接入。
D7~D0:数字量输出端。
UREF(+) 、UREF (-) :参考电压输入端,分别接+、-极性的参考电压,用来提供 D/A 转换器权电阻的标准电平。在模拟量为单极性输入时,UREF (+) =5V,UREF(-)=0V;当模拟量为双极性输入时,UREF(+) =+5V,UREF(-) =-5V。
主要性能如下:
- 分辨率:8位。
- 线性误差:士1 LSB。
- 电源电压:5V。
- 参考电源REF (+) ≤5V,参考电源REF (-) ≥0V。
- 模拟输入范围:0~5V。
- 8路模拟模拟信号输入。
- 转换时间:100μs。
- 功耗15mW (5V、3mA)。
[1]参考电压选择范围:0 ≤ UREF(-) ≤ UREF(+) ≤ 5V
[2]ADC转换公式:
[3]ADC0809的工作过程:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A /D转换结束,结果数据已存入锁存器,这个信号可 用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
[4]转换数据的传送:A/D 转换后得到的数据应及时传送给 CPU 进行处理。数据传送的关键问题是如何确认 A/D 转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。
1——定时传送方式:对于一种 A/D 转换其来说,转换时间作为一项技术指标是已知的和固定的。例如ADCO809 转换时间为 100μs,可据此设计一人延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
2——查询方式:A/D 转换芯片由表明转换完成的状态信号,例如 ADCO809 的 EOC 端。因此可以用查询方式,测试 EOC 的状态,即可却只转换是否完成,并接着进行数捷传送。
3——中断方式:把表明转换完成的状态信号 (EOC) 作为中断请求信号,以中断方式进行数据传送。不管使用上述那种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以【RD非】信号有效时,OE 信号即有效,把转换数据送数据总线,供 CPU 接受。
【2】实验电路原理图如图。通过实验台左下角电位器 RW1 输出 0~5V 直流电压送入ADC0809 通道 0(INO),利用 debug 的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。启动 INO 开始转换: 0 0298 0,读取转换结果:I 0298
启动IN0开始转换:Out 0298 0
读取转换结果:In 0298
【3】编程采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。
【4】接线表
待接线接口1 | 待接线接口2 |
0809的CS | I/O地址译码的Y3 |
0809的IN0 | 电位器的0~5V |
【5】程序的流程图
(2)数/模转换器0832实验(实验指导书157页的实验20)
DAC0832是采用CMOS工艺制成的R-2R倒T型电阻网络8位D/A转换器,输出为差分电流信号20脚DIP封装,内部带有两级8位锁存。该器件不仅可用于一般数字系统和模拟系统之间的接口电路,而且可以直接与8位微型计算机接口,是目前使用较为广泛的一种集成DAC器件。所以,如果需要用电压输出地场合时必须使用一个运算放大器。主要的技术指标如下:
- 分辨率:8位。
- 电流建立时间:1μs。
- 线性误差:0.2%FSR(Full Scale Range),即满量程的0.2%。
- 非线性误差:0.4%FSR。
- 输入方式:双缓冲、单缓冲或无缓冲。
- 功耗:20mW。
- 电源电压:+5V~+15V。
- 参考电源VREF:+10V~-10V。
【1】0832内部结构
DAC0832 工作方式:(1).直通方式:两个锁存器均处于直通状态,输入的数据直接送至 D/A 转换器进行转换并输出。(2).单缓冲方式:两个锁存器中一个处于直通状态,而只控制另一个锁存器的锁存。(3).双缓冲方式:两级锁存器都受控。该缓冲方式常用于要求多个模拟量同时输出的场合,以提高转换的速度。
【2】实验电路原理如图,DAC0832 采用单缓冲方式,具有单双极性输入端(图中的 Ua、Ub),利用 debug 输出命令(Out 290 数据)输出数据给 DAC0832,用万用表测量单极性输出端 Ua 及双极性输出端 Ub 的电压,验证数字与电压之间的线性关系,也可用示波器观察输出波形。
(1)、DACO832 单极性模拟输出,输入数据与输出电压的关系为:
如图所示,由运算放大器进行电流→电压转换,使用内部反馈电阻。输出电压值 Ua 和输入数字量D的关系:
(2)、DAC0832 双极性模拟输出,输入数据与输出电压的关系为:
如图所示,D/A 的输出经过运算放大器 A1和A2 放大和偏移后,在运放A2 的输出端 Ub 可得到双极性从-5V 到+5V 的输出电压,VREF 为 A2 提供偏移电流,且 VREF 的极性选择应使偏移电流的方向与A1输出的电流方向相反;在选择电阻时应以 R2=R3=2R1,以使偏移电流符合为 A1 输出电流的 1/2。从而使 A2 的输出特性在 A1 的输出特性基础上,上移 1/2 的动态范围。由电路各参数计算可得出 Ub = -[(R3/R1)Ua+(R3/R2)VREF,输出的电压表达式:Ub = -2Ua - VREF 且Ua 为(0~-5V),选取 VREF 为+5V,则Ub=0~10V-5V=-5~+5V
(3)、产生锯齿波只须将输出到 DACO832 的数据由 0 循环递增。产生正弦波可根据正弦函数建一个下弦数字量表,取值范围为一个周期,表中数据个数在 16 个以上。
【3】接线表
待接线接口1 | 待接线接口2 |
0832的CS | I/O地址译码的Y2 |
0832的Ua和Ub | 示波器 |
【4】程序的流程图
三、源程序(含注释)
1:模数转换
io0809a equ 298h code segment assume cs:code start: mov dx,io0809a ;启动A/D转换器 out dx,al ;写入数据 mov cx,0ffh ;延时 delay: loop delay in al,dx ;从A/D转换器输入数据 mov bl,al ;bl暂存al shr al,4 ;al高4位移动到低4位 call disp ;调显示子程序显示其高四位 mov al,bl ;return bl to al and al,0fh ;clear high-4 bit call disp ;调显示子程序显示其低四位 mov ah,02 ;func-2,output a single char mov dl,20h ;加回车符 int 21h mov dl,20h ;+ enter int 21h push dx mov ah,06h ;func-6,判断是否有键按下 mov dl,0ffh ;keyboard input int 21h pop dx je start ;若没有key-down,转START mov ah,4ch ;退出 int 21h disp proc near ;显示子程序 mov dl,al cmp dl,9 ;比较DL是否>9 jle ddd ;若不大于则为'0'-'9',加30h为其ASCII码 add dl,7 ;否则为'A'-'F',再加7 ddd: add dl,30h ;显示 mov ah,02 int 21h ret disp endp code ends end start |
2:数模转换——锯齿波实验
io0832a equ 290h ;锯齿波 code segment assume cs:code start: mov dx,io0832a mov cl,00h ;initialize cl=0 LLL: ;需补充 mov al,cl ;output al out dx,al inc cl ;cl++ push dx mov ah,06h ;判断是否有键按下 mov dl, 0ffh ;keyboard input int 21h pop dx jz LLL ;if no key-down, jump to LLL mov ah, 4ch ;return dos int 21h code ends end start |
3:数模转换——三角波实验
io0832a equ 290h ;三角波 code segment assume cs:code start: mov dx,io0832a mov cl,00h ;initialize cl=0 up: mov al,cl ;output al out dx,al inc cl ;cl++ cmp cl,0ffh ;judge cl reach peak jz down ;if peak, jump to down push dx mov ah,06h ;判断是否有键按下 mov dl, 0ffh ;keyboard input int 21h pop dx jz up ;if no key-down, jump to up mov ah, 4ch ;return dos int 21h down: mov al,cl ;output al out dx,al dec cl ;cl-- cmp cl,00h ;judge cl reach bottom jz up ;if bottom, jump to up push dx mov ah,06h ;判断是否有键按下 mov dl, 0ffh ;keyboard input int 21h pop dx jz down ;if no key-down, jump to down mov ah, 4ch ;return dos int 21h code ends end start |
四、遇到的问题和解决过程
问题1:一开始完成模数转换时,未找到电位器的0~5V,以为是额外的仪器。
解决1:查询实验指导书的系统硬件图(第8页)后,发现在实验箱的左下角位置,遂完成相应电路的接线。
问题2:在观察三角波时,水平轴的范围太小,无法很好的显示三角波的图像。
解决2:在仪器上按下第二排第二个按钮【time】,然后通过按下第一排第一个按钮【F1】来缩小水平轴的刻度。
五、实验结果
【1】模数转换
1、用万用表测量几组输入的电压,并记录其在屏幕显示的数字量
电压值/V | 数字量(16进制) |
4.72 | FF |
3.56 | C0 |
2.29 | 7C |
0.73 | 28 |
0.00 | 00 |
2、计算理论值,对比实际值,分析误差可能产生的原因
理论值计算公式:
电压理论值 = 数字量(10进制) / 满量程数字量(10进制) * 满量程电压值
理论值计算表格:
电压实际值/V | 电压理论值/V | 误差大小/V | 数字量(16进制) | 数字量(10进制) |
4.72 | 5.00 | -0.28 | FF | 255 |
3.56 | 3.76 | -0.2 | C0 | 192 |
2.29 | 2.43 | -0.14 | 7C | 124 |
0.73 | 0.78 | -0.05 | 28 | 40 |
0.00 | 0.00 | 0 | 00 | 0 |
误差产生的原因分析:
- 仪器误差:测量仪器本身可能存在一定的误差。即万用表、电压源等设备存在精度和校准方面的问题。
- 电路元件误差:电阻的阻值可能有一定的偏差,电容的容值可能不准确等。
- 电源的稳定性:电源电压的波动或噪声,可能导致实际测量值偏离理论值。干扰信号会对逐次逼近式的A/D转换器造成较大的误差。
3、屏幕显示数字量示例
4、操作过程示例
通过调节电位器的旋钮,可以控制滑动电阻的阻值,进而获得不同的电压值,转化后得到不同的数字量。完整操作过程如附件video.mp4所示。
【2】数模转换
1、锯齿波实验,使用示波表查看波形
Ua电压的波形:
Ub电压的波形:
2、三角波实验,使用示波表查看波形
Ua电压的波形(time设置前):
Ua电压的波形(time设置后):
Ub电压的波形(time设置后):
六、体会与总结
1:ADC0809采用【逐次逼近式】的方法将模拟量转换为数字量。逐次逼近式的A/D转换器的特点有:(1)转换速度较快,适用于高精度、高频信号的A/D转换;(2)转换时间固定,不随输入信号的大小而变化;(3)抗干扰能力较双积分型弱。采样时,干扰信号会造成较大的误差,需要采取适当的滤波措施。
2:模数转换主要经过以下四个过程:采样——保持——量化——编码。
3:数模转换输出锯齿波图像时,首先将计数寄存器cx中的初值设为0,然后每经过一次cx++操作对应依次模拟量的输出。最后cx加到ff时,会自动溢出后变为0。
4:数模转换输出三角波图像时,首先将计数寄存器cx中的初值设为0,然后执行波形上升程序,即每经过一次cx++操作对应依次模拟量的输出。当cx加到ff时,跳转至波形下降程序,即每经过一次cx--操作对应依次模拟量的输出。当cx减到00时,又跳转至波形上升程序。如此往复即可生成三角波,同样也可以先执行下降程序再执行上升程序。
5:D/A 转换器的主要技术指标有:分辨率、精度、建立时间、线性误差、温度系数。
6:DAC0832可采用双缓冲、单缓冲或直接输入三种工作方式。