基于MSP430内嵌温度传感器的温度告警系统(2)
3. 测量误差及其减小办法
很容易发现这个温度传感器具有较大的测量误差,实验也证明了这一点。这将导致较大的虚警概率或漏警概率。因此要想实用它,必须要进行误差校正,以减小这两个概率。产生误差的原因主要有以下几个方面:
0℃基准参考电压误差
由表1可见,V0℃的最大误差可达5%。所以由它导致的最大误差为:。这么大的误差,无疑会导致很大的虚警或者漏警概率,所以必须要对它进行校准。
用TRT 表示室温,VRT表示室温下温度传感器的输出电压,则由公式(1)可得:
(4) |
由式(1)减式(4)可得:
(5) |
因为MSP430是低功耗的,所以在开机的一段时间内,它的片内外温度可以认为是一样的。因此我们可以用温度计测量出开机时的室温TRT,将开机时测得的VST作为VRT,然后将VRT和TRT代入(5)式进行温度计算。这样就消除(至少是减小)了由V0℃不准确而导致的测量误差,从而减小了虚警和漏警概率。
传感电压误差
对于工业级标准,工作温度范围为:-20℃ ~ +85℃。而对于一个实际的系统,绝大多数时间工作在0℃ ~ +50℃之间。因此,用 做基准参考会导致较大的积累误差。从表1可以看出,由传感电压引入的最大误差约为 。如果待测温度为50℃,用0℃作参考,则最大误差为: ℃;而用室温(假定TRT = 25℃)作参考,则误差为: ℃,比用0℃作参考时减小了一半。因此采用室温作为温度参考,是减小积累误差的一个较好的方案。不过由传感电压引入的误差相对于 来说还是比较小的。
A/D转换引入的误差
由芯片资料可见,对于12位A/D,因漏电流引入的误差1LSB,这个误差可以忽略不记。但是由于布线技术和电源和地线等的不良而导致的电源线、地线上的纹波和噪声脉冲对转换结果的影响却不能不考虑。如图1所示,如果数字地DVss和模拟地AVss是分开供电的,则可以在这两点之间接入反相并接的二极管对,以消除700mV的电压差。另外如果参考电压(VR+ - VR-)较小,那么纹波的影响会变得更明显,从而影响转换精度。因此,电源的清洁无噪声对A/D转换的精度有很大的影响。当然在可能的情况下还是要尽量采用较大的(VR+ - VR- )。还有就是尽量不要采用内部参考,内部参考不太稳定,会影响转换的精度。仔细安排各自接地点的旁路电容对于减小噪声的影响也是很有用的。图1给出了一种典型的退耦电容配置方式,在芯片的电源以及外接参考电压(图中没有画出)的引脚上并接一个10uF的钽电容和一个0.1uF的瓷片电容能够较好的起到抑制噪声的作用。
采用内嵌温度传感器测量温度,要受到很多方面的影响。除了上面讨论的方法,还有减小误差的一般方法,比如多次测量取平均等。所以要综合考虑各方面的因素,才能取得满意的效果。
4. 软件描述
MSP430另一个突出优点就是用C语言编写程序简捷而且编译效率很高。下面就以MSP430F449为例来简要描述这个系统的软件实现。图3为程序流程。
#include "msp430x44x.h" // 包含头文件
#include <math.h> //包含数学运算头文件
#define Trt 25 //预先测量到的室温
#define Th 50 //高温告警温度
#define Tl 0 //低温告警温度
int i=0, k=0,Vrt; //定义全局变量
int ADC_Result[16];
float T; //测量到的温度
void init(void); //初始化函数
void ADC12(void); //A/D转换函数
void Alarm(float t); //告警处理函数
void init(void)
{
TACTL=TASSEL1+TACLR+MC_1; //定时器初始化,工作在"up"模式
CCTL0|=CCIE; //使能CCR0中断
CCR0=0x0FF; //设定定时值
_EINT(); //打开中断
来看看其他人说了些什么?-----------------------------------------------------------------> 进入详细评论页