第10章 模拟比较器和ADC接口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

采样保持时间 转 换 形 式 启动ADC后的第一次转换 正常转换,单端输入 自动触发方式 正常转换,差分输入 13.5个ADC时钟 1.5个ADC时钟 2个ADC时钟 1.5/2.5个ADC时钟
完 成 转 换 总 时 间 25个ADC时钟 13个ADC时钟 13.5个ADC时钟 13/14个ADC时钟
25
2.ADC输入通道和参考电源的选择

输入通道:ADMUX写入

参考电源:AVcc或芯片内部的2.56V参考源
26
改变ADC输入通道时,应该遵循的原则

在单次转换模式下,总是在开始转换前改变通道设置。

在连续转换模式下,总是在启动ADC开始第一次转换前 改变通道设置。
27

3.ADC转换结果
表9-6 ADC自动转换触发源的选择 触 发 ADTS[2:0] 000 001 010 011 连续自由转换 模拟比较器 外部中断0 T/C0比较匹配 源
100
101 110 111
T/C0溢出
T/C1比较匹配B T/C1溢出 T/C1输入捕捉
23
10.2.3 ADC应用设计要点



1.预分频与转换时间 在通常情况下,ADC的 逐次比较转换电路要达 到最大精度时,需要 50kHz~200kHz之间的 采样时钟。在要求转换 精度低于10位的情况下, ADC的采样时钟可以高 于200kHz,以获得更高 的采样率。
图10-4 带预分频器的ADC时钟源
24

AVR的ADC完成一次转换的时间见表10-7。从表中可以 看出,完成一次ADC转换通常需要13-14个ADC时钟。 而启动ADC开始第一次转换到完成的时间需要25个 ADC时钟,这是因为要对ADC单元的模拟电路部分进 行初始化。
表10-7 ADC转换和采样保持时间
图10-3 ADC功能单元方框图
16

10.2.2 ADC相关的I/O寄存器

1.ADC多路复用器选择寄存器—ADMUX
6 REFS0 R/W 0 5 ADLAR R/W 0 4 MUX4 R/W 0 3 MUX3 R/W 0 2 MUX2 R/W 0 1 MUX1 R/W 0 0 MUX0 R/W 0

4.特殊功能I/O寄存器—SFIOR

7
6 ADTS1 R/W 0
5 ADTS0 R/W 0
4 --R 0
3 ACME R/W 0
2 PUD R/W 0
1 PSR2 R/W 0
0 PSR10 R/W 0 SFIOR
$30 ($0050) ADTS2 读/写 复位值 R/W 0
22

位7..5—ADTS[2:0]:ADC自动转换触发源选择,见表9-6
4
10.1 模拟比较器
模拟比较器
5
10.1.1 与模拟比较器相关的寄存器和标志位 SFIOR、ACSR 1.特殊功能IO寄存器—SFIOR
为模拟比较器多 路使能控制位

2.模拟比较器控制和状态寄存器—ACSR
6

ACSR是模拟比较器主要的控制寄存器,各位的作用
位7—ACD:模拟比较器禁止 位6—ACBG:模拟比较器的能隙参考源选择 位5—ACO:模拟比较器输出 位4—ACI:模拟比较器中断标志位 位3—ACIE:模拟比较器中断允许 位1、0—ACIS1、ACIS0:模拟比较器中断模式选择 位2—ACIC:模拟比较器输入捕获允许
unsigned char dis_buff[4]={0,0,0,0},posit; bit time_2ms_ok;
31
// ADC电压值送显示缓冲区函数 void adc_to_disbuffer(unsigned int adc) { unsigned char i; for (i=0;i<=3;i++) { dis_buff[i]=adc%10; adc /= 10; } }
14



ADC的电压输入范围0~Vcc; 可选择的内部2.56V的ADC参考电压源; 自由连续转换模式和单次转换模式; ADC自动转换触发模式选择; ADC转换完成中断; 休眠模式下的噪声抑制器(NOISE CANCELER)。
15

ADC功能单元包括采样保持电路,以确保输入电压在ADC转换过程中保持恒定。
32
// Timer 0 比较匹配中断服务 interrupt [TIM0_COMP] void timer0_comp_isr(void) { time_2ms_ok = 1; } // ADC 转换完成中断服务 interrupt [ADC_INT] void adc_isr(void) { unsigned int adc_data,adc_v; adc_data=ADCW; //读取ADC置换结果 adc_v=(unsigned long)adc_data*5000/1024; //换算成电压值 adc_to_disbuffer(adc_v); } 33
第10章 模拟比较器和ADC接口
1
单片机内部常见的支持模拟信号输入 接口

模拟比较器和模数转换 ADC
2
模拟量输入通道构成
任务:完成模拟量的采集并转换成数字量送入计算机。
主要组成: 信号处理装置、采样单元、采样保持器、数据 放大器、A/D转换器控制电路。
3
AD转换及其应用



被测参数,如温度、流量、压力、液位、 速度等都是连续变化的量-模拟量 单片机只能处理数字量 把输入的连续变化的模拟电压信号转换 成离散的数字量-ADC AVR ATmega16 内置10bit ADC
20
$05 ($0025) $04 ($0024) 位 读/写 读/写 复位值 复位值
ADCH ADCL
读数注意

当ADC转换完成后,可以读取ADC寄存器的ADC0ADC9得到ADC的转换的结果。如果是差分输入,转换 值为二进制的补码形式。一旦开始读取ADCL后,ADC 数据寄存器就不能被ADC更新,直到ADCH寄存器被读 取为止。因此,如果结果是左对齐(ADLAR=1),且 不需要大于8位的精度的话,仅仅读取ADCH寄存器就 足够了。否则,必须先读取ADCL寄存器,再读取 ADCH寄存器。ADMUX寄存器中的ADLAR位决定了从 ADC数据寄存器中读取结果的格式。如果ADLAR位为 “1”,结果将是左对齐;如果ADLAR位为“0”(默认 21 情况),结果将是右对齐。
28
10.2.4 ADC的应用实例
29

实例功能
本例利用ATmega16内部的ADC进行转换, 转换后的结果换算成测量的电压值在4位LED 数码管上显示。在数码管上显示AD采样值, 实现和完成一个简易电压表的设计。通过调 节W改变AD采样值
30
程序
#include <mega16.h> flash unsigned char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F }; flash unsigned char position[4]={0xfe,0xfd,0xfb,0xf7};
10.2.1 10位ADC结构
AVR的模数转换器ADC具有下列特点: 10位精度; 0.5LSB积分非线形误差 ±2LSB的绝对精度; 13µ s-260µs的转换时间; 在最大精度下可达到每秒15kSPS的采样速率; 8路可选的单端输入通道; 7路差分输入通道; 2路差分输入通道带有可选的10×和200×增益; ADC转换结果的读取可设置为左端对齐(LEFT ADJUSTMENT);
A/D转换结束后(ADIF = 1),在ADC数据寄存器(ADCL和ADCH) 中可以取得转换的结果。对于单端输入的A/D转换,其转换结果为: ADC =(VIN×1024)/ VREF 其中VIN表示选定的输入引脚上的电压,VREF表示选定的参考电源的 电压。 对于差分转换,其结果为:ADC=(VPOS-VNEG) ×GAIN×512/VREF 说明:VPOS为差分正极输入电压,VNEG为差分负极输入电压
12

10.2 模数转换器ADC
外部的模拟信号量需要转变成数字量才能进一步的由MCU进行处 理。ATmega16内部集成有一个10位逐次比较(successive approximation)ADC电路。因此使用AVR可以非常方便的处理输 入的模拟信号量。 ATmega16的ADC与一个8通道的模拟多路选择器连接,能够对以 PORTA作为ADC输入引脚的8路单端模拟输入电压进行采样,单端 电压输入以0V(GND)为参考。另外还支持16种差分电压输入组 合,其中2种差分输入方式(ADC1,ADC0和ACD3,ADC2)带有 可编程增益放大器,能在A/D转换前对差分输入电压进行0dB (1×),20dB(10×)或46dB(200×)的放大。还有七种差 分输入方式的模拟输入通道共用一个负极(ADC1),此时其它任 意一个ADC引脚都可作为相应的正极。若增益为1×或10×,则可 13 获得8位的精度。如果增益为200×,那么转换精度为7位。
8
模拟比较器的多路输入选择
9
10.1.2 模拟比较器的应用设计



模拟比较器使用注意点包括: 芯片RESET后,模拟比较器为允许工作状态。如果系统中不使 用模拟比较器功能,应将寄存器ACSR的ACD位置1,关闭模拟 比较器,这样可以减少电源的消耗。 使用模拟比较器时,应注意比较器的两个输入端口PB2、PB3的 设置。当PB2/PB3作为模拟输入端使用时,PB2/PB3应设置为 输入工作方式,且上拉电阻无效,这样就不会使PB2/PB3上输 入的模拟电压受到影响。 当AIN0设置为使用芯片内部1.22V的固定能隙(Bandgap)参 考电源时,PB2 口仍然可以作为通用I/O端口使用,这样就能 节省一个I/O引脚。在上面的例子里,AIN0就是设置为使用芯 片内部1.22V的固定能隙(Bandgap)参考电源,这样就可将 PB2口释放出来,作为普通I/O口用来驱动LED了
12 ADC4 4 R R 0 0
11 ADC3 3 R R 0 0
10 ADC2 2 R R 0 0
9 ADC9 ADC1 1 R R 0 0
8 ADC8 ADC0 0 R R 0 0
19
ADCH ADCL

ADLAR = 1,ADC转换结果左对齐时,ADC结果 的保存方式
位 15 ADC9 ADC1 7 R R 0 0 14 ADC8 ADC0 6 R R 0 0 13 ADC7 5 R R 0 0 12 ADC6 4 R R 0 0 11 ADC5 3 R R 0 0 10 ADC4 2 R R 0 0 9 ADC3 1 R R 0 0 8 ADC2 0 R R 0 0
18

3.ADC数据寄存器—ADCL和ADCH
ADLAR = 0,ADC转换结果右对齐时,ADC结 果的保存方式

位 $05 ($0025) $04 ($0024) 位 读/写 读/写 复位值 复位值
15 ADC7 7 R R 0 0
14 ADC6 6 R R 0 0
13 ADC5 5 R R 0 0
7
表9-1 ACIS1 ACIS0
模拟比较器中断模式选择 中 断 模 式
0
0 1
0
1 0
1
1
比较器输出的上升沿和下降沿都触发中 断 保留 比较器输出的下降沿触发中断 比较器输出的上升沿触发中断
模拟比较器的多路输入 用户Hale Waihona Puke Baidu以选择ADC7..0引脚中的任一路的模拟信 号代替AIN1引脚,作为模拟比较器的反向输入端。
7 位 $07 ($0027) REFS1 R/W 读/写 0 复位值
ADMUX
位7,6—REFS[1:0]:ADC参考电源选择 位5—ADLAR:ADC结果左对齐选择 位4..0—MUX4:0:模拟通道和增益选择
17
2.ADC控制和状态寄存器A—ADCSRA



位7—ADEN:ADC使能 位6—ADSC:ADC转换开始 位5—ADATE:ADC自动转换触发允许 位4—ADIF:ADC中断标志位 位3—ADIE:ADC中断允许 位2,0—ADPS[2:0]:ADC预分频选择
10
系统电源电压的监测
11
程序

{
#include <mega16.h> void main(void)




PORTB.2=0x01; //PC0设置为输出,控制LED DDRB.2=0x01; ACSR=0x40; //模拟比较器初始化,允许模拟比较器, AIN0设置为内部Bandgap参考电压1.22V while (1) //循环检测AC0位 { if (ACSR.5) PORTB.2 = 0; // AIN0 >AIN1,低电压报警 else PORTB.2 = 1; // AIN0 < AIN1, }}
相关文档
最新文档