ADCADC0832及其应用.docx
《ADCADC0832及其应用.docx》由会员分享,可在线阅读,更多相关《ADCADC0832及其应用.docx(16页珍藏版)》请在冰点文库上搜索。
![ADCADC0832及其应用.docx](https://file1.bingdoc.com/fileroot1/2023-5/25/ed30a7b6-0f86-4ed4-b474-343f41772093/ed30a7b6-0f86-4ed4-b474-343f417720931.gif)
ADCADC0832及其应用
DAC0832
一)D/A转换器DAC0832
DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。
如图4-82所示,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。
运算放大器输出的模拟量V0为:
图4-82
由上式可见,输出的模拟量与输入的数字量(
)成正比,这就实现了从数字量到模拟量的转换。
一个8位D/A转换器有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。
输入可有28=256个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压范围内任意值,而只能是256个可能值。
图4-83是DAC0832的逻辑框图和引脚排列。
图4-83
D0~D7:
数字信号输入端。
ILE:
输入寄存器允许,高电平有效。
CS:
片选信号,低电平有效。
WR1:
写信号1,低电平有效。
XFER:
传送控制信号,低电平有效。
WR2:
写信号2,低电平有效。
IOUT1、IOUT2:
DAC电流输出端。
Rfb:
是集成在片内的外接运放的反馈电阻。
Vref:
基准电压(-10~10V)。
Vcc:
是源电压(+5~+15V)。
AGND:
模拟地NGND:
数字地,可与AGND接在一起使用。
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
实验线路如图4-84所示。
图4-85
IN0~IN7:
8路模拟信号输入端。
A1、A2、A0:
地址输入端。
ALE地址锁存允许输入信号,在此脚施加正脉冲,上升沿有效,此时锁存地址码,从而选通相应的模拟信号通道,以便进行A/D转换。
START:
启动信号输入端,应在此脚施加正脉冲,当上升沿到达时,内部逐次逼近寄存器复位,在下降沿到达后,开始A/D转换过程。
EOC:
转换结束输出信号(转换接受标志),高电平有效。
OE:
输入允许信号,高电平有效。
CLOCK(CP):
时钟信号输入端,外接时钟频率一般为640kHz。
Vcc:
+5V单电源供电。
、
Vref(+),Vref(-):
基准电压的正极、负极。
一般Vref(+)接+5V电源,Vref(-)接地。
D7~D0:
数字信号输出端。
由A2、A1、A0三地址输入端选通8路模拟信号中的任何一路进行A/D转换。
ADC0832的封装以及工作模式的选取芯片接口说明:
·CS_片选使能,低电平芯片使能。
·CH0模拟输入通道0,或作为IN+/-使用。
·CH1模拟输入通道1,或作为IN+/-使用。
·GND芯片参考0电位(地)。
·DI数据信号输入,选择通道控制。
·DO数据信号输出,转换数据输出。
·CLK芯片时钟输入。
·Vcc/REF电源输入及参考电压输入(复用)。
ADC0832与单片机的接口电路:
用汇编编写
下面是测试程序,选择CH1,单片机晶振为,18.432MHz
;ADC0832简单测试(改)
A_0832_CSEQUP1.0 ;CS
A_0832_CLKEQUP1.1 ;CLK
A_0832_DIEQUP1.2 ;DI
A_0832_D EQUP1.3 ;DO
A_0832_T EQU40H ;读取时的脉冲计数
A_0832_DAEQU41H ;数据所存位置
ORG0
LJMPMAIN
ORG30H
MAIN:
LCALLADC_RD
MOVA,A_0832_DA
AJMP$
ADC_RD:
MOVA_0832_T,#8
CLRA_0832_CLK
CLRA_0832_CS
SETBA_0832_DI ;START
SETBA_0832_CLK ;第一个上升沿
NOP
NOP
NOP
CLRA_0832_CLK
NOP
NOP
SETBA_0832_DI ;选择CH1,通过组合选取通道(SGL/DIF)
NOP
SETBA_0832_CLK ;第二个上升沿
NOP
NOP
NOP
CLRA_0832_CLK
NOP
NOP
SETBA_0832_DI ;选择CH1,通过组合选取通道(ODD/SIGN)
NOP
SETBA_0832_CLK ;第三个上升沿
NOP
NOP
NOP
CLRA_0832_CLK ;首个下降沿
NOP
NOP
NOP
SETBA_0832_CLK
NOP
NOP
A_0832_RD:
;读取前,8位
CLRA_0832_CLK
NOP
NOP
NOP
SETBA_0832_CLK
MOVC,A_0832_D
RLCA
DJNZA_0832_T,A_0832_RD
MOVA_0832_DA,A
RRA
MOVA_0832_T,#7
A_0832_RD1:
;读后7位,+前1位
CLRA_0832_CLK
NOP
NOP
NOP
SETBA_0832_CLK
MOVC,A_0832_D
RRCA
DJNZA_0832_T,A_0832_RD1
CJNEA,A_0832_DA,ADC_RD
SETBA_0832_CS
RET
END
ADC0832 模数转换例程,用C语言编写
//可调电阻CH0通道
/*
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。
当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号.在第1个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。
在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能,当前2位数据为"1""0"时,只对CH0进行单通道转换.当2位数据为"1""1"时,只对CH1进行单通道转换.当2位数据为"0""0"时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入.当2位数据为"0""1"时,将CH0作为负输入端IN-,CH1作为正输入端IN+进行输入.
从第4个脉冲下沉开始由DO,端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据.
*/
#include
#define_rrca_() CY =ACC&0x01 //产生RRCA指令
#define_rlca_() CY =ACC&0x80 //产生RLCA指令
#definebADcsP3_7
#definebADclP1_6
#definebADdaP1_7
unsignedcharucCH0;
bitbAD_ok; //AD转换完成
unsignedcharcodedx58[3]_at_0x3b;//保留0x3b开始的3个字节
voidad_change(void)
{
unsignedcharcycle;
bADcs=0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用.
bADcl=0;
bADda=1;//在第1个时钟脉冲的下沉之前DI端必须是高电平.
bADcl=1; bADcl=0;//pulse1down
//ch0dADda=1;
bADcl=1; bADcl=0;//pulse2down
bADda=0;
bADcl=1; bADcl=0;//pulse3down
for(cycle=8;cycle>0;cycle--)
{
bADda=1;
bADcl=1; bADcl=0;//pulse
CY=bADda;
_rlca_(); //RRCA
}
B=ACC;
for(cycle=8;cycle>0;cycle--)
{
bADda=1;
bADcl=1; bADcl=0;//pulse
CY=bADda;
_rrca_(); //RLCA
}
if(ACC==B)
{
ucCH0=B;
P1_5=0; //指示灯亮
bAD_ok=1;
}
bADcs=1;//当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束
}
main()
{
ad_change();
while
(1);
}
例3
ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
通过DI数据输入端,可以轻易的实现通道功能的选择。
单片机对ADC0832的控制原理:
正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。
但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI并联在一根数据线上使用。
(见图3)当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。
当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。
在第1个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。
在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能,其功能项
见表1。
如表1所示,当此2位数据为“1”、“0”时,只对CH0进行单通道转换。
当2位数据为“1”、“1”时,只对CH1进行单通道转换。
当2位数据为“0”、
“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。
当2位
数据为“0”、“1”时,将CH0作为负输入端IN-,CH1作为正输入端IN+进行
输入。
到第3个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI
端则开始利用数据输出DO进行转换数据的读取。
从第4个脉冲下沉开始由DO
端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。
直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。
也正是
从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATD0。
随后输出8位数据,到第19个脉冲时数据输出完成,也标志着一次A/D转换的
结束。
最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
更详细的时序说明请见表2。
作为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时的电压精度为19.53mV。
如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。
但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。
ADC0832芯片接口程序的编写:
ADC0832数据读取程序流程:
为了高速有效的实现通信,我们采用汇编语言编写接口程序。
由于ADC0832的数据转
换时间仅为32μS,所以A/D转换的数据采样频率可以很快,从而也保证的某些场合对A/D
转换数据实时性的要求。
数据读取程序以子程序调用的形式出现,方便了程序的移植。
程序占用资源有累加器A,工作寄存器R7,通用寄存器B和特殊寄存器CY。
通道功能寄
存器和转换值共用寄存器B。
在使用转换子程序之前必须确定通道功能寄存器B的值,其赋值语句为“MOVB,#data”(00H~03H)。
运行转换子程序后的转换数据值被放入B中。
子程序退出后即可以对B中数据处理。
/*-------------------------------------------
子程序名:
ADC0832子程序
编写人:
杜洋
初写时间:
2005年10月10日
程序功能:
将模拟电压量转换成数字量
实现方法:
串行通信。
CPU说明:
MCS-51
植入说明:
占用A、B、CY、R7
-------------------------------------------*/
;以下接口定义根据硬件连线更改
ADCSBITP3.5;使能接口
ADCLKBITP3.4;时钟接口
ADDOBITP3.3;数据输出接口(复用)
ADDIBITP3.3;数据输入接口
;以下语句在调用转换程序前设定
MOVB,#00H;装入通道功能选择数据值
;以下为ADC0832读取数据子程序
;====ADC0832读数据子程序====
ADCONV:
SETBADDI;初始化通道选择
NOP
NOP
CLRADCS;拉低/CS端
NOP
NOP
SETBADCLK;拉高CLK端
NOP
NOP
CLRADCLK;拉低CLK端,形成下降沿
MOVA,B
MOVC,ACC.1;确定取值通道选择
MOVADDI,C
NOP
NOP
SETBADCLK;拉高CLK端
NOP
NOP
CLRADCLK;拉低CLK端,形成下降沿2
MOVA,B
MOVC,ACC.0;确定取值通道选择
MOVADDI,C
NOP
NOP
SETBADCLK;拉高CLK端
NOP
NOP
CLRADCLK;拉低CLK端,形成下降沿3
SETBADDI
NOP
NOP
MOVR7,#8;准备送下后8个时钟脉冲
AD_1:
MOVC,ADDO;接收数据
MOVACC.0,C
RLA;左移一次
SETBADCLK
NOP
NOP
CLRADCLK;形成一次时钟脉冲
NOP
NOP
DJNZR7,AD_1;循环8次
MOVC,ADDO;接收数据
MOVACC.0,C
MOVB,A
MOVR7,#8
AD_13:
MOVC,ADDO;接收数据
MOVACC.0,C
RRA;左移一次
SETBADCLK
NOP
NOP
CLRADCLK;形成一次时钟脉冲
NOP
NOP
DJNZR7,AD_13;循环8次
CJNEA,B,ADCONV;数据校验
SETBADCS;拉高/CS端
CLRADCLK;拉低CLK端
SETBADDO;拉高数据端,回到初始状态
RET
;====子程序结束====