AVR模拟比较器使用方法.docx
- 文档编号:25414042
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:60
- 大小:237.76KB
AVR模拟比较器使用方法.docx
《AVR模拟比较器使用方法.docx》由会员分享,可在线阅读,更多相关《AVR模拟比较器使用方法.docx(60页珍藏版)》请在冰豆网上搜索。
AVR模拟比较器使用方法
基于AVR的单片嵌入式系统原理与实践应用
模拟比较器和ADC接口
模拟比较器和模数转换ADC是单片机内部最常见的两种支持模拟信号输入的功能接
口。
大部分AVR都具备这两种类型的接口。
本章将以ATmage16芯片为例,介绍这两种模
拟接口的原理和应用设计方法。
软件设计
下面是实现简易电压的系统程序代码。
/*****************************************************
Filename
:
demo_10_3.c
Chiptype:
ATmega16L
华东师范大学电子系马潮10-13
第10章模拟比较器和ADC接口
Programtype:
Application
Clockfrequency:
4.000000MHz
Memorymodel:
Small
ExternalSRAMsize:
0
DataStacksize:
256
*****************************************************/
#include
flashcharled_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
flashcharposition[6]={0xfe,0xfd,0xfb,0xf7};
unsignedchardis_buff[4]={0,0,0,0},posit;
bittime_2ms_ok;
//ADC电压值送显示缓冲区函数
voidadc_to_disbuffer(unsignedintadc)
{
chari;
for(i=0;i<=3;i++)
{
dis_buff[i]=adc%10;
adc/=10;
}
}
//Timer0比较匹配中断服务
interrupt[TIM0_COMP]voidtimer0_comp_isr(void)
{
time_2ms_ok=1;
}
//ADC转换完成中断服务
interrupt[ADC_INT]voidadc_isr(void)
{
unsignedintadc_data,adc_v;
adc_data=ADCW;//读取ADC置换结果
adc_v=(unsignedlong)adc_data*5000/1024;//换算成电压值
adc_to_disbuffer(adc_v);
}
voiddisplay(void)//4位LED数码管动态扫描函数
{
PORTA|=0x0f;
华东师范大学电子系马潮10-14
}
基于AVR的单片嵌入式系统原理与实践应用
PORTC=led_7[dis_buff[posit]];
if(posit==3)PORTC|=0x80;
PORTA&=position[posit];
if(++posit>=4)posit=0;
//系统主程序
voidmain(void)
{
DDRA=0x0f;//!
!
见以下说明
PORTA=0x0f;//!
!
见以下说明
DDRC=0xff;//LED显示控制I/O端口初始化
PORTC=0x00;
//T/C0初始化
TCCR0=0x0B;//内部时钟,64分频(4M/64=62.5KHz),CTC模式
TCNT0=0x00;
OCR0=0x7C;//OCR0=0x7C(124),(124+1)/62.5=2ms
TIMSK=0x02;//允许T/C0比较中断
//ADC初始化
ADMUX=0x47;//参考电源AVcc、ADC7单端输入
SFIOR&=0x1F;
SFIOR|=0x60;//选择T/C0比较匹配中断为ADC触发源
ADCSRA=0xAD;//ADC允许、自动触发转换、ADC转换中断允许、ADCclk=125Kz
#asm("sei")//开放全局中断
while
(1)
{
if(time_2ms_ok)
{
display();//LED扫描显示
time_2ms_ok=0;
}
}
}
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
位
7
6
第10章模拟比较器和ADC接口
543
2
10
$30($0050)ADTS2ADTS1-ADTS0-
-
ACME
PUD
PSR2
PSR10SFIOR
读/写R/WR/WR/W
RR/WR/WR/W
R/W
复位值
0
0
00
0
000
寄存器SFIOR中的第3位ACME为模拟比较器多路使能控制位。
当该位为逻辑“1”,同
时模数转换(ADC)功能被关闭(ADCSRA寄存器中的ADEN使能位为“0”)时,允许使用ADC
多路复用器选择ADC的模拟输入端口作为模拟比较器反向端的输入信号源。
当该位为零时,
AIN1引脚的信号将加到模拟比较器反向端。
2)模拟比较器控制和状态寄存器—ACSR
位
7
6
5
4
32
1
0
$08($0028)ACDACBGACOACIACIEACICACIS1ACIS0ACSR
读/写
R/WR/WR
R/WR/WR/WR/W
R/W
复位值
0
0
N/A
0
00
0
0
ACSR是模拟比较器主要的控制寄存器,其中各个位的作用如下:
位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模拟比较器中断模式选择
ACIS1
0
0
1
1
ACIS0
0
1
0
1
中断模式
比较器输出的上升沿和下降沿都触发中断
保留
比较器输出的下降沿触发中断
比较器输出的上升沿触发中断
注意:
当要改变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模拟比较器多路输入选择
ACME
0
1
1
1
1
1
1
1
1
1
ADEN
x
1
0
0
0
0
0
0
0
0
MUX2..0
xxx
xxx
000
001
010
011
100
101
110
111
模拟比较器反向输入端
AIN1
AIN1
ADC0
ADC1
ADC2
ADC3
ADC4
ADC5
ADC6
ADC7
10.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.c
Chiptype:
ATmega16
Programtype:
Application
Clockfrequency:
4.000000MHz
Memorymodel:
Small
ExternalSRAMsize:
0
DataStacksize:
256
**********************************************/
#include
voidmain(void)
{
PORTB.2=1;//PB2设置为输出,控制LED
DDRB.2=1;
//模拟比较器初始化:
ACSR=0x40;//允许模拟比较器,AIN0设置为内部Bandgap参考电压1.22V
while
(1)//循环检测AC0位
{
华东师范大学电子系马潮10-4
基于AVR的单片嵌入式系统原理与实践应用
if(ACSR.5)
PORTB.2=0;//AIN0 else PORTB.2=1;//AIN0>AIN1,低电压报警 } } 在上面简单程序中使用了模拟比较器的功能,实现了对电源电压的监测。 在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-3所示。 图10-3ADC功能单元方框图 华东师范大学电子系马潮10-6 基于AVR的单片嵌入式系统原理与实践应用 ADC通过逐次比较(successiveapproximation)方式,将输入端的模拟电压转换成10 位的数字量。 最小值代表地,最大值为AREF引脚上的电压值减1个LSB。 可以通过ADMUX 寄存器中REFSn位的设置,选择将芯片内部参考电源(2.56V)或AVcc连接到AREF,作为 A/D转换的参考电压。 这时,内部电压参考源可以通过外接于AREF引脚的电容来稳定,以 改进抗噪特性。 模拟输入通道和差分增益的选择是通过ADMUX寄存器中的MUX位设定的。 任何一个ADC 的输入引脚,包括地(GND)以及内部的恒定能隙(fixedbandgap)电压参考源,都可以被 选择用来作为ADC的单端输入信号。 而ADC的某些输入引脚则可选择作为差分增益放大器的 正、负极输入端。 当选定了差分输入通道后,差分增益放大器将两输入通道上的电压差按选 定增益系数放大,然后输入到ADC中。 若选定使用单端输入通道,则增益放大器无效。 通过设置ADCSRA寄存器中的ADC使能位ADEN来使能ADC。 在ADEN没有置“1”前,参 考电压源和输入通道的选定将不起作用。 当ADEN位清“0”后,ADC将不消耗能量,因此建 议在进入节电休眠模式前将ADC关掉。 ADC将10位的转换结果放在ADC数据寄存器中(ADCH和ADCL)。 默认情况下,转换结 果为右端对齐(RIGHTADJUSTED)的。 但可以通过设置ADMUX寄存器中ADLAR位,调整为左 端对齐(LEFTADJUSTED)。 如果转换结果是左端对齐,并且只需要8位的精度,那么只需读 取ADCH寄存器的数据作为转换结果就达到要求了。 否则,必须先读取ADCL寄存器,然后再 读取ADCH寄存器,以保证数据寄存器中的内容是同一次转换的结果。 因为一旦ADCL寄存器 被读取,就阻断了ADC对ADC数据寄存器的操作。 这就意味着,一旦指令读取了ADCL,那 么必须紧接着读取一次ADCH;如果在读取ADCL和读取ADCH的过程中正好有一次ADC转换 完成,ADC的2个数据寄存器的内容是不会被更新的,该次转换的结果将丢失。 只有当ADCH 寄存器被读取后,ADC才可以继续对ADCL和ADCH寄存器操作更新。 ADC有自己的中断,当转换完成时中断将被触发。 尽管在顺序读取ADCL和ADCH寄存器 过程中,ADC对ADC数据寄存器的更新被禁止,转换的结果丢失,但仍会触发ADC中断。 10.2.2ADC相关的I/O寄存器 1.ADC多路复用器选择寄存器—ADMUX 位 7 6 5 4 3 2 1 0 $07($0027)REFS1REFS0ADLARMUX4MUX3MUX2MUX1MUX0ADMUX 读/写 R/WR/WR/WR/WR/WR/WR/W R/W 复位值 00 0 0 0 00 0 位7,6—REFS[1: 0]: ADC参考电源选择 REFS1、REFS2用于选择ADC的参考电压源,见表10-3。 如果这些位在ADC转换过程中 被改变,新的选择将在该次ADC转换完成后(ADCSRA中的ADIF被置位)才生效。 一旦选择 内部参考源(AVcc、2.56V)为ADC的参考电压后,AREF引脚上不得施加外部的参考电源, 只能与GND之间并接抗干扰电容。 表10-3ADC参考电源选择 REFS1 0 0 1 1 REFS0 0 1 0 1 ADC参考电源 外部引脚AREF,断开内部参考源连接 AVcc,AREF外部并接电容 保留 内部2.56V,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVR 模拟 比较 使用方法