AVR单片机模拟比较器和ADC实验六Word文档格式.docx

上传人:b****3 文档编号:15719723 上传时间:2022-11-15 格式:DOCX 页数:23 大小:122.28KB
下载 相关 举报
AVR单片机模拟比较器和ADC实验六Word文档格式.docx_第1页
第1页 / 共23页
AVR单片机模拟比较器和ADC实验六Word文档格式.docx_第2页
第2页 / 共23页
AVR单片机模拟比较器和ADC实验六Word文档格式.docx_第3页
第3页 / 共23页
AVR单片机模拟比较器和ADC实验六Word文档格式.docx_第4页
第4页 / 共23页
AVR单片机模拟比较器和ADC实验六Word文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

AVR单片机模拟比较器和ADC实验六Word文档格式.docx

《AVR单片机模拟比较器和ADC实验六Word文档格式.docx》由会员分享,可在线阅读,更多相关《AVR单片机模拟比较器和ADC实验六Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

AVR单片机模拟比较器和ADC实验六Word文档格式.docx

1、模拟比较器的介绍

ATmega16的模拟比较器可以实现对两个输入端:

正极AIN0和负极AIN1(分别对应于ATmage16的引脚PB2、PB3)的模拟输入电压进行比较。

当AIN0上的电压高于AIN1的电压时,模拟比较器输出ACO被设为“1”。

比较器的输出还可以被设置作为定时计数器1输入捕获功能的触发信号。

此外,比较器的输出可以触发一个独立的模拟比较器中断。

用户可以选择使用比较器输出的上升沿、下降沿或事件触发作为模拟比较器中断的触发信号。

2、与模拟比较器相关的寄存器

与模拟比较器相关的寄存器是SFIOR、ACSR。

用户通过这两个寄存器的相关位实现对模拟比较器的设置和控制。

1)特殊功能IO寄存器—SFIOR

寄存器SFIOR中的第3位ACME为模拟比较器多路使能控制位。

当该位为逻辑“1”,同时模数转换(ADC)功能被关闭(ADCSRA寄存器中的ADEN使能位为“0”)时,允许使用ADC多路复用器选择ADC的模拟输入端口作为模拟比较器反向端的输入信号源。

当该位为零时,AIN1引脚的信号将加到模拟比较器反向端。

本实例中我们使用ADC的模拟输入端口作为模拟比较器反向端的输入信号源,所以需要设置第3位ACME为1.

2)模拟比较器控制和状态寄存器—ACSR

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个位决定哪种模拟比较器的输出事件可以触发模拟比较器的中断。

不同的设置参见表6.1.1。

表6.1.1模拟比较器中断模式选择

ACIS1

ACIS0

中断模式

比较器输出的上升沿和下降沿都触发中断

1

保留

比较器输出的下降沿触发中断

比较器输出的上升沿触发中断

注意:

当要改变ACIS1、ACIS0时,必须先清除ACSR寄存器中的中断允许位,以禁止模拟比较器中断;

否则,当这些位被改变时,会发生中断。

在本实例中,我们要使用模拟比较器,所以应当允许模拟比较器,即ACD应为0,选择芯片内部的固定能隙参考电源。

即ACBG设置为1,我们不使用中断和捕获,所以不必理会与此相关的各位。

3)模拟比较器的多路输入

用户可以选择ADC7..0引脚中的任一路的模拟信号代替AIN1引脚,作为模拟比较器的反向输入端。

模数转换的ADC多路复用器提供这种选择的能力,但此时必须关闭芯片的ADC功能。

当模拟比较器的多路选择使能位(SFIOR中的ACME位)置“1”,同时ADC被关闭时(ADCSRA中的ADEN位置“0”),由寄存器ADMUX中的MUX[2:

0]位所确定的引脚将代替AIN1作为模拟比较器的反向输入端,如表6.1.2所示。

如果ACME被清零,或ADEN被置1,则AIN1仍将为模拟比较器的反向输入端。

表6.1.2模拟比较器多路输入选择

ACME

ADEN

MUX2..0

模拟比较器反向输入端

x

xxx

AIN1

000

ADC0

001

ADC1

010

ADC2

011

ADC3

100

ADC4

101

ADC5

110

ADC6

111

ADC7

本实例中我们采用ADC0作为模拟比较器的反向输入端,所以选择ADMUX寄存器中的MUX2:

0=0;

6.1.3、电路

本实例的电路包含分压电路,下面的电路是电阻分压电路,如下图所示。

1、电路原理

在本实例中利用电位器(即可调电阻)组成分压电路,单片机的PA0连接在电位器的动片引脚上,这个电路实际上相当于两个电阻组成的串联电路,只不过这两个电阻的阻值是可变的,改变动片的位置,就可以改变PA0与地之间的电阻值,根据串联电路分压的原理,当动片移动时,PA0处的电压就会发生变化。

2、电路连接

电路电位器的动片引脚连接到单片机的PA0口,作为模拟比较器的反向输入端。

6.1.4、程序设计

1、程序功能

程序的功能是使用单片机的模拟比较器比较PA0口的电压与单片机内部的固定能隙电压(1.22V)之间的高低,如果PA0的电压低于1.22V,则D1灯点亮,否则D2灯点亮。

2函数说明

本程序有两个功能函数,分别是:

●端口初始化函数,设置连接D1、D2两个LED的端口PB0、PB1为输出口,输出低电平,使两个LED都处于熄灭状态。

●模拟比较器初始化函数

设置与模拟比较器相关的寄存器,使模拟器按照一定的方式工作。

3、使用WINAVR开发环境,我们使用的是外部12M的晶振,所以需要将makefile文件中的时钟频率修改为12M。

另外在程序烧录到单片机的时候,熔丝位也要选择为外部12M晶振(注意是晶振,不是外部振荡器,一定不要选择错了,否则会导致单片机不能再烧写程序)。

4、程序代码

#include<

avr/io.h>

util/delay.h>

avr/interrupt.h>

//中断函数头文件

//函数声明

voidPort_Init(void);

//端口初始化配置

voidCompare_Init(void);

//模拟比较器初始化设置

intmain(void)

{

Port_Init();

Compare_Init();

sei();

//使能全局中断

while

(1)

{

if(ACSR&

(1<

<

ACO))//判断ADC0的电压是否大于1.22V

{

PORTB=0X01;

//低于1.22V,D1点亮,

}

else

PORTB=0X02;

//高于1.22V,D2点亮,

}

}

//端口状态初始化设置函数

voidPort_Init()

PORTB=0X00;

//

DDRB|=(1<

PB0)|(1<

PB1);

//PB0、PB1设置为输出

//模拟比较器初始化函数

voidCompare_Init()

SFIOR|=(1<

ACME);

//使用ADC多路复用器选择ADC的模拟输入端口

//作为模拟比较器反向输入端的信号源。

//同时选择ADC的ADC0作为输入端,并且关闭AD转换的使能

ACSR|=(1<

ACBG);

//允许模拟比较器,AIN0设置为内部固定能隙参考电源1.22V

6.2模数转换的ADC实验

6.2.1、实例功能

AVR的模数转换器ADC具有下列特点:

●10位精度;

●0.5LSB积分非线形误差

●±

2LSB的绝对精度;

●13µ

s~260µ

s的转换时间;

●在最大精度下可达到每秒15kSPS的采样速率;

●8路可选的单端输入通道;

●7路差分输入通道;

●2路差分输入通道带有可选的10×

和200×

增益;

●ADC转换结果的读取可设置为左端对齐(LEFTADJUSTMENT);

●ADC的电压输入范围0~Vcc;

●可选择的内部2.56V的ADC参考电压源;

●自由连续转换模式和单次转换模式;

●ADC自动转换触发模式选择;

●ADC转换完成中断;

●休眠模式下的噪声抑制器(NOISECANCELER)。

在本实例中,我们将编写程序实现将模数转换后获得的电压值通过单片机的串口发送到计算机,然后通过计算机上的串口助手显示测量的电压值。

本实例共有3个功能模块,分别描述如下:

使用单片机的串口实现将模数转换后获得的电压值通过串口发送到计算机。

RS232电平转换电路,DB9串行接口插座,模拟电压输入采集电路。

进一步熟悉单片机的串行通信,并掌握单片机的模数转换的方法。

6.2.2、器件和原理

关于串行接口的原理已接单片机与计算机的串口的连接在上一实例中进行了描述,在本实例中不再重复。

本实例只介绍ATmega16单片机如何通过内置的模数转换模块采集外界输入的模拟电压。

1、ATmega16单片机的模数转换器ADC介绍

由于单片机只能处理数字信号,所以外部的模拟信号量需要转变成数字量才能进一步的由单片机进行处理。

ATmega16内部集成有一个10位逐次比较(successiveapproximation

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1