第15讲 模拟比较器

在定时器的章节里我们曾经介绍了AVR单片机的比较功能,它是一种数字的比较方式,当定时/计数器中的计数值与预先设定的某一数值相等时,单片机会有相应的动作产生。本章介绍的模比较器与此不同,它是一种模拟的比较方式,即将两个模拟电压进行比较,并将比较后的结果作为数字逻辑输出的一种单元电路。以下,我们要重点学习的是模拟比较器的工作原理及其使用方法。

12.1

模拟比较器

12.1.1

比较器的功能

模拟比较器是将一个模拟电压和一个基准电压进行比较,并把比较的结果以数字形式输出的器件,其主要作用是用来衡量两个模拟电压之间的逻辑关系。比较器的原理就像一架天平,而基准电压就像天平的砝码,我们需要预先知道砝码的重量,才能判断出与称重物之间的重量关系。模拟比较器的原理如图12-1所示。

比较器有两个输入端Vin+和Vin-和一个输出端OUT,两路输入为模拟信号,输出则为数字信号。比较器的输出结果与输入电压的对应关系如图12-2所示。当Vin+上的电压值小于Vin-上的电压值时,比较器输出低电平0,而当Vin+上的电压值大于Vin-上的电压值时,比较器输出高电平1。图12-2中比较器输出的阴影部分表示因输入偏移和响应时间所造成的输出不确定区域。

12.1.2

比较器模块的工作原理

ATmega32单片机的模拟比较器模块结构如图12-3所示。

默认情况下,模拟比较器模块的正极与AIN0引脚相连接,负极与AIN1引脚相连接。比较器对这两个引脚上的模拟电压进行比较,当AIN0引脚的电压高于AIN1引脚时,模拟比较器的输出ACO位将会置1。通过将ACSR寄存器的ACBG位置1,可以把片内带隙基准电压源连接至模拟比较器的正极,使其成为一个具有固定参考电压源的模拟比较器。另外,当ADC模块处于关闭状态时,还可以将ADC模块8个输入端的任意一个配置成模拟比较器的负极输入端。模拟比较器的输出既可用来触发定时/计数器1的输入捕捉功能,又可以触发模拟比较器自己的中断。触发中断的方式可以选择是上升沿、下降沿或交替变化的边沿。

12.1.3

比较器模块的相关寄存器

1.SFIOR寄存器

该寄存器是特殊功能IO寄存器,包含了多个A/D转换、模拟比较器等功能控制位。

SFIOR寄存器:特殊功能IO寄存器

bit 7-4:暂不介绍。

bit 3ACME:模拟比较器多路复用器使能位。该位置1时,如果ADC模块处于关闭状态,ADC多路复用器为模拟比较器选择负极输入。当ACME位清零时,AIN1引脚是比较器的负极输入端。

bit 2-0:暂不介绍。

2.ACSR寄存器

该寄存器是模拟比较器模块的控制和状态寄存器,包含了多个模拟比较器的控制和状态位。

ACSR寄存器:模拟比较器控制和状态寄存器

bit 7ACD:模拟比较器使能位。该位置1时,模拟比较器的电源被切断,这可以降低单片机在工作模式或空闲模式下的功耗。

bit 6ACBG:模拟比较器参考电压选择位。该位置1时模拟比较器的正极与片内带隙基准电压源相连接。ACBG位清零时模拟比较器的正极与AIN0相连接。

bit 5ACO:模拟比较器输出位。模拟比较器的输出经过同步后直接连接到ACO,同步过程会使输出产生1~2个时钟周期的延时。

bit 4ACI:模拟比较器中断标志位。当比较器的输出事件触发了由ACIS1:ACIS0位所定义的比较器中断模式时,ACI位置1。如果此中断得到允许,单片机将会执行模拟比较器中断服务程序。中断服务程序执行后,ACI位硬件清零,也可以软件向ACI位写1来清零此标志位。

bit 3ACIE:模拟比较器中断使能位。该位置1模拟比较器中断被使能。

bit 2ACIC:模拟比较器输入捕捉使能位。该位置1时允许通过模拟比较器来触发T/C1的输入捕捉功能。ACIC位清零时模拟比较器与输入捕捉功能之间没有关系。

bit 1-0ACIS1:ACIS0:模拟比较器中断模式选择位。这两位用于设定触发模拟比较器中断的事件,具体设置详见表12-1。

12.1.4

配置比较器输入引脚

ATmega32单片机允许使用ADC模块的8个输入端作为模拟比较器的负极输入,这使得模拟比较器的引脚配置更加灵活。将ADCSRA寄存器的ADEN位清零关闭ADC模块,将SFIOR寄存器的复用器使能位ACM置1,编程ADMUX寄存器的MUX2:MUX0位选择模拟比较器负极输入引脚,具体设置详见表12-2。

12.2

比较器模块的编程应用

在单片机片内配置模拟比较器,无疑会提高单片机对模拟器件的控制能力。使用模拟比较器,可以预先设定一个触发阈值,当被检测的模拟信号电压达到或超过此阈值时,单片机就会按照事先设定好的方式动作,这种对传感器的检测方法在实践中有着广泛的实用。接下来,我们要使用模拟比较器模块来实现对光线的检测和控制,其控制原理如图12-4所示。

在AVR系统板上,将硫化镉光敏电阻的一端连接至地,另一端通过一个10kΩ的电阻上拉到Vcc,将光敏电阻和上拉电阻的公共端连接到单片机模拟比较器的负极AIN1端,并且将系统板上电位器W1输出端连接至模拟比较器的正极AIN0端,使用单片机的PD7引脚驱动系统板上照明灯LED3。硫化镉光敏电阻的外观如图12-5所示。

硬件连接好以后,打开Atmel Studio 6.1软件,新建名为COMP1的项目,保存在chapter12文件夹下,软件会自动添加源文件COMP1.c到新建的项目中。编辑COMP1.c源文件,具体代码详见代码清单12-1。

代码清单12-1

光控LED照明灯

/*

*

COMP1.c *

光控LED 照明灯

*

Created: 2013/9/25

22:50:05

*

Author: GAO */

#include 
//
包含AVR 头文件
#define F_CPU 16000000UL //
定义系统时钟
#include 
//
包含延时函数头文件
#define LED3SET (PORTD|=0x80)
//
置位PD7
,点亮LED3
#define LED3CLR (PORTD&=0x7F)
//
清零PD7
,熄灭LED3
void comp_init(void); //
模拟比较器初始化函数声明
//**********
主函数**********/
int main(void)
{
DDRD|=0x80; //
将PD7
设为输出,驱动LED 照明灯
comp_init(); while(1)
{
if((ACSR&0x20)==0x20)
{
LED3CLR; //
熄灭LED3
}
else {
LED3SET ; //
点亮LED3
}
}
}
/**********
模拟比较器初始化函数**********/
void comp_init(void)
{
DDRB&=0xF3; //
将PB2
、PB3
引脚设为输入
ACSR=0x00; //
使能模拟比较器,关闭模拟比较器中断
}
/**********
结束**********/
以上代码经编译后,下载到AVR系统板中,程序运行后的效果如图12-6所示。当环境光线变暗或用手挡住光敏电阻时,LED照明灯会自动亮起。
第13章
SPI模块
SPI总线接口是芯片间的串行传输接口,用于连接单片机及外围器件,实现处理器功能的扩展。本章主要介绍SPI总线的工作原理、ATmega32单片机片内SPI模块以及与存储器93C46的通信方法。
13.1
SPI模块
SPI接口(Serial Peripheral Interface)由Motorola首创,是一种高速、全双工、同步的通信总线接口,用于CPU和外围低速器件之间进行同步串行数据传输,具有传输速度快、硬件配置简单的特点。正是出于这种简单易用的特性,越来越多的芯片集成了这种通信接口。

 


评论:

AVR单片机基础教程

作者:高显生   共18讲

AVR系列单片机是8位单片机中第一个真正的RISC结构单片机,它采用了大型快速存取寄存器组、快速的单周期指令系统以及单级流水线等诸多先进技术,使得AVR单片机具备了高达1MIPS/MHz的运行处理能力。