【接口技术】实验5:模/数(ADC0809)和数/模(DAC0832)转换

news2024/11/19 13:19:08

实验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。

主要性能如下:

  1. 分辨率:8位。
  2. 线性误差:士1 LSB。
  3. 电源电压:5V。
  4. 参考电源REF (+) ≤5V,参考电源REF (-) ≥0V。
  5. 模拟输入范围:0~5V。
  6. 8路模拟模拟信号输入。
  7. 转换时间:100μs。
  8. 功耗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器件。所以,如果需要用电压输出地场合时必须使用一个运算放大器。主要的技术指标如下:

  1. 分辨率:8位。
  2. 电流建立时间:1μs。
  3. 线性误差:0.2%FSR(Full Scale Range),即满量程的0.2%。
  4. 非线性误差:0.4%FSR。
  5. 输入方式:双缓冲、单缓冲或无缓冲。
  6. 功耗:20mW。
  7. 电源电压:+5V~+15V。
  8. 参考电源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            ;al4位移动到低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

误差产生的原因分析:

  1. 仪器误差:测量仪器本身可能存在一定的误差。即万用表、电压源等设备存在精度和校准方面的问题。
  2. 电路元件误差:电阻的阻值可能有一定的偏差,电容的容值可能不准确等。
  3. 电源的稳定性:电源电压的波动或噪声,可能导致实际测量值偏离理论值。干扰信号会对逐次逼近式的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可采用双缓冲、单缓冲或直接输入三种工作方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网件R8500 trojan

一 将路由器刷机成改版梅林 路由器首页的Firmware:380.70_0-X7.9.1是梅林改版 380.xx 梅林原版固件 380.xx_x 梅林改版固件 必须是改版梅林才支持trojan,所以要确保是梅林改版固件 点击上传文件,选择下载好的改版固件 固件及软件链接 链接: https:…

C语言--实现一个函数把一个整数转为它对应的十六进制的字符串

一.题目描述 实现一个函数把一个整数转为它对应的十六进制的字符串。 比如:输入数字1234 输出:4D2 二.思路分析 用一个sprintf函数可以解决问题,输出相对应的字符串 要注意的问题就是:函数结束后要继续使用的内存(比如…

Leetcode—2048.下一个更大的数值平衡数【中等】

2023每日刷题&#xff08;五十四&#xff09; Leetcode—2048.下一个更大的数值平衡数 实现代码 class Solution { public:int nextBeautifulNumber(int n) {for(int x n 1; ; x) {vector<int> cnt(10, 0);for(int y x; y > 0; y / 10) {cnt[y%10];}bool ok tru…

【win32_005】调试信息打印到控制台----2种简单方法

方法1&#xff1a;使用win32 api函数 PCTSTR str1 TEXT("123456789");AllocConsole();HANDLE HConsole GetStdHandle(STD_OUTPUT_HANDLE);WriteConsole(HConsole, str1, 9, NULL, NULL);https://learn.microsoft.com/zh-cn/windows/console/writeconsole 方…

深度探索Linux操作系统 —— 构建initramfs

系列文章目录 深度探索Linux操作系统 —— 编译过程分析 深度探索Linux操作系统 —— 构建工具链 深度探索Linux操作系统 —— 构建内核 深度探索Linux操作系统 —— 构建initramfs 文章目录 系列文章目录前言一、为什么需要 initramfs二、initramfs原理探讨三、构建基本的init…

智能优化算法应用:基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.粒子群算法4.实验参数设定5.算法结果6.参考文…

反汇编语言区分函数和运算符

在汇编语言中&#xff0c;函数和运算符可以通过一些特定的指令和约定来区分。 函数&#xff1a; 函数通常由一系列指令组成&#xff0c;用于执行特定的任务或操作。函数通常具有入口点和出口点&#xff0c;分别表示函数的开始和结束位置。函数通常包含参数传递、局部变量的分配…

黑豹程序员-EasyExcel实现导出

需求 将业务数据导出到excel中&#xff0c;老牌的可以选择POI&#xff0c;也有个新的选择EasyExcel。 有个小坑&#xff0c;客户要求样式比较美观&#xff0c;数字列要求千位符&#xff0c;保留2位小数。 可以用代码实现但非常繁琐&#xff0c;用模板就特别方便&#xff0c;模…

通过仿真理解完整的阵列信号噪声模型

概要 噪声对无线电设备的信号接收会造成影响,是通信、雷达、导航、遥感等工程应用领域中的关键考虑因素。通常认为阵列合成能够提升信噪比,但忽略了这一论断的前提,即不同通道引入的噪声互不相关。但实际应用中,接收的噪声不仅仅包含信道引入的不相关噪声,还包含从外界环…

智能优化算法应用:基于鲸鱼算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鲸鱼算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鲸鱼算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鲸鱼算法4.实验参数设定5.算法结果6.参考文献7.MA…

React基础语法整理

安装&#xff1a; yarn create react-app reatc-lesson --template typescript yarn create 创建一个react-app的应用 项目名称 typescript 的模板react-app 官方地址 https://create-react-app.bootcss.com/docs/adding-typescriptreact 语法文档 https://zh-hans.react.dev…

【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )

文章目录 一、cin.ignore() 函数1、cin.ignore() 函数简介2、cin.ignore() 函数原型3、代码示例 - cin.ignore() 函数 二、cin.peek() 函数1、cin.peek() 函数简介2、代码示例 - cin.peek() 三、cin.putback() 函数1、cin.putback() 函数简介2、代码示例 - cin.putback() 一、c…

MEME成风,为何比特币生态无法复刻以太坊生态的多样玩法?

铭文市场火了之后&#xff0c;很多人对 BTC L2 投入了过多的期许&#xff0c;认为 BTC 2 层会像以太坊 layer2 一样辉煌&#xff1f; 然而事实是&#xff0c;比特币生态的「成功」可能很长时间会停滞在「资产发行」叙事阶段&#xff0c;要复刻以太坊的生态多样玩法&#xff0c…

thinkphp6入门(12)-- 一对一关联模型

定义一对一关联&#xff0c;例如&#xff0c;一个用户都有一个个人资料。 一、两表 1.用户表:user 2.工作经验表&#xff1a;work_experience user表的id关联work_experience表的user_id。 注意看&#xff0c;user_id1的有2条工作经验 二、数据模型 主表模型&#xff1a;…

低多边形3D建模动画风格纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

掌握PyTorch数据预处理(一):让模型表现更上一层楼!!!

引言 在PyTorch中&#xff0c;数据预处理是模型训练过程中不可或缺的一环。通过精心优化数据&#xff0c;我们能够确保模型在训练时能够更高效地学习&#xff0c;从而在实际应用中达到更好的性能。今天&#xff0c;我们将深入探讨一些常用的PyTorch数据预处理技巧&#xff0c;…

【交换排序 简单选择排序 堆排序 归并排序】

文章目录 交换排序简单选择排序堆排序归并排序 交换排序 冒泡排序的算法分析&#xff1a; 冒泡排序最好的时间复杂度是O&#xff08;n&#xff09;冒泡排序最好的时间复杂度是O&#xff08;n平方&#xff09;冒泡排序平均时间复杂度为O&#xff08;n的平方&#xff09;冒泡排…

1-6、编程语言排行榜

语雀原文链接 https://www.tiobe.com/tiobe-index/

基于Vue框架的电子商城购物平台小程序的设计与开发

基于JavaWebSSMVue电子商城购物平台小程序系统的设计和实现 源码获取入口KaiTi 报告/Ren务书Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告/Ren务书 一、选题的目的和意义 自从微信推出了微信小程序…

如何自动筛选高质量的指令微调数据喂给大模型?

前言 大家都知道在大模型时代&#xff0c;数据有多么重要&#xff0c;质量多高都不过分&#xff01;甚至直接决定着最终的效果。 尤其做SFT&#xff0c;模型框架基本不用改&#xff08;事实上也改不动&#xff09;&#xff0c;如何做一份符合自己场景高质量的SFT数据成了唯一…