已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章 模拟量输入及处理在很多应用场合需要测量模拟量,例如,在空调控制中需要测量温度。模拟量是连续变化的量,而计算机作运算处理时采用的是二进制表示的数字量。为了让计算机知道模拟量的大小,需要用一个称为模/数转换的装置,简称A/D转换,也称ADC。ATmega16中嵌入了一个8路10位逐次比较的A/D转换电路。转换后的数字量为10位二进制数,数字范围为01023。7.1 ATmega16的模拟转换技术ATmega16中的8路10位的A/D转换电路由多路切换开关、放大器、10位DAC转换、及转换逻辑电路、控制寄存器等组成。与A/D转换有关的引脚有模拟地(AGND)、模拟电源(AVCC)、参考电压(AREF)、模拟量输入通道引脚PA0PA7,引脚名为ADC0ADC7。应用电路中所有的模拟地应集中在一起后,一个单点与数字地连接。AVcc与Vcc差值应小于0.3V,可通过RC滤波网络与Vcc连接;参考电压AREF的电压范围在AGNDAVcc之间,AREF的大小决定了转换电压的范围。8个模拟输入通道用的是PA口,它是一个双功能口,既可以作普通的I/O接口也可以作模拟量输入口。可以用其中的几路作模拟量输入口,其它几路作一般的I/O口。模拟量输入引脚上电压的范围在AGNDAREF之间是有效的。为了使A/D转换正常工作,系统配置了5个专用寄存器ADMUX、ADCSR、ADCL、ADCH、SFIOR,在C语言应用中它们由头文件mega16.h定义为特殊变量,变量名与寄存器名相同。下面分别介绍如下: ADC数据寄存器ADCL和ADCH这是两个8位的寄存器,用来存放AD转换的结果。AD转换的结果是10位的,有两种存放方式,一种是结果的低8位放在ADCL中,高2位放在ADCH的低2位,其它6位为0,称为右对齐格式。另一种是结果的高8位放在ADCH中,低2位放在ADCL的高2位,其它6位为0,称为左对齐格式。在C语言编程时,头文件mege16.h把这两个字节合并为一个字ADCW,专门用来存放转换结果。右对齐:ADLAR=0时位: 15 14 13 12 11 10 9 8000000ADC9ADC8 ADC7ADC6ADC5ADC4ADC3ADC2ADC1ADC0位: 7 6 5 4 3 2 1 0左对齐:ADLAR=1时位: 15 14 13 12 11 10 9 8ADC9ADC8 ADC7ADC6ADC5ADC4ADC3ADC2ADC1ADC0000000位: 7 6 5 4 3 2 1 0在读取结果时,应先读ADCL中的值,后读ADCH中的值。 多路转换选择寄存器ADMUX位 7 6 5 4 3 2 1 0REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0位名称读/写 r/w r/w r/w r/w r/w r/w r/w r/w 初始值 0 0 0 0 0 0 0 0 位7-6(REFS1、REFS0):参考电压选择位其功能选择如表7-1所示。表7-1 ADC参考电压选择REFS1REFS0电压参考选择00从AREF引脚输入参考电压,内部参考关闭01AVCC电压作参考电压,AREF引脚接电容10保留11内部2.56V电压作参考电压,AREF引脚接电容从表7-1,我们可知参考电压不是固定的,而是可选择的。位5(ADLAR):输出转换数据的格式选择位此位设为0时,为右对齐格式。此位设为1时,为左对齐格式。位4(MUX4MUX0):模拟通道和增益选择位这些位的功能如下表7-2。表7-2 ADC通道与增益选择MUX4-MUX0单端输入模式差动输入正端差动输入负端放大倍数00000ADC0100001ADC1100010ADC2100011ADC3100100ADC4100101ADC5100110ADC6100111ADC7101000ADC0ADC01001001ADC1ADC01001010ADC0ADC020001011ADC1ADC020001100ADC2ADC21001101ADC3ADC21001110ADC2ADC220001111ADC3ADC220010000ADC0ADC1110001ADC1ADC1110010ADC2ADC1110011ADC3ADC1110100ADC4ADC1110101ADC5ADC1110110ADC6ADC1110111ADC7ADC1111000ADC0ADC2111001ADC1ADC2111010ADC2ADC2111011ADC3ADC2111100ADC4ADC2111101ADC5ADC21111101.22V 111110V MUX4MUX0在0000000111范围内设置时,选择的是单端输入模式的相应通道,模拟信号接在输入通道与地之间,放大倍数为1。MUX4MUX0在0100011101范围内设置时,选择的是差动输入模式的相应通道,模拟信号接在表中所示的两个输入通道之间,放大倍数如表中所示。MUX4MUX0设置为11111时测量的是0V电压的值,用来校定零点。MUX4MUX0设置为11110时测量的是内部的1.22V电压的值,用来校定量程。例如,通道设置为11110时的转换值为X1,通道设置为11111时的转换值为X0,ADC0单端输入通道(通道设置为00000)的转换值为X,则ADC0的实际输入电压值应为:Y=1.22(XX0)(X1X0)。如果测量的是差动电压,则实际输入电压值应为:Y=1.22X(X1-X0)F。其中F为放大倍数。 ADC控制和状态寄存器AADCSRA位 7 6 5 4 3 2 1 0ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0位名称读/写 r/w r/w r/w r/w r/w r/w r/w r/w 初始值 0 0 0 0 0 0 0 0位7(ADEN):ADC使能通过向这一位写1,可使用ADC,PA口可作模拟量输入口;写0将关闭ADC,A口只能作开关量输入输出口。位6(ADSC):ADC开始转换在单一转换模式下,选择通道后,将此位写1,ADC开始转换。在转换过程中,该位保持为1,当转换结束时,该位变为0。在ADC自动触发允许情况下且SFIOR选择自由运行模式,该位写0,开始首次转换。如果在转换过程中,对该位写入1,则停止自由运行模式。在单一转换模式下,对该位写0无意义。在ADC自动触发允许情况下且SFIOR选择非自由运行模式,ADSC不起作用。由所选触发信号的上升沿启动转换。位5ADATE:ADC自动触发允许选择当设置该位为1时,允许自动触发转换。寄存器SFIOR所选择的触发源的上升沿启动转换。 每完成一次转换,ADCW更新一次数据。数据更新后会产生中断,中断程序可以读走ADCW中的数据。位4(ADIF):ADC中断标志当某位转换完毕,并对ADCW更新后,该位置1。如果ADC中断是开放的,这时会产生中断。在执行了中断程序返回时,ADIF由硬件清除。也可以向ADIF位写1来清除。位3(ADIE):ADC中断使能当ADIE位设置为1时,且总中断开关I为1时,ADC转换完成,中断被激活。位2-0(ADPS2-ADPS0):ADC预分频器选择位由于A/D转换器需要一个节拍信号控制转换,节拍信号的频率为50200kHZ,而单片机的晶振频率高于节拍频率,所以要把晶振频率分频后才能作为节拍频率。分频系数如下表7-3。表7-3 ADC预分频选择ADPS2ADPS1ADPS0分频数ADPS2ADPS1ADPS0分频数0002100160012101320104110640118111128 特定功能寄存器SFIOR位 7 6 5 4 3 2 1 0ADTS2 ADTS1 ADTS0 ADHSM ACME PUD PSR2 PSR10位名称读/写 w r/w r/w r/w r/w r/w r/w r/w 初始值 0 0 0 0 0 0 0 0位7-5(ADTS2-ADTS0):A/D转换自动触发源当ADCSR变量中的ADATE位设为1时,ADTS2-ADTS0位设置成不同的值,可以选择相应的触发源,启动A/D转换。见下表7-4。表7-4 ADC自动触发源选择ADTS2ADTS1ADTS0触发源000自由转换模式001模拟比较器010外部中断0011定时器/计数器0比较匹配100定时器/计数器0溢出101定时器/计数器1比较匹配B110定时器/计数器1溢出111定时器/计数器1输入捕获位4(ADHSM):A/D转换高速模式当该位设为1时,A/D转换采用高速转换模式,此时芯片的功耗较大。其它几位与ADC转换无关。7.2 模拟量测量ADC转换过程一般为:选择通道和转换频率启动转换转换结束检查读取转换数据下面通过例子说明ADC转换的使用方法。硬件电路如图7-1所示。AREFPA的8个输入通道分别接在8个分压电阻上。PA.0通道的电压变化随移动电位器的中心抽头的改变,在05V范围内变化,其他通道的电压取05V的分压。AREF端没有接参考电压。由于内部电压2.56V小于输入电压。所以参考电压使用AVcc例一:采用查询方式转换PA6引脚上的电压。假定晶振频率为4MHZ这是单通道转换,并且不采用中断。则ADCSR的相应位为:ADEN=1:使用ADC转换器ADATE=0:非自动触发模式ADIE=0:不使用中断选64分频,则ADPS2ADPS0为110所以ADCSRA的初值为10000110=0x86。REFS1=0,REFS0=1:采用Avcc作参考电压 ADLAR=0:右对齐格式输出由于要选择PA6引脚作为输入。所以ADMUX的值为01000110=0x46程序清单如下:#include “mega16.h”#include “delay.h”void main(void)int x; /x存放转换结果 ADCSRA=0x86; /定义转换模式 ADMUX=0x46; /选择转换通道 ADCSRA.6=1; /启动转换while(!ADCSR.4); /等待转换结束x=ADCW; /保存转换结果7.3 模拟信号处理在实际应用中,A/D转换的结果还要进行滤波和量程变换处理。7.3.1 信号滤波在模拟量测量中,因为有噪音干扰和其他干扰,转换的数据会出现跳变。使显示的数据不稳定。为了消除干扰,在硬件通道中要加入滤波电路,在软件中需要采用滤波技术消除干扰。滤波的方法有很多,这里介绍两种常见的滤波方法。平均滤波:对一个参数进行连续的多次采样,然后取其平均值。因为是在很短的时间内进行的多次采样,对消除高频干扰是较有效的。一阶滞后滤波:设上个采样周期的滤波结果值为Yn-1,本次采样值为Xn,滤波系数为a,0a1,本次采样后滤波结果输出值为Yn,则YnaYn-1(1a)Xn。a越大,滤波作用越强。7.3.2 量程变换在前面介绍的内容中,我们可以发现,转换的数字与输入的被测量不相同,如果直接显示转换值,将与被测量的信号对应不上,要进行量程变换。对于一般的线性仪表而言,量程变换的公式为式中:A 0一次测量仪表的下限; A m一次测量仪表的上限; A X实际测量值; N 0仪表下限所对应的转换值(采样值,数字量); N m仪表上限所对应的转换值(采样值,数字量); N X测量值所对应的转换值(采样值,数字量)。例如:用某一通道测量温度,当温度为0时,其电压值为1V;温度为100度时,电压值为5V。而通道经校准,在5V时的转换值为1000,1V时的转换值为200。为了准确的显示温度值,应按下式进行变换:Y=100(X200)/(1000200)=100(X200)800式中,X为AD转换值,Y为显示值,上式按线性比例推算而出。下面就一个模拟量的测量显示来说明模拟量的测量。例二:测量与显示PA0引脚上的电压。输入电压由电位器取5V的分压。电压变化在05V之间,电压大小可滑动电位器来改变。采用8次平均滤波和一阶滞后滤波。量程变换为:Y=KX。程序清单:#include “mega16.h”#include “delay.h”#include “math.h”#include c:cvavrp_dkjspi_7219.cfloat lvboxishu,bilixishu; / 滤波系数和比例系数int dianya; / 电压值/ *通道转换函数 */int zhuanhuan(char tongdaohao) / ADC Clock frequency: 62.500 kHzADCSRA=0x86; / 定义ADC转换模式为单一非中断方式 ADMUX=0x40+tongdaohao; / 选择转换通道、AVCC作参考电压 ADCSRA.6=1; / 启动转换 while(!ADCSRA.4); / 等待转换结束 ADCSRA|=0x10; /清除中断标志,使用查询方式时是必须的一步 return ADCW ; / 保存转换结果void main(void)int x,y; char k,i;spi_7219c(); / 显示初始化dianya=0; / 电压初值i=8; / 平均测量次数bilixishu=5000.0/1023.0; /* 比例系数,根据实际情况修改, 此处将量程转换系数扩大了1000倍 */lvboxishu=0.3; / 滤波系数,可根据情况调整while(1) / 巡回测量x=0;for(k=0;ki;k+) x=x+zhuanhuan(0); / 求8次测量的和x=x/i; / 取i次测量的平均值y=bilixishu*x; / 量程变换dianya=lvboxishu*dianya+(1-lvboxishu)*y ; / 一阶滤波xunce_7219(0,dianya,4); / 显示通道号、电压值、保留3位小数delay_ms(1000); / 延时1秒其中xunce_7219(char j,int x,char k)为实验装置开发者提供的显示子函数.程序清单见附录2。7.4 多参数巡回检测前面介绍了一个参数的测量、处理、及显示。但在工程应用中,往往需要对多个参数进行检测和处理。以8个参数的测量为例说明多参数的测量、处理及显示。硬件电路如图7-1所示。PA的8个输入通道分别接在8个分压电阻上。PA0通道的电压变化随滑动电位器的中心抽头的改变,在05V范围内变化,其他通道的电压取05V的分压。假定每个通道都经过测量、平均滤波、一阶滤波、量程变换、显示等处理。并且每个通道的平均滤波次数和一阶滤波系数都不同。每一秒钟处理一个通道。用字符型数组cishu8的8个元素代表8个通道的采样次数。用实型数组lvbo8的8个元素代表8个通道的滤波系数。用整型数组shangxian8的8个元素代表8个参数的上限,用整型数组xiaxian8的8个元素代表8个参数的下限。用整型数组canshu8的8个元素代表每个通道处理后的结果。则第i个通道的处理程序如下:int celiang(char i)int x,y;x=0; for(j=0;jcishui;j+) x=x+zhuanhuan(i);x=x/cishui; / 测量n次,并求平均值y=x*(shangxiani-xiaxiani)/1000+xiaxiani; / 量程变换canshui=lvboi*canshui+(1-lvboi)*y; / 一阶滤波 上述参数(cishu8、lvbo8、shangxian8、xiaxian8、canshu8)都定义为全局变量,且假定电压为0V时转换码为0、5V时转换码为1000。为显示不同的参数,在显示参数的同时,要显示参数的编号,显示格式为:前两位显示参数编号,第三位显示参数的符号,后五位显示参数的大小。可按下述函数调用方法:xunce_7219(i ,canshui,dian)其中dian为字符型变量,大小为07,表示小数点位置。本例测量单位为电压V、dian=4。主函数如下:void main(void)int k; io_init(); / i/o初始化 spi_7219c(); / 显示初始化 while(1) for(k=0;k8;k+) / 每秒处理一个通道 celiang(k); / 通道测量与处理 xunce(k,canshuk,4); / 通道参数显示 delay_ms(1000); / 延时1秒 总程序清单中要增加包含文件和全局变量的定义。练习:1、 编写一程序采用查询方式测量模拟通道2的电压值,要求采用一阶滤
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 注册会计师审计中审计抽样统计抽样非统计抽样的选择标准
- 材料作文:许多人明明懂得真正的成长与突破从来都是日复一日的沉淀厚积薄发这一过程平凡而艰辛
- 某玻璃厂熔炉操作细则制度
- 木材加工厂木材加工流程制度
- 2026陕西汉中市精神病医院招聘5人备考题库及完整答案详解
- 2026北京大学生命科学学院招聘动物实验科研助理1人备考题库附参考答案详解(研优卷)
- 2025-2026福建厦门市翔安区舫山小学非在编合同教师招聘1人备考题库带答案详解(综合卷)
- 2026山东济南市第二妇幼保健院招聘卫生高级人才(控制总量)2人备考题库含答案详解(培优b卷)
- 某钢铁厂原料运输规范细则
- 2026内蒙古康远工程建设监理有限责任公司成熟电力工程监理人才招聘67人备考题库带答案详解(典型题)
- 2026天津市管道工程集团有限公司人才引进招聘3人笔试模拟试题及答案解析
- 一年级数学10以内加减法计算专项练习题(每日一练共18份)
- 2026陕西西安电子科技大学期刊中心编辑招聘2人备考题库附答案详解(考试直接用)
- 《特种设备使用管理规则 TSG08-2026》解读
- 医院工程项目监理大纲
- 农场孩子活动策划方案(3篇)
- 医疗器械生产质量管理规范自查表(2026版)
- 单纯性肾囊肿诊疗指南(2025年版)
- 中国阿尔茨海默病痴呆诊疗指南(2025年版)
- 中西医结合治疗肺癌
- 2026年国药数字科技(北京)有限公司招聘备考题库及参考答案详解一套
评论
0/150
提交评论