AVR单片机_学习ing—(九)、ATMEGA16的模数转换器—01
九、ATMEGA16的模数转换器
九—(01)、ATMEGA16的模数转换器的介绍
1、介绍
1)特点:
? 10 位 精度
? 0.5 LSB 的非线性度
? ± 2 LSB 的绝对精度
? 65 - 260 μs 的转换时间
? 最高分辨率时采样率高达15 kSPS
? 8 路复用的单端输入通道
? 7 路差分输入通道
? 2 路可选增益为10x 与200x 的差分输入通道
? 可选的左对齐ADC 读数
? 0 - VCC 的 ADC 输入电压范围
? 可选的2.56V ADC 参考电压
? 连续转换或单次转换模式
? 通过自动触发中断源启动ADC 转换
? ADC 转换结束中断
? 基于睡眠模式的噪声抑制器
Note: 1. 在PDIP封装下的差分输入通道器件未经测试 。只保证器件在TQFP 与MLF封装下正常
工作 。
2)介绍和框图
ATmega16有一个10位的逐次逼近型ADC 。ADC与一个8通道的模拟多路复用器连接,能
对来自端口A 的8 路单端输入电压进行采样 。单端电压输入以0V (GND) 为基准 。
器件还支持16 路差分电压输入组合 。两路差分输入(ADC1、ADC0 与ADC3、ADC2)
有可编程增益级,在A/D 转换前给差分输入电压提供0dB(1x)、20dB(10x) 或46dB(200x)
的放大级 。七路差分模拟输入通道共享一个通用负端(ADC1), 而其他任何ADC 输入可做
为正输入端 。如果使用1x 或10x 增益,可得到8 位分辨率 。如果使用200x 增益,可得
到7 位分辨率 。
ADC 包括一个采样保持电路,以确保在转换过程中输入到ADC 的电压保持恒定 。ADC 的
框图如 Figure 98 所示 。
ADC 由AVCC 引脚单独提供电源 。AVCC 与VCC 之间的偏差不能超过± 0.3V
标称值为2.56V 的基准电压,以及AVCC,都位于器件之内 。基准电压可以通过在AREF
引脚上加一个电容进行解耦,以更好地抑制噪声 。
2、ADC的工作过程
ADC 通过逐次逼近的方法将输入的模拟电压转换成一个10 位的数字量 。最小值代表
GND,最大值代表AREF引脚上的电压再减去1 LSB 。通过写ADMUX寄存器的REFSn位
可以把AVCC 或内部2.56V 的参考电压连接到AREF 引脚 。在AREF 上外加电容可以对
片内参考电压进行解耦以提高噪声抑制性能 。
模拟输入通道与差分增益可以通过写ADMUX 寄存器的MUX 位来选择 。任何ADC 输入
引脚,像GND 及固定能隙参考电压,都可以作为ADC 的单端输入 。ADC 输入引脚可选
做差分增益放大器的正或负输入 。
如果选择差分通道,通过选择被选输入信号对的增益因子得到电压差分放大级 。然后放大
值成为ADC 的模拟输入 。如果使用单端通道,将绕过增益放大器 。
通过设置ADCSRA 寄存器的ADEN 即可启动ADC 。只有当ADEN 置位时参考电压及输
入通道选择才生效 。ADEN 清零时ADC 并不耗电,因此建议在进入节能睡眠模式之前关
闭ADC 。
ADC转换结果为10位,存放于ADC数据寄存器ADCH及ADCL中 。默认情况下转换结果为
右对齐,但可通过设置ADMUX 寄存器的ADLAR 变为左对齐 。
如果要求转换结果左对齐,且最高只需8 位的转换精度,那么只要读取ADCH 就足够了 。
否则要先读ADCL,再读ADCH,以保证数据寄存器中的内容是同一次转换的结果 。一旦
读出ADCL,ADC 对数据寄存器的寻址就被阻止了 。也就是说,读取ADCL 之后,即使
在读ADCH 之前又有一次ADC 转换结束,数据寄存器的数据也不会更新,从而保证了转
换结果不丢失 。ADCH 被读出后,ADC 即可再次访问ADCH 及ADCL 寄存器 。
ADC转换结束可以触发中断 。即使由于转换发生在读取ADCH与ADCL之间而造成ADC无
法访问数据寄存器,并因此丢失了转换数据,中断仍将触发 。
3、启动一次转换
向 ADC 启动转换位ADSC 位写"1” 可以启动单次转换 。在转换过程中此位保持为高,直
到转换结束,然后被硬件清零 。如果在转换过程中选择了另一个通道,那么ADC 会在改
变通道前完成这一次转换 。
ADC转换有不同的触发源 。设置ADCSRA寄存器的ADC自动触发允许位ADATE可以使能
自动触发 。设置ADCSRB 寄存器的ADC 触发选择位ADTS 可以选择触发源( 见触发源
列表中对ADTS 的描述) 。当所选的触发信号产生上跳沿时,ADC 预分频器复位并开始
转换 。这提供了一个在固定时间间隔下启动转换的方法 。转换结束后即使触发信号仍然存
在,也不会启动一次新的转换 。如果在转换过程中触发信号中又产生了一个上跳沿,这个
上跳沿将被忽略 。即使特定的中断被禁止或全局中断使能位为0,中断标志仍将置位 。这
样可以在不产生中断的情况下触发一次转换 。但是为了在下次中断事件发生时触发新的
转换,必须将中断标志清零 。
使用ADC 中断标志作为触发源,可以在正在进行的转换结束后即开始下一次ADC 转换 。
之后ADC 便工作在连续转换模式,持续地进行采样并对ADC 数据寄存器进行更新 。第
一次转换通过向ADCSRA 寄存器的ADSC 写1 来启动 。在此模式下,后续的ADC 转换
不依赖于ADC 中断标志ADIF 是否置位 。
如果使能了自动触发,置位ADCSRA 寄存器的ADSC 将启动单次转换 。ADSC 标志还
可用来检测转换是否在进行之中 。不论转换是如何启动的,在转换进行过程中ADSC 一
直为1 。
4、预分频及ADC 转换时序
在默认条件下,逐次逼近电路需要一个从50 kHz到200 kHz的输入时钟以获得最大精度 。
如果所需的转换精度低于10 比特,那么输入时钟频率可以高于200 kHz,以达到更高的
采样率 。
ADC 模块包括一个预分频器,它可以由任何超过100 kHz 的CPU 时钟来产生可接受的
ADC 时钟 。预分频器通过ADCSRA 寄存器的ADPS 进行设置 。置位ADCSRA 寄存器的
ADEN 将使能ADC,预分频器开始计数 。只要ADEN 为1,预分频器就持续计数,直到
ADEN 清零 。
ADCSRA寄存器的ADSC置位后,单端转换在下一个ADC时钟周期的上升沿开始启动 。差
分转换时序见P197“ 差分增益信道”。
正常转换需要13 个ADC 时钟周期 。为了初始化模拟电路,ADC 使能(ADCSRA 寄存器
的ADEN 置位) 后的第一次转换需要25 个ADC 时钟周期 。
在普通的ADC 转换过程中,采样保持在转换启动之后的1.5 个ADC 时钟开始;而第一次
ADC转换的采样保持则发生在转换启动之后的13.5 个ADC时钟 。转换结束后,ADC结果
被送入ADC 数据寄存器,且ADIF 标志置位 。ADSC 同时清零( 单次转换模式) 。之后软
件可以再次置位ADSC 标志,从而在ADC 的第一个上升沿启动一次新的转换 。
使用自动触发时,触发事件发生将复位预分频器 。这保证了触发事件和转换启动之间的延
时是固定的 。在此模式下,采样保持在触发信号上升沿之后的2 个ADC 时钟发生 。为了
实现同步逻辑需要额外的3 个CPU 时钟周期 。如果使用差分模式,加上不是由ADC 转
换结束实现的自动触发,每次转换需要25 个ADC 时钟周期 。因为每次转换结束后都要
关闭ADC 然后又启动它 。
在连续转换模式下,当ADSC 为1 时,只要转换一结束,下一次转换马上开始 。转换时
间请见 Table 81 。
5、差分增益信道
当使用差分增益通道,需要考虑转换的确定特征 。
差分转换与内部时钟CKADC2 同步等于ADC 时钟的一半 。同步是当ADC 接口在CKADC2
边沿出现采样与保持时自动实现的 。当CKADC2 为低时,通过用户启动转换( 即,所有的
单次转换与第一次连续转换) 将与单端转换使用的时间( 接着的预分频后的13 个 ADC 时
钟周期) 。当 CKADC2 为高时,由于同步机制,将会使用14 个 ADC 时钟周期 。在连续转
换模式时,一次转换结束后立即启动新的转换,而由于CKADC2 此时为高,所有的自动启
动( 即除第一次外) 将使用14 个 ADC 时钟周期 。
在所有的增益设置中,当带宽为4 kHz 时增益级最优 。更高的频率可能会造成非线性放
大 。当输入信号包含高于增益级带宽的频率时,应在输入前加入低通滤波器 。注意,ADC
时钟频率不受增益级带宽限制 。比如,不管通道带宽是多少,ADC 时钟周期为6 μs,允
许通道采样率为12 kSPS 。
如果使用差分增益通道且通过自动触发启动转换,在转换时ADC 必须关闭 。当使用自动
触发时,ADC 预分频器在转换启动前复位 。由于在转换前的增益级依靠稳定的ADC 时
钟,该转换无效 。在每次转换( 在寄存器 ADCSRA 的ADEN 位中 写 “0” 接着为“1”),通
过禁用然后重使能ADC,只执行扩展转换 。扩展转换结果有效 。
6、改变通道和基准源
ADMUX寄存器中的MUXn及REFS1:0通过临时寄存器实现了单缓冲 。CPU可对此临时寄
存器进行随机访问 。这保证了在转换过程中通道和基准源的切换发生于安全的时刻 。在转
换启动之前通道及基准源的选择可随时进行 。一旦转换开始就不允许再选择通道和基准
源了,从而保证ADC 有充足的采样时间 。在转换完成(ADCSRA 寄存器的ADIF 置位) 之
前的最后一个时钟周期,通道和基准源的选择又可以重新开始 。转换的开始时刻为ADSC
【AVR单片机_学习ing—(九)、ATMEGA16的模数转换器—01】置位后的下一个时钟的上升沿 。因此,建议用户在置位ADSC 之后的一个ADC 时钟周期
里,不要操作ADMUX 以选择新的通道及基准源 。
使用自动触发时,触发事件发生的时间是不确定的 。为了控制新设置对转换的影响,在更
新ADMUX 寄存器时一定要特别小心 。
若ADATE及ADEN都置位,则中断事件可以在任意时刻发生 。如果在此期间改变ADMUX
寄存器的内容,那么用户就无法判别下一次转换是基于旧的设置还是最新的设置 。在以下
时刻可以安全地对ADMUX 进行更新:
1. ADATE 或ADEN 为 0
2. 在转换过程中,但是在触发事件发生后至少一个ADC 时钟周期
3. 转换结束之后,但是在作为触发源的中断标志清零之前
如果在上面提到的任一种情况下更新ADMUX,那么新设置将在下一次ADC 时生效 。
当改变差分通道时要特别注意 。一旦选定差分通道,增益级要用125 μs 来稳定该值 。因
此在选定新通道后的125 μs 内不应启动转换 。或舍弃该时间段内的转换结果 。
推荐阅读
- 自制单片机之十八……无线通讯模块NRF24L01+
- 为何要使用C而不是汇编开发AVR?精华
- YouTube使用机器学习来自动限制不当内容
- STM32学习003_STM32F10X的时钟配置
- 用AVR单片机8位数据产生随机数
- 读写PIC16F877单片机內部EEPROM的实例
- PIC单片机AD转换LED显示程序
- mcs51单片机计数器工作方式1 计数初值计算与定时编程举例
- IIC的PCF8563实用时钟程序_iccavr
- AVR单片机—_五、ATMEGA16的USART与PC机串行通信—02