基于MSP430內嵌溫度傳感器的溫度告警系統

發(fā)布時(shí)間:2008-1-1 13:20    發(fā)布者:MSP430
關(guān)鍵詞: MSP430 , 溫度傳感器 , 溫度告警
MSP430微控制器的諸多系列中都有內嵌的溫度傳感器。本文提出了一種基于這個(gè)傳感器的溫度報警系統的方案。然后分析了產(chǎn)生虛警和漏警的原因,并提出了減小這兩種概率的辦法,最后給出了以MSP430F449為例的C語(yǔ)言程序。
1.        系統的總體方案
MSP430微控制器MCU(Micro ControllerUnit)是TI公司推出的一款具有豐富片上外圍的強大功能的超低功耗16位混合信號處理器。其中包括一系列的器件,可以應用在不同的場(chǎng)合。MSP430與MCS-51的一個(gè)顯著(zhù)不同就是它在片內集成了模數轉換(ADC)模塊,使得A/D轉換得以容易的實(shí)現。其中在MSP430的13x、14x、43x、44x系列器件中,都有內嵌的溫度傳感器。它的輸出送入ADC12模塊的通道10,然后對其進(jìn)行A/D轉換,進(jìn)而可以測量芯片內的溫度。在本告警系統中就是采用這個(gè)溫度傳感器的輸出來(lái)實(shí)現溫度的實(shí)時(shí)告警。

圖1 基于MSP430F449內嵌溫度傳感器的溫度告警系統原理圖
本系統的基本方案是這樣的:ADC12模塊的通道10對芯片的溫度進(jìn)行測量,當測量溫度高于或者低于預設告警值時(shí),便通過(guò)I/O端口的輸出來(lái)驅動(dòng)LED,顯示告警狀態(tài)。芯片在整個(gè)過(guò)程中處于低功耗模式。本系統的原理比較簡(jiǎn)單,圖1給出其簡(jiǎn)單的原理圖。
2.        溫度傳感器的測溫原理和過(guò)程
MSP430內嵌的溫度傳感器實(shí)際上就是一個(gè)輸出電壓隨環(huán)境溫度而變化的溫度二極管,表1是它的一些基本電氣特性。按照TI公司提供的資料,這個(gè)溫度二極管輸出的電壓和對應的溫度近似成簡(jiǎn)單的線(xiàn)性關(guān)系。所測溫度可由的公式(1)求出:

(1)
其中,T:測量到溫度,單位℃;
VST :ADC模塊的通道10測量到的電壓,單位mV;
V0℃ :0℃時(shí)傳感器的輸出的電壓,單位mV;
TC SENSOR :傳感器的傳感電壓,即輸出電壓隨溫度的變化情況,單位mV/℃。數值上等于溫度每升高1℃,增加的輸出電壓。

對于12位的ADC模塊,VST可以通過(guò)下面的A/D轉換公式求得:
(2)
其中,ADC12CH10:通道10所測得的溫度傳感器的12位A/D值;
VR+:正參考電壓,可以取內部參考VREF+ 、AVcc或者外部參考VeREF+ ,單位mV;
VR-:負參考電壓,單位mV。通常取VR-=AVss,在這種情況下,求VST的公式進(jìn)一步簡(jiǎn)化為:

(3)
由(1)式和(3)式可見(jiàn),把A/D轉換所得的結果VST經(jīng)過(guò)簡(jiǎn)單轉換就可得到對應的溫度。
表1:MSP430微控制器溫度傳感器電氣特性表

參數測試條件最小值典型值最大值單位
V0℃Vcc= 2.2V/3V986 - 5%986986 + 5%mV
TCSENSORVcc= 2.2V/3V,TA=0℃3.55 -3%3.553.55 +3%mV/℃
tSENSORVcc= 2.2V/3V30

μs
                 3.        測量誤差及其減小辦法

很容易發(fā)現這個(gè)溫度傳感器具有較大的測量誤差,實(shí)驗也證明了這一點(diǎn)。這將導致較大的虛警概率或漏警概率。因此要想實(shí)用它,必須要進(jìn)行誤差校正,以減小這兩個(gè)概率。產(chǎn)生誤差的原因主要有以下幾個(gè)方面:

0℃基準參考電壓誤差
由表1可見(jiàn),V0℃的最大誤差可達5%。所以由它導致的最大誤差為:。這么大的誤差,無(wú)疑會(huì )導致很大的虛警或者漏警概率,所以必須要對它進(jìn)行校準。

用TRT 表示室溫,VRT表示室溫下溫度傳感器的輸出電壓,則由公式(1)可得:
(4)
由式(1)減式(4)可得:
(5)
因為MSP430是低功耗的,所以在開(kāi)機的一段時(shí)間內,它的片內外溫度可以認為是一樣的。因此我們可以用溫度計測量出開(kāi)機時(shí)的室溫TRT,將開(kāi)機時(shí)測得的VST作為VRT,然后將VRT和TRT代入(5)式進(jìn)行溫度計算。這樣就消除(至少是減。┝擞蒝0℃不準確而導致的測量誤差,從而減小了虛警和漏警概率。
傳感電壓誤差
對于工業(yè)級標準,工作溫度范圍為:-20℃ ~ +85℃。而對于一個(gè)實(shí)際的系統,絕大多數時(shí)間工作在0℃ ~ +50℃之間。因此,用做基準參考會(huì )導致較大的積累誤差。從表1可以看出,由傳感電壓引入的最大誤差約為 。如果待測溫度為50℃,用0℃作參考,則最大誤差為:℃;而用室溫(假定TRT = 25℃)作參考,則誤差為:℃,比用0℃作參考時(shí)減小了一半。因此采用室溫作為溫度參考,是減小積累誤差的一個(gè)較好的方案。不過(guò)由傳感電壓引入的誤差相對于 來(lái)說(shuō)還是比較小的。

A/D轉換引入的誤差

由芯片資料可見(jiàn),對于12位A/D,因漏電流引入的誤差1LSB,這個(gè)誤差可以忽略不記。但是由于布線(xiàn)技術(shù)和電源和地線(xiàn)等的不良而導致的電源線(xiàn)、地線(xiàn)上的紋波和噪聲脈沖對轉換結果的影響卻不能不考慮。如圖1所示,如果數字地DVss和模擬地AVss是分開(kāi)供電的,則可以在這兩點(diǎn)之間接入反相并接的二極管對,以消除700mV的電壓差。另外如果參考電壓(VR+ - VR-)較小,那么紋波的影響會(huì )變得更明顯,從而影響轉換精度。因此,電源的清潔無(wú)噪聲對A/D轉換的精度有很大的影響。當然在可能的情況下還是要盡量采用較大的(VR+ - VR-)。還有就是盡量不要采用內部參考,內部參考不太穩定,會(huì )影響轉換的精度。仔細安排各自接地點(diǎn)的旁路電容對于減小噪聲的影響也是很有用的。圖1給出了一種典型的退耦電容配置方式,在芯片的電源以及外接參考電壓(圖中沒(méi)有畫(huà)出)的引腳上并接一個(gè)10uF的鉭電容和一個(gè)0.1uF的瓷片電容能夠較好的起到抑制噪聲的作用。

采用內嵌溫度傳感器測量溫度,要受到很多方面的影響。除了上面討論的方法,還有減小誤差的一般方法,比如多次測量取平均等。所以要綜合考慮各方面的因素,才能取得滿(mǎn)意的效果。
4.        軟件描述
MSP430另一個(gè)突出優(yōu)點(diǎn)就是用C語(yǔ)言編寫(xiě)程序簡(jiǎn)捷而且編譯效率很高。下面就以MSP430F449為例來(lái)簡(jiǎn)要描述這個(gè)系統的軟件實(shí)現。圖3為程序流程。

#include   "msp430x44x.h"                           // 包含頭文件  
#include                                                        //包含數學(xué)運算頭文件
#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;                        //定時(shí)器初始化,工作在"up"模式
        CCTL0|=CCIE;                                                        //使能CCR0中斷
        CCR0=0x0FF;                                                        //設定定時(shí)值
        _EINT();                                                                //打開(kāi)中斷
        P2DIR|=BIT0+BIT1;                                                //P2.0和P2.1為告警輸出;
}
void ADC12(void)
{
        ADC12CTL0 &=~ ENC;                                           //在進(jìn)行設置時(shí)首先復位ADC的轉換使能
ADC12CTL0 = ADC12ON+REF2_5V+SHT0_8;         //采用內部2.5V參考,打開(kāi)通道10REFON自動(dòng)打開(kāi)
        ADC12CTL1 = SHP+ADC12SSEL_2;                  //上升沿采樣,主時(shí)鐘,MEM0
        ADC12MCTL0 = EOS + INCH_10+SREF_1;                //選擇通道10,Vref+為參考電壓,進(jìn)行溫度測量
        ADC12CTL0 |= ENC;
        ADC12CTL0 |= ADC12SC;                                    // 開(kāi)始轉換
        if ((ADC12IFG & BIT0)==1)                                //如果轉換完畢,讀走數據
        ADC_Result=ADC12MEM0;               
}
void Alarm(float t)
{
        if(t>=Th)
                P2OUT|=BIT1;                               //高溫告警
        else if(t<=Tl)
                P2OUT|=BIT0;                        //低溫告警
        else
                 P2OUT&=~(BIT0+BIT1);                                //無(wú)告警
}
interrupt[TIMERA0_VECTOR] void Timer_A (void) //中斷處理子程序//
{
int ADC_Sum=0;
        float Vst;
        for (i=0;i++;i<16)                               //連續進(jìn)行16次轉換,提高精度
        {
                ADC12();
                ADC_Sum +=ADC_Result;                        //求和
                i++;
        }
        ADC_Sum>>=4;                                                        //將ADC_Sum右移4位,相當于除以16.得到平均的結果;
        Vst=( ADC_Sum /4095.0)*2500;                                //完成轉換,得到電壓值
        k++;        
#ifndef Trt                                                               
T=(Vst-986)/3.35;                                        //測出用0度作基準的溫度        
#else
                if (k==1) Vrt=Vst;                                        //如果定義Trt,則將第一次的轉換結果作為室溫下的Vrt
T=(Vst-Vrt)/3.35+Trt;                                        //測出用室溫作基準時(shí)的溫度        
        #endif
        Alarm(T);                                                                //告警處理
}   
void main (void)
{
        init();                                                                        //初始化
        LPM1;                                                                //進(jìn)入低功耗模式1;        
}   

5.        結束語(yǔ)

本文只是對告警部分進(jìn)行了描述,若是再加上液晶就可以實(shí)時(shí)顯示溫度,加上鍵盤(pán)就可以對室溫、告警溫度進(jìn)行預設,再對上述程序進(jìn)行一些改進(jìn)就是一個(gè)實(shí)用的系統了。因這兩部分相對比較簡(jiǎn)單和成熟,文中沒(méi)有進(jìn)行進(jìn)一步討論。
本文地址:http://selenalain.com/thread-2838-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)在線(xiàn)工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页