您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > AVR模拟比较器和ADC接口实例
基于AVR的单片嵌入式系统原理与实践应用模拟比较器和ADC接口模拟比较器和模数转换ADC是单片机内部最常见的两种支持模拟信号输入的功能接口。大部分AVR都具备这两种类型的接口。本章将以ATmage16芯片为例,介绍这两种模拟接口的原理和应用设计方法。10.1模拟比较器ATmega16的模拟比较器可以实现对两个输入端:正极AIN0和负极AIN1(对应于ATmage16的引脚PB2、PB3)的模拟输入电压进行比较。当AIN0上的电压高于AIN1的电压时,模拟比较器输出ACO被设为“1”。比较器的输出还可以被设置作为定时计数器1输入捕获功能的触发信号。此外,比较器的输出可以触发一个独立的模拟比较器中断。用户可以选择使用比较器输出的上升沿、下降沿或事件触发作为模拟比较器中断的触发信号。比较器的方框图和周围电路如图10-1所示。图10-1模拟比较器的方框图10.1.1与模拟比较器相关的寄存器和标志位与模拟比较器相关的寄存器是SFIOR、ACSR。用户通过这两个寄存器的相关位实现对模拟比较器的设置和控制。1)特殊功能IO寄存器—SFIOR华东师范大学电子系马潮10-1位76第10章模拟比较器和ADC接口543210$30($0050)ADTS2ADTS1-ADTS0--ACMEPUDPSR2PSR10SFIOR读/写R/WR/WR/WRR/WR/WR/WR/W复位值00000000寄存器SFIOR中的第3位ACME为模拟比较器多路使能控制位。当该位为逻辑“1”,同时模数转换(ADC)功能被关闭(ADCSRA寄存器中的ADEN使能位为“0”)时,允许使用ADC多路复用器选择ADC的模拟输入端口作为模拟比较器反向端的输入信号源。当该位为零时,AIN1引脚的信号将加到模拟比较器反向端。2)模拟比较器控制和状态寄存器—ACSR位76543210$08($0028)ACDACBGACOACIACIEACICACIS1ACIS0ACSR读/写R/WR/WRR/WR/WR/WR/WR/W复位值00N/A00000ACSR是模拟比较器主要的控制寄存器,其中各个位的作用如下:位7—ACD:模拟比较器禁止当该位设为“1”时,提供给模拟比较器的电源关闭。该位可以在任何时候被置位,从而关闭模拟比较器。在MCU闲置模式,且无需将模拟比较器作为唤醒源的情况下,关闭模拟比较器可以减少电源的消耗。要改变ACD位的设置时,应该先将寄存器ACSR中的ACIE位清零,把模拟比较器中断禁止掉。否则,在改变ADC位设置时会产生一个中断。位6—ACBG:模拟比较器的能隙参考源选择当该位为“1”时,芯片内部一个固定的能隙(Bandgap)参考电源1.22V将代替AIN0的输入,作为模拟比较器的正极输入端。当该位被清零时,AIN0的输入仍然作为模拟比较器的正极输入端。位5—ACO:模拟比较器输出模拟比较器的输出信号经过同步处理后直接与ACO相连。由于经过同步处理,ACO与模拟比较器的输出之间,会有1~2个时钟的延时。位4—ACI:模拟比较器中断标志位当模拟比较器的输出事件符合中断触发条件时(中断触发条件由ACIS1和ACIS0定义),ACI由硬件置“1”。若ACIE位置“1”,且状态寄存器中的I位为“1”时,MCU响应模拟比较器中断。当转入模拟比较中断处理向量时,ACI被硬件自动清空。此外,也可使用软件方式清零ACI:对ACI标志位写入逻辑“1”来清零该位。位3—ACIE:模拟比较器中断允许当ACIE位设为“1”,且状态寄存器中的I位被设为“1”时,允许模拟比较器中断触发。当ACIE被清“0”时,模拟比较器中断被禁止。位2—ACIC:模拟比较器输入捕获允许当该位设置为“1”时,定时计数器1的输入捕获功能将由模拟比较器的输出来触发。在这种情况下,模拟比较器的输出直接连到输入捕获前端逻辑电路,从而能利用定时器/计数器1输入捕获中断的噪声消除和边缘选择的特性。当该位被清零时,模拟比较器和输入捕获功能之间没有联系。要使能比较器触发定时器/计数器1的输入捕获中断,定时器中断屏蔽寄存器(TIMSK)中的TICIE1位必须被设置。位1、0—ACIS1、ACIS0:模拟比较器中断模式选择这2个位决定哪种模拟比较器的输出事件可以触发模拟比较器的中断。不同的设置参见华东师范大学电子系马潮10-2表10-1。基于AVR的单片嵌入式系统原理与实践应用表10-1模拟比较器中断模式选择ACIS10011ACIS00101中断模式比较器输出的上升沿和下降沿都触发中断保留比较器输出的下降沿触发中断比较器输出的上升沿触发中断注意:当要改变ACIS1、ACIS0时,必须先清除ACSR寄存器中的中断允许位,以禁止模拟比较器中断;否则,当这些位被改变时,会发生中断。3)模拟比较器的多路输入用户可以选择ADC7..0引脚中的任一路的模拟信号代替AIN1引脚,作为模拟比较器的反向输入端。模数转换的ADC多路复用器提供这种选择的能力,但此时必须关闭芯片的ADC功能。当模拟比较器的多路选择使能位(SFIOR中的ACME位)置“1”,同时ADC被关闭时(ADCSRA中的ADEN位置“0”),由寄存器ADMUX中的MUX[2:0]位所确定的引脚将代替AIN1作为模拟比较器的反向输入端,如表10-2所示。如果ACME被清零,或ADEN被置1,则AIN1仍将为模拟比较器的反向输入端。表10-2模拟比较器多路输入选择ACME0111111111ADENx100000000MUX2..0xxxxxx000001010011100101110111模拟比较器反向输入端AIN1AIN1ADC0ADC1ADC2ADC3ADC4ADC5ADC6ADC710.1.2模拟比较器的应用设计模拟比较器的基本应用就是对两个输入端(AIN0、AIN1)的模拟电压进行比较,例如对系统电源电压的监测等。例10.1系统电源电压的监测1)硬件电路在一些使用电池供电的便携和手持式系统中,系统需要对电源电压进行监测,一旦电压低于某个值时,就要给出警告,提示用户更换电池或对电池进行充电。图10-2是一个简单的电源电压监测电路。电源电压经过R1、R2分压后,作为监测电压输入端与PB3(AIN1)连接。模拟比较器的AIN0采用芯片内部1.22V的固定能隙(Bandgap)参考电源作为比较参考电压。假定系统正常工作电压范围为3V-5V,当电源电压低于3.6V时就要给出低电压提示。图中使用PB2控制一个LED发光作为低电压提示。当电源电压高于3.7V时,PB3(AIN1)引华东师范大学电子系马潮10-3第10章模拟比较器和ADC接口脚的电压大于1.22V,比AIN0的1.22V高,此时寄存器ACSR中的AC0为“0”。而当电源电压低于3.6V时,PB3(AIN1)引脚的电压降到1.2V以下,比AIN0的1.22V低,此时寄存器ACSR中的AC0为“1”。因此,AC0标志位反映了电压高低的情况。图10-2系统电源电压监测电路2)软件设计下面给出一个简单的电源监测程序,程序循环检测AC0的值,当PB3的电压低于1.22V时,PB2输出低电平,LED发光,表示低电压报警提示。/*********************************************Filename:demo_10_1.cChiptype:ATmega16Programtype:ApplicationClockfrequency:4.000000MHzMemorymodel:SmallExternalSRAMsize:0DataStacksize:256**********************************************/#includemega16.hvoidmain(void){PORTB.2=1;//PB2设置为输出,控制LEDDDRB.2=1;//模拟比较器初始化:ACSR=0x40;//允许模拟比较器,AIN0设置为内部Bandgap参考电压1.22Vwhile(1)//循环检测AC0位{华东师范大学电子系马潮10-4基于AVR的单片嵌入式系统原理与实践应用if(ACSR.5)PORTB.2=0;//AIN0AIN1elsePORTB.2=1;//AIN0AIN1,低电压报警}}在上面简单程序中使用了模拟比较器的功能,实现了对电源电压的监测。在AVR-51多功能实验板上模拟时,PB3(AIN1)的输入电压可以通过板上D区获得。用连接线直接将PB3与JD1连接,通过调节电位器WD1的阻值,观察LED的现象。当LED刚发光时,测量JD1的电压在2.2V左右。3)模拟比较器使用注意点芯片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了。例10.2利用模拟比较器构成ADC更巧妙的例子是可以利用模拟比较器和一些简单的外围电路,设计构成一个ADC转换系统。感兴趣的读者可以参看本章提供的参考文献avr_app_400.pdf。10.2模数转换器ADC外部的模拟信号量需要转变成数字量才能进一步的由MCU进行处理。ATmega16内部集成有一个10位逐次比较(successiveapproximation)ADC电路。因此使用AVR可以非常方便的处理输入的模拟信号量。ATmega16的ADC与一个8通道的模拟多路选择器连接,能够对以PORTA作为ADC输入引脚的8路单端模拟输入电压进行采样,单端电压输入以0V(GND)为参考。另外还支持16种差分电压输入组合,其中2种差分输入方式(ADC1,ADC0和ACD3,ADC2)带有可编程增益放大器,能在A/D转换前对差分输入电压进行0dB(1×\u65289X,20dB(10×\u65289X或46dB(200×\u65289X的放大。还有七种差分输入方式的模拟输入通道共用一个负极(ADC1),此时其它任意一个ADC引脚都可作为相应的正极。若增益为1×\u25110X10×\u65292X则可获得8位的精度。如果增益为200×\u65292X那么转换精度为7位。10.2.110位ADC结构AVR的模数转换器ADC具有下列特点:10位精度;0.5LSB积分非线形误差±2LSB的绝对精度;13µs~260µs的转换时间;华东师范大学电子系马潮10-5第10章模拟比较器和ADC接口在最大精度下可达到每秒15kSPS的采样速率;8路可选的单端输入通道;7路差分输入通道;2路差分输入通道带有可选的10×\u21644X200×\u22686X益;ADC转换结果的读取可设置为左端对齐(LEFTADJUSTMENT);ADC的电压输入范围0~Vcc;可选择的内部2.56V的ADC参考电压源;自由连续转换模式和单次转换模式;ADC自动转换触发模式选择;ADC转换完成中断;休眠模式下的噪声抑制器(NOISECANCELER)。AVR的ADC功能单元由独立的专用模拟电源引脚AVcc供电。AVcc和Vcc的电压差别不能大于±0.3V。ADC转换的参考电源可采用芯片内部的2.56V参考电源,或采用AVcc,也可使用外部参考电源。使用外部参考电源时,外部参考电源由引脚ARFE接入。使用内部电压参考源时,可以通过在AREF引脚外部并接一个电容来提高ADC的抗噪性能。ADC功能单元包括采样保持电路,以确保输入电压在ADC转换过程中保持恒定。ADC方框图如图10
本文标题:AVR模拟比较器和ADC接口实例
链接地址:https://www.777doc.com/doc-3224629 .html