首页 AVR_ATmega16_AD转换

AVR_ATmega16_AD转换

举报
开通vip

AVR_ATmega16_AD转换 AVR ATmega16 AD 转换程序 第 1 页 共 15 页 AVR ATmega16 AD 转换程序 一、 A/D 转换器的主要技术指标 (1)、分辨率 ADC 的分辨率是指使输出数字量变化一个相邻数码所需输入模 拟电压的变化量。常用二进制的位数表示。例如 12 位 ADC 的分辨率 就是 12 位,或者说分辨率为满刻度 FS 的1 212 。一个 10V 满刻度的 12 位 ADC 能分辨输入电压变化最小值是 10V×1 212 =2.4mV。 (3)、偏移误...

AVR_ATmega16_AD转换
AVR ATmega16 AD 转换程序 第 1 页 共 15 页 AVR ATmega16 AD 转换程序 一、 A/D 转换器的主要技术指标 (1)、分辨率 ADC 的分辨率是指使输出数字量变化一个相邻数码所需输入模 拟电压的变化量。常用二进制的位数表示。例如 12 位 ADC 的分辨率 就是 12 位,或者说分辨率为满刻度 FS 的1 212 。一个 10V 满刻度的 12 位 ADC 能分辨输入电压变化最小值是 10V×1 212 =2.4mV。 (3)、偏移误差 偏移误差是指输入信号为零时,输出信号不为零的值,所以有时 又称为零值误差。假定 ADC 没有非线性误差,则其转换特性曲线各 阶梯中点的连线必定是直线,这条直线与横轴相交点所对应的输入电 压值就是偏移误差。 (4)、满刻度误差 满刻度误差又称为增益误差。ADC 的满刻度误差是指满刻度输出 数码所对应的实际输入电压与理想输入电压之差。 (5)、线性度 线性度有时又称为非线性度,它是指转换器实际的转换特性与理 想直线的最大偏差。 (6)、绝对精度 在一个转换器中,任何数码所对应的实际模拟量输入与理论模拟 输入之差的最大值,称为绝对精度。对于 ADC 而言,可以在每一个 阶梯的水平中点进行测量,它包括了所有的误差。 AVR ATmega16 AD 转换程序 第 2 页 共 15 页 (7)、转换速率 ADC 的转换速率是能够重复进行数据转换的速度,即每秒转换的 次数。而完成一次 A/D 转换所需的时间(包括稳定时间),则是转换 速率的倒数。 二、 AVR 单片机内部 ADC 简介 (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 转换结束中断 • 基于睡眠模式的噪声抑制器 AVR ATmega16 AD 转换程序 第 3 页 共 15 页 (2) 逐次逼近式 ADC 的转换原理 D/A转换器 N位寄存器 控制 逻辑 VIN START EOC VN VREF 锁 存 缓 存 器 D7 D0 D3 D5 D1 D2 D4 D6 OE ATmega16 有一个10位的逐次逼近型ADC。ADC与一个8通道的模 拟多路复用器连接,能对来自端口A 的8 路单端输入电压进行采样。 单端电压输入以0V (GND) 为基准。 ADC 包括一个采样保持电路,以确保在转换过程中输入到ADC 的 电压保持恒定。ADC 的框图如P192 Figure 98 所示。 ADC 由AVCC 引脚单独提供电源。AVCC 与VCC 之间的偏差不能超 过± 0.3V。请参考P198“ADC 噪声抑制器” 来了解如何连接这个引 脚。 标称值为2.56V 的基准电压,以及AVCC,都位于器件之内。基准 电压可以通过在AREF引脚上加一个电容进行解耦,以更好地抑制噪声。 ADC 通过逐次逼近的方法将输入的模拟电压转换成一个10 位的 数字量。最小值代表GND,最大值代表AREF引脚上的电压再减去1 LSB。 通过写ADMUX寄存器的REFSn位可以把AVCC 或内部2.56V 的参考电压 连接到AREF 引脚。在AREF 上外加电容可以对片内参考电压进行解耦 以提高噪声抑制性能。 AVR ATmega16 AD 转换程序 第 4 页 共 15 页 模拟输入通道与差分增益可以通过写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无法访问数据寄存器,并因此丢失了转换数据, 中断仍将触发。 AVR ATmega16 AD 转换程序 第 5 页 共 15 页 这里主要介绍单通道逐次逼近式AD转换,关于其他的AD转换,大 家可以去查阅AVR单片机ATmega16_16L_中文数据手册(P191 – P207)。 (3)转换结果 单次转换的结果如下: 𝐴𝐷𝐶 = 𝑉𝐼𝑁 ∙ 1024 𝑉𝑅𝐸𝐹 式中,VIN 为被选中引脚的输入电压,VREF 为参考电压( 参见P203 Table 83与P204 Table84)。 0x000 代表模拟地电平, 0x3FF 代表 所选参考电压的数值减去1LSB。 差分通道,结果是: 𝐴𝐷𝐶 = (𝑉𝑃𝑂𝑆 − 𝑉𝑁𝐸𝐺 ) ∙ 𝐺𝐴𝐼𝑁 ∙ 512 𝑉𝑅𝐸𝐹 式中,VPOS 为输入引脚正电压,VNEG 为输入引脚负电压,GAIN 为 选定的增益因子,且VREF 为参考电压。结果用2 的补码形式表示,从 0x200 (-512d) 到 0x1FF (+511d)。如果用户希望对结果执行快速极 性检测,它充分读结果的MSB( ADCH 中ADC9 )。如果该位为1,结果 为负;该位为0,结果为正。Figure 111 给出差分输入域的解码。 Table 82 给出当选定的增益为GAIN且参考电压为VREF 的差分输 入对(ADCn - ADCm)的输入码结果。 AVR ATmega16 AD 转换程序 第 6 页 共 15 页 三、 AD转换相关寄存器 (1) ADC 多工选择寄存器- ADMUX Bit 7 6 5 4 3 2 1 0 REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 TIMSK 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 • Bit 7:6 – REFS1:0: 参考电压选择 如Table 1 所示,通过这几位可以选择参考电压。如果在转换 过程中改变了它们的设置,只有等到当前转换结束(ADCSRA 寄存器的 ADIF 置位)之后改变才会起作用。如果在AREF 引脚上施加了外部参 考电压,内部参考电压就不能被选用了。 Table 1. 参考电压的选择 REFS1 REFS0 参考电压选择 0 0 AREF,内部 Vref 关闭 0 1 AVCC,AREF 引脚外加滤波电容 1 0 保留 1 1 2.56V 的片内基准电压源,AREF 引脚外加滤波电容 • Bit 5 – ADLAR: ADC 转换结果 左对齐 ADLAR影响ADC转换结果在ADC数据寄存器中的存放形式。ADLAR 置位时转换结果为左对齐,否则为右对齐。ADLAR 的改变将立即影响 ADC 数据寄存器的内容,不论是否有转换正在进行。关于这一位的完 整描述请见 P207“ADC 数据寄存器 – ADCL 及 ADCH” 。 • Bits 4:0 – MUX4:0: 模拟通道与增益选择位 通过这几位的设置,可以对连接到ADC 的模拟输入进行选择。也 可对差分通道增益进行选择。细节见Table 2。如果在转换过程中改 AVR ATmega16 AD 转换程序 第 7 页 共 15 页 变这几位的值,那么只有到转换结束(ADCSRA 寄存器的ADIF 置位) 后新的设置才有效。 Table 2. 输入通道与增益选择 MUX4.0 单端输入 正差分输入 负差分输入 增益 00000 ADC0 N/A 00001 ADC1 00010 ADC2 00011 ADC3 00100 ADC4 00101 ADC5 00110 ADC6 00111 ADC7 01000 N/A ADC0 ADC0 10X 01001 ADC1 ADC0 200X 01010(1) ADC0 ADC0 200X 01011(1) ADC1 ADC0 10X 01100 ADC2 ADC2 10X 01101 ADC3 ADC2 200X 01110(1) ADC2 ADC2 200X 01111(1) ADC3 ADC2 1X 10000 ADC0 ADC1 1X 10001 ADC1 ADC1 1X 10010 ADC2 ADC1 1X 10011 ADC3 ADC1 1X 10100 ADC4 ADC1 1X 10101 ADC5 ADC1 1X 10110 ADC6 ADC1 1X 10111 ADC7 ADC1 1X 11000 ADC0 ADC2 1X 11001 ADC1 ADC2 1X 11010 ADC2 ADC2 1X 11011 ADC3 ADC2 1X 11100 ADC4 ADC2 1X 11101 ADC5 ADC2 1X 11101 ADC5 ADC2 1X 11110 1.22 V(VBG) N/A 11111 0 V(GND) Note: 1. PDIP 封装器件的差分输入通道未检测。该特性保证TQFP 与MLF 封装器件正常工 作。 AVR ATmega16 AD 转换程序 第 8 页 共 15 页 (2) ADC 控制和状态寄存器A -ADCSRA Bit 7 6 5 4 3 2 1 0 ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 ADCSRA 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 • Bit 7 – ADEN: ADC 使能 ADEN置位即启动ADC,否则ADC功能关闭。在转换过程中关闭ADC 将立即中止正在进行的转换。 • Bit 6 – ADSC: ADC 开始转换 在单次转换模式下,ADSC 置位将启动一次ADC 转换。在连续转 换模式下,ADSC 置位将启动首次转换。第一次转换( 在ADC 启动之 后置位ADSC,或者在使能ADC 的同时置位ADSC) 需要25 个ADC 时钟 周期,而不是正常情况下的13 个。第一次转换执行ADC初始化的工作。 在转换进行过程中读取ADSC 的返回值为"1”,直到转换结束。ADSC 清零不产生任何动作。 • Bit 5 – ADATE: ADC 自动触发使能 ADATE置位将启动ADC自动触发功能。触发信号的上跳沿启动ADC 转换。触发信号源通过SFIOR 寄存器的ADC 触发信号源选择位ADTS 设置。 • Bit 4 – ADIF: ADC 中断标志 在ADC 转换结束,且数据寄存器被更新后, ADIF 置位。如果ADIE 及SREG 中的全局中断使能位I 也置位,ADC 转换结束中断服务程序 即得以执行,同时ADIF 硬件清零。此外,还可以通过向此标志写1 来 清ADIF。要注意的是,如果对ADCSRA 进行读-修改-写操作,那么 AVR ATmega16 AD 转换程序 第 9 页 共 15 页 待处理的中断会被禁止。这也适用于SBI 及CBI 指令。 • Bit 3 – ADIE: ADC 中断使能 若ADIE 及SREG 的位I 置位, ADC 转换结束中断即被使能。 • Bits 2:0 – ADPS2:0: ADC 预分频器选择位 由这几位来确定XTAL 与ADC 输入时钟之间的分频因子。 Table 3. ADC 预分频选择 ADPS2 ADPS1 ADPS0 分频因子 0 0 0 2 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128 (3) ADC 数据寄存器- ADCL 及ADCH ① ADLAR = 0 数据右对齐 Bit 15 14 13 12 11 10 9 8 - - - - - - ADC9 ADC8 ADCH ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 ADCL 7 6 5 4 3 2 1 0 读/写 R R R R R R R R R R R R R R R R 初始值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ② ADLAR = 1 数据左对齐 Bit 15 14 13 12 11 10 9 8 ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADCH ADC1 ADC0 - - - - - - ADCL 7 6 5 4 3 2 1 0 读/写 R R R R R R R R R R R R R R R R 初始值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 AVR ATmega16 AD 转换程序 第 10 页 共 15 页 ADC 转换结束后,转换结果存于这两个寄存器之中。如果采用差 分通道,结果由2 的补码形式表示。 读取ADCL 之后,ADC 数据寄存器一直要等到ADCH 也被读出才可 以进行数据更新。因此,如果转换结果为左对齐,且要求的精度不高 于8 比特,那么仅需读取ADCH 就足够了。否则必须先读出ADCL 再读 ADCH。 ADMUX 寄存器的 ADLAR 及MUXn 会影响转换结果在数据寄存器 中的表示方式。如果ADLAR 为1,那么结果为左对齐;反之( 系统缺 省设置),结果为右对齐。 • ADC9:0: ADC 转换结果 ADC 转换的结果,细节见P203“ADC 转换结果” 。 (4) 特殊功能IO 寄存器- SFIOR Bit 7 6 5 4 3 2 1 0 ADTS2 ADTS1 ADTS0 - ACME PUD PSR2 PSR10 SFIOR 读/写 R/W R/W R/W R R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 • Bit 7:5 – ADTS2:0: ADC 自动触发源 若ADCSRA 寄存器的ADATE 置位,ADTS 的值将确定触发ADC 转换 的触发源;否则,ADTS的设置没有意义。被选中的中断标志在其上升 沿触发ADC转换。从一个中断标志清零的触发源切换到中断标志置位 的触发源会使触发信号产生一个上升沿。如果此时ADCSRA 寄存器的 ADEN 为1,ADC 转换即被启动。切换到连续运行模式(ADTS[2:0]=0) 时,即使ADC 中断标志已经置位也不会产生触发事件。 AVR ATmega16 AD 转换程序 第 11 页 共 15 页 Table 4. ADC 自动触发源选择 AFTS2 ADTS1 ADTS0 触发源 0 0 0 连续转换模式 0 0 1 模拟比较源 0 1 0 外部中断请求 0 0 1 1 定时器/计数器 0 比较匹配 1 0 0 定时器/计数器 0 溢出 1 0 1 定时器/计数器比较匹配 B 1 1 0 定时器/计数器 1 溢出 1 11 1 定时器/计数器 1 捕捉事件 • Bit 4 – Res: 保留位 这一位保留。为了与以后的器件相兼容,在写SFIOR 时这一位应 写0。 四、 PROTUES 仿真电路图 AVR ATmega16 AD 转换程序 第 12 页 共 15 页 五、 程序源码 /********************************************************** 实验名称:AVR ATmega16 AD转换实验 日期:2011.02.18 作者:Kukulee 芯片类型:ATMEGA16 16PU 时钟频率:8MHZ 编译环境:ICCAVR Version 7.14C 功能:在LCD上显示AD转换结果 **********************************************************/ #include #include #define uchar unsigned char #define uint unsigned int #define DATA_PORT PORTD #define DATA_DDR DDRD #define CTRL_PORT PORTC #define CTRL_DDR DDRC #pragma data:code const uchar table[]="0123456789"; void delay(uint ms) //延迟函数 { uint i,j; for (i=0;i
本文档为【AVR_ATmega16_AD转换】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_708652
暂无简介~
格式:pdf
大小:958KB
软件:PDF阅读器
页数:15
分类:互联网
上传时间:2011-05-26
浏览量:28