单片机基础(06)
6.1 ADC转换器工作原理
A/D转換器概述
现实世界中,各种物理量(温度、压力、流量、速度等) 通过传感器转换成电信号,通常都是模拟信号。而单片机作为数字电路芯片,只能处理数字电平信号。因此需要有器件实现模拟量到数字量之间的转换。
- AD器件是将模拟量转换为数字信号的芯片;
- DA器件则是将数字量转换为模拟量的芯片。
一、A/D转换器的类型及原理
现在有很多类型的A/D转换器芯片,各种A/D转换芯片根据转换原理可分为
计数型A/D转换器、逐次比较式、双重积分型、并行式A/D转换器等;
按转换方法可分为
直接A/D转换器 间接A/D转换器;
按其分辦率可分为 4、8、12、16位的A/D转换器芯片。
逐次逼近型A/D转换器
逐次逼近型A/D转换器是由一个比较器、D/A转换器、寄存器及控制电路组成部分。逐次逼近型是用一系列已知的电压权值,从高位到低位依次开始逐位试探比较。
5V参考电压,输入模拟电压为6.835937V,逐次比较过程为。
- D7:5V
- D6:2.5V
- D5:1.25V
- D4:0.625V
- D3:0.3125V
- D2:0.15625V
- D1:0.078125V
- D0:0.0390625V
![05_01_13_41_EcJUe1](https://i-blog.csdnimg.cn/blog_migrate/6625a75d05d6b9787b6c7378a596bf32.png)
3)双重积分型A/D转换器
双重积分型A/D将输入电压先变换成与其平均值成正比的时间间隔,然后再把此时间间隔转换成数字量,它属于间接型转换器。由于在转换过程中进行了两次积分,因此称为双重积分型。双重积分型A/D转换器
转换精度高,稳定性好,测量的是输入电压在一段时间的平均值,而不是输入电压的瞬间值,因此它的抗干扰能力强,但是转换速度慢,双重积分型A/D转换器在工业上应用也比较广泛。
![05_01_13_43_aKPEFw](https://i-blog.csdnimg.cn/blog_migrate/be84780e6af33efca80bda693cdf9c0b.png)
二、A/D转换器的主要性能指标
- 分辦率:表示输出变化了变化一个相邻数码所需输入的模拟电压变化量。分辨率一般为满刻度电压与2^n之间的比值,所以位数越大,分辦率越高。
- 转换时间:ADC完成一次模数转换所需的时间,其倒数则定义为转换速率。
- 绝对误差与相对误差:绝对误差指AD转换器在任何数码对应实际电压与理想电压值之差的最大值,相对误差是绝对误差与满刻度电压值之比。
- 线性度:指AD器件实际的转换西数与理想直线的最大误差。
![05_01_13_45_otPSWq](https://i-blog.csdnimg.cn/blog_migrate/85f861a5d575adacc10d9b23c64fa9ff.png)
6.2 ADC0809与单片机的控制接口
ADC0809与MCS-51的接口
ADC0809逐次逼近型转换器
ADC0809是CMOS工艺单片型逐次逼近型A/D转换器,具有8路模拟量输入通道,有转换起停控制,模拟输入电压范围为0~+5V,转换时间为100 us。
![05_01_13_48_42EH2l](https://i-blog.csdnimg.cn/blog_migrate/63a697db6e823ddf00962bb4e4cf5e97.png)
ADC0809的引脚
ADC0809芯片有28个引脚,采用双列直插式封装(DIP28)。
![05_01_13_50_6u2Sxk](https://i-blog.csdnimg.cn/blog_migrate/ac68b0d821490742ad88fe85cb2593fa.png)
ADDC | ADDB | ADDA | 选择通道 |
---|---|---|---|
0 | 0 | 0 | IN0 |
0 | 0 | 1 | IN1 |
0 | 1 | 0 | IN2 |
0 | 1 | 1 | IN3 |
1 | 0 | 0 | IN4 |
1 | 0 | 1 | IN5 |
1 | 1 | 0 | IN6 |
1 | 1 | 1 | IN7 |
其中:
- NO~IN7:8路模拟量输入端。
- DO~D7:8位数字量输出端。
- ADDA、 ADDB、 ADDC:3位地址输入线,用于选择8路模拟通道中的一路。
- ALE:地址锁存允许信号,输入,由低电平变高电平锁存。
- START:A/D转换启动信号,输入,由高电平变低电平启动。
- EOC:A/D转换结束信号,输出。当启动转换时,该引脚为低电平,当A/D转换结束时,该线脚输出高电平。
- OE:数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从DO~D7送出。
- CLK:时钟脉冲输入端。要求时钟频率不高于640kHZ。
- REF+、 REF-:基准电压输入端。
- vcc:电源,接+5v电源。
- GND:地。
ADC0809的工作流程809的引脚
![05_01_13_56_3cePAa](https://i-blog.csdnimg.cn/blog_migrate/6df2a43dcfe3bb17e69dae300839319d.png)
- 输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器译码从8路模拟通道中选通一路模拟量送到比较器。
- 送START一高脉冲,START的上升沿使逐次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
- 当转换结束时,转换的结果送入到输出三态锁存器,并使EOC信号回到高电平,通知CPU已转换结束。
- 当CPU执行一读数据指令,使OE为高电平,则从输出端D0~D1读出数据。
ADC0809与MCS-51单片机的接口
下图是一个ADC0809与8051的一个接口电路图。
![05_01_13_57_i6iyZf](https://i-blog.csdnimg.cn/blog_migrate/8662d1474c3de5f52bed20755df64254.png)
![05_01_13_57_5EnI1g](https://i-blog.csdnimg.cn/blog_migrate/f44033e81c3d9139c47913f04e0823f4.png)
向地址满足A15=0的端口进行写操作时,即可产生ALE/START信号所需的上升沿,写操作结束后,即可产生下降沿。
![05_01_13_58_6UA1uN](https://i-blog.csdnimg.cn/blog_migrate/d6885ba81e3efa0dfb36e2a0d624e2fb.png)
向地址满足A15=0的端口进行读操作时,即可产生OE信号所需的上升沿。
![05_01_13_58_PFpFgt](https://i-blog.csdnimg.cn/blog_migrate/8b52f8c2f42dbe93348a8a2bd574a79f.png)
启动AD转换时EOC为低电平,转换结束时变为高电平,其电平极性与INT0中断相反,即需要通过反相器将极性反向。
软件编程
设系统为一个8路模拟量输入的巡回检测系统,使用中断方式采样数据,把采样转换所得的数字量按序存于片内RAM中。采样完一遍后停止采集。
#include <reg51.h>
#include <absacc.h> //定义绝对地址访问
#define uchar unsigned char
uchar data x[8]; //定义8个单元的数组,存放结果
uchar xdata *ADadr; //定义指向通道的指针
uchar i=0;
void main(void) {
IT0 = 1; //初始化
EX0 = 1;
EA = 1;
i = 0;
ADadr = 0x7FF8; //指针指向通道0
*ADadr = i; //启动通道0转换
for (;;) {;} //等待中断
}
void int_adc(void) interrupt 0 { //中断函数
x[i] = *ADadr; //接收当前通道转换结果
i++;
ADadr++; //指向下一个通道
if (i < 8){
*ADadr = i; //8个通道未转换完,启动下一个通道返回
}else{
EA = 0;
EX0 = 0; //8个通道转换完,关中断返回
}
}
6.3 常见DAC转换器工作原理
D/A转换器的基本原理
D/A转换器是把输入的数字量转换为与之成正比的模拟量的器件。数字量不同位置值代表不同权重,输出模拟量是不同权重值的累加和。
如输入的数字量为D,
V
R
e
f
V_{Ref}
VRef为基准电压,输出的模拟量为
V
o
V_o
Vo,则有:
V
o
=
D
×
V
R
E
F
/
2
n
\mathrm{V}_{\mathrm{o}}=\mathrm{D} \times \mathrm{V}_{\mathrm{REF}} / 2^{n}
Vo=D×VREF/2n
D = d n − 1 2 n − 1 + d n − 2 2 n − 2 + … … + d 1 2 1 + d 0 2 0 \mathrm{D}=\mathrm{d}_{\mathrm{n}-1} 2^{\mathrm{n}-1}+\mathrm{d}_{\mathrm{n}-2} 2^{\mathrm{n}-2}+\ldots \ldots+\mathrm{d}_{1} 2^{1}+\mathrm{d}_{0} 2^{0} D=dn−12n−1+dn−22n−2+……+d121+d020
D/A转换器的性能指标
- 分辨率:DAC能够产生的最小的模拟信号变化量,一般用最小模拟变化量与满量程信号值之比表示。如:8位(1/256),12位(1/4096)。
- 精度:DAC输出实际模拟量与理论值间的误差,同样分为绝对精度和相对精度。
- 建立时间:从数字量输入发生变化开始,到输出端模拟量稳定后,所需的时间,它是衡量DAC转换速度的重要参数。
D/A转换的分类
- 按输入数字量的位数分:8位、10位、12位16位等;
- 按输入的数码分:二进制方式和BCD码方式;
- 按数字量的输入方式分:并行方式和串行方式;
- 按输出形式分:电流输出型和电压输出型,电压输出型
D/A转换一般由电阻解码网络、模拟电子开关、基准电压、运算放大器等组成。
按电阻解码网络的组成形式,D/A转换器分成有权电阻解码网络D/A转换器、工型电阻解码网络D/A转换器和开关树型电阻解码网络D/A转换器等。
T型电阻解码网络D/A转换器只用两种阻值的电阻,精度较高,容易集成化,在实际中使用最频繁。
反相比例放大器
![05_01_14_11_ARnvXq](https://i-blog.csdnimg.cn/blog_migrate/8c9842b4431dbb0a235a835088630c49.png)
根据运放虚断特性:
I
(
R
1
)
=
I
(
R
f
)
\mathrm{I}(\mathrm{R} 1)=\mathrm{I}\left(\mathrm{R}_{\mathrm{f}}\right)
I(R1)=I(Rf)
各支路的电流为:
I
n
−
1
=
V
R
E
F
2
R
I
n
−
1
=
V
R
E
F
2
2
R
⋯
⋯
I
n
−
1
=
V
R
E
F
2
n
−
1
R
I
n
−
1
=
V
R
E
F
2
n
R
I_{n-1}=\frac{V_{R E F}}{2 R} \quad I_{n-1}=\frac{V_{R E F}}{2^{2} R} \quad \cdots \cdots \quad I_{n-1}=\frac{V_{R E F}}{2^{n-1} R} \quad I_{n-1}=\frac{V_{R E F}}{2^{n} R}
In−1=2RVREFIn−1=22RVREF⋯⋯In−1=2n−1RVREFIn−1=2nRVREF
6.4 DAC0832与单片机的接口
MCS-51与8位DAC0832的接口
DAC0832是有美国半导体公司(NS)设计的一款8位T型电阻网络D/A转换器,并行数字量输入,电流输出型,建立时间为1us。
DAC0832与单片机的接口简单,易于控制,价格便宜且精度适中,在实际应用系统中被广泛使用。
DAC0832的内部结构图
![05_01_14_15_Avnt9m](https://i-blog.csdnimg.cn/blog_migrate/e9a2d38ad67394c77cfde6e5e3130f93.png)
DAC0832的引脚
DAC0832有20引脚,采用双列直插式封装。
![05_01_14_15_xv4CD3](https://i-blog.csdnimg.cn/blog_migrate/9e913cc5e64c05fb35aa994faf4927ef.png)
- DIO~DI7:8位数字量输入端。
- ILE:数据允许控制输入线。
- C S ‾ \overline{CS} CS:片选信号。
- W R 1 ‾ \overline{WR1} WR1 W R 2 ‾ \overline{WR2} WR2 :写信号线1,2。
- X F E R ‾ \overline{XFER} XFER:数据传送控制信号输入线。
- IOUT1, IOUT2:模拟电流输出线1,2。
- R f b R_{fb} Rfb:片内反馈电阻引出线,用作外接的运放的反馈电阻。
- V R E R V_{RER} VRER:基准电压输入线。电压范围为-10V~+10v。
- VCC:工作电源输入端,可接+5v~+15V。
- AGND,DGND:模拟地,数字地。
DAC0832的工作方式
通过改变控制端ILE,WR1,WR2,CS和XREF的连接方式,DAC0832可以实现:直通方式、单缓冲和双缓冲三种工作方式,满足不同的应用要求。
-
直通方式:WRI、 WR2、CS、XREF接地,ILE接vCC。
8位输入寄存器和8位DAC寄存器都直接处于导通状态,8位数字量到达DI0~DI7,立即进行D/A转换,输出端得到转换的模拟量。
由于单片机数据总线的分时复用特性,此方式下单片机数据总线不能与D10-DI7直接连接,只能通过单片机独立10并行口(或直接数字芯片输出)与DAC0832连接。
-
单缓冲方式
通过引脚WRI、 WR2、CS、XREF使得两个锁存器的一个处于直通状态,另一个处于受控制状态,或者两个被控制同时导通。此方式下,单片机的数据总线可以与DAC832直接连接,CPU向DAC0832输入一次数据后,DAC就能输出模拟信号,是最常用的一种接口形式。
-
双缓冲方式:
引脚WR1、 WR2、CS、XREF使得两个锁存器的一个处于直通状态,另一个处于受控制状态,或者两个被控制同时导通,DAC0832就工作于双缓冲方式。一般在单片机同时控制多片DAC0832工作时采用。
![05_01_14_24_LqHUey](https://i-blog.csdnimg.cn/blog_migrate/4e598d9a3dbd0ff6c6b6277f7ee8fe8f.png)
DAC0832的应用举例
D/A转换器在实际中经常作为波形发生器使用,通过它可以产生各种各样的波形。
基本原理是:利用D/A转换器输出模拟量与输入数字量成正比这一特点,通过程序控制CPU向D/A转换器送出随时间呈一定规律变化的数字,则D/A转换器输出端就可以输出随时间按一定规律变化的波形。
![05_01_14_25_4ddNvZ](https://i-blog.csdnimg.cn/blog_migrate/a200600469d189212f52ab146a777f0e.png)
![05_01_14_26_p0oYLG](https://i-blog.csdnimg.cn/blog_migrate/fac89e56f466b8c1a4b3a1b15a5b07dc.png)
#include <absacc.h> //定义绝对地址访问
#define uchar unsigned char
#define DAC0832 XBYTE[0x7FFF]
void main() {
uchar i;
while(1) {
for (i=0;i<0xff;i++){
DAC0832=i;
}
}
}