- 杂志
 论坛 » 元件与连接器 » RE: 基于AVR单片机捕获中断和热敏电阻的温度测量【转】
 RE: 基于AVR单片机捕获中断和热敏电阻的温度测量【转】  发表于 2008-06-27 17:12:20
呢称:beibeidong
加我为好友

3 AVR捕获

本文以AVR系列中高性价比的ATmage88为例,利用16位时钟单元T/C1的捕获中断来实现电容充电时间的测量,单片机时钟选择8 MHz。输入捕获单元方框图如图4所示。当引脚ICP1上的逻辑电平(事件)发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉被激发:16位的TCNT1数据被复制到输入捕捉寄存器ICR1,同时输入捕捉标志位ICF1置位。如果此时ICIE1为1,输入捕捉标志将产生输入捕获中断。

ATmega88在3.3 V供电时,当电容电压上升到1.84 V时,如图3所示,发生捕获中断。

4 软件设计

基于ATmage88捕获中断测温程序流程图如图5所示,包括主程序流程图,捕获中断流程图和定时溢出中断流程图。

ATmage88定时器初始化涉及TCCR1B,TIMSK1控制寄存器的配置,介绍如下:

ICNC1:输入捕捉噪声抑制器,“1”启用;

ICES1:捕捉触发沿选择,“1”上升沿,“0”下降沿;

CS1[2:0]:时钟选择,有多种预分频时钟可供选择;

ICIE1:T/C1输入捕捉中断使能;

TOIE1:T/C1溢出中断使能。

定时器T1初始化代码如下(AVR-GCC):

其中宏定义Tp=0;Tt=1;需要定义数组:

uint16_t timeL[2],timeH[2],counter[2]

当测量时间超过定时器最长计时时,定时器会溢出,定时器T1溢出中断函数代码如下:

最后通过查表法就可以得到测量的温度。查表温度间隔一般为1℃,如果忽略热敏电阻1℃以内的非线性误差,可以将两摄氏度之间取线性计算,这样可以得到0.1℃的分辨率。

5 结 语

笔者应用该方法已设计出一款温度计,在范围-10~80℃时,分辨率达到0.1℃,误差在0.5℃以内。本文充分利用了AVR的捕获功能,使得电路简洁,成本低廉。


关于我们 | 广告服务 | 企业会员服务 | 新手上路 | 联系我们 | 友情链接
《电子产品世界》杂志社 版权所有 北京东晓国际技术信息咨询有限公司
Copyright ©2002 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备060382号