基于單片機的低功耗高精度融雪測量儀的設計
我國對于積雪的實時檢測技術還比較落后,如通過利用衛(wèi)星來實時監(jiān)視積雪融化動態(tài),但在實際的運作中,由于地面環(huán)境的復雜性存在比較大的誤差與缺陷[1]。早在1973年,MrClain等人指出雪的表面反射率可以作為雪深的指示因子[2],但是由于地表土壤成分各不相同以及表面雜物不同,其檢測效果也并不可觀。因此,研制一套低功耗高精度的融雪測量儀是有必要的,而且具有廣闊的應用前景。
1 總體設計方案
本設計提出以超聲波傳感器進行積雪厚度的實時監(jiān)測,采用“渡越時間檢測法”進行雪厚的測量。其測量原理為:超聲波發(fā)射器垂直地向雪表面發(fā)射超聲波,同時采集板上微控制器內(nèi)部定時器開始計時,碰到雪面反射回來。當超聲波接收器接收到反射波時,定時器就立即停止計時,根據(jù)定時值,計算出發(fā)射點距雪表面的距離S。假設設備安裝高度為S0,雪厚值為S0-S。最終控制器對采集板進行召測,對采集到的數(shù)據(jù)處理與分析,并做出相應的預警功能。
2 低功耗的實現(xiàn)方案
低功耗實現(xiàn)方案主要有:控制板的主控制器的選型以及工作模式的選擇;控制AT89C2051單片機的工作模式和485通信狀態(tài)的控制以及設置合理的采樣周期。
(1)主控制器的選型及工作模式的選擇
控制板的主控制器選擇MSP430F149,這是一款16位超低功耗的混合信號處理器。電源電壓采用1.8~3.6 V,在2.2 V、1 MHz的時鐘條件下運行時,電流僅有160 μA。待機模式:1.6 μA。關閉模式(RAM保持):0.1 μA。平時讓主控制器處于LPM3模式下,CPU停止工作,主時鐘關閉,子時鐘關閉,內(nèi)部振蕩器關閉,輔導時鐘打開,其功耗為2 μA。同時,將TIMER_A的時鐘源選為ACLK,當?shù)竭_定時時間時,用#pragma vector=TIMERA1_VECTOR中斷CPU喚醒。具體程序?qū)崿F(xiàn)方法為:
Void Init_Timer_A()
{
TACTL|=TASSEL_1+TACLR; //選擇時鐘源為ACLK
TACTL|=MC1+TAIE; //使能定時器A中斷
}
_BIS_SR(LPM3_bits+GIE); //Enter LPM3 interrupt
#pragma vector=TIMERA1_VECTOR //中斷服務函數(shù)
__interrupt void Timer_A(void)
{}
?。?)工作模式以及485狀態(tài)控制
平時單片機處于“空閑方式”狀態(tài),當有串口中斷喚醒的時候,CPU才開始采集數(shù)據(jù)。當采集完成后通過RS-485總線發(fā)送給控制板(注:RS-485平時處于接收狀態(tài),需要發(fā)送時才使能發(fā)送端口,為了降低功耗),執(zhí)行完成后單片機繼續(xù)“睡覺”。程序?qū)崿F(xiàn)方法如下所示。
Void Init_Uart()
{
TMOD=0X21;TH1=0XFD;TL1=0XFD;TR1=1;
//波特率發(fā)生器的選擇
REN=1; //使能接受
SM0=0;SM1=1;
ES=1; //打開串口中斷
EA=1; //開總中斷
}
Void Init_485()
{
CONTROL_485=0; //使485模塊處于接收狀態(tài);
}
Void Serial() interrupt 4 //串口中斷服務函數(shù)
{}
Void Lower_Power()
{
CONTROL_485=0; //使485處于接收狀態(tài)
PCON=0X01;//使單片機處于“空閑模式”
}
?。?)設置合理的采樣周期
由于積雪的融化與溫度有關,當溫度在冰點之下時,積雪不融化。這時候就沒必要一直去采集積雪的融化狀況,即采集頻率可以減小,對于降低功耗是一種有效的方法(根據(jù)實際情況可在軟件中設定值)。該設計中設定的采樣周期如表1所示。
3 高精度的實現(xiàn)方案
高精度的實現(xiàn)方案主要表現(xiàn)為:確定回波檢測方案,溫度補償,對采集值進行數(shù)字濾波,真實值與測量值之間做線性補償。
?。?)確定回波檢測方案
能夠快速檢測到回波對于提高精度是一個關鍵點。如果在程序中使用冗余或者復雜的程序后,勢必會增加定時器的計數(shù)值,從而影響測距精度。下面是該設計中使用的回波檢測程序。
C語言程序:
while(SUPERSONIC_IN(TF0==0))
{}
TR0=0; //關閉定時器0
反匯編分析:
290: while(SUPERSONIC_IN(TF0==0))
C:0x055B 30B703 JNB SUPERSONIC_IN(0xB0.7),C:0561
C:0x055E308DFA JNB TF0(0x88.5),C:055B
291: {}
292:
293: TR0=0; //關閉定時器0
C:0x0561 C28C CLR TR0(0x88.4)
評論