摘 要:針對在單片機濕度測量系統(tǒng)中,將濕度傳感器HS1101和555組成振蕩器的輸出計頻后,按技術手冊給定的頻率-濕度關系,為達到理想的轉換精度,設計了幾種將頻率轉換為濕度的算法以及實現(xiàn)該算法相應的C51源程序,在KEIL C軟件環(huán)境下,進行編譯并仿真運行,通過監(jiān)視反匯編、性能分析等觀察窗口,對生成代碼長度、執(zhí)行效率進行了具體分析比較,指出了在C51編程提高程序運行性能方面,應引起重視的算法和一些技術性問題。
關鍵詞:HS1101;F-RH轉換函數(shù);轉換精度;KEILC;性能分析
中圖分類號:G712;TP212文獻標識碼:B文章編號:1004-373X(2008)24-184-03
Analysis of the Convertible Algorithm about HS1101 Humidity Sensor by KEILC
QIU Yujuan
(Jiangyin Polytechnic College,Jiangyin,214433,China)
Abstract:This article designs several algorithms of the conversion between frequency and humidity with reference to the fixed relation of the tow elements stated in the technical manual to achieve the desired accuracy of the conversion,and provides a realization of these types of algorithms corresponding C51 source program.These algorithms apply to the microcontroller humidity measurements system in which the frequency of the output of the oscillator consisted of humidity sensor and 555 is counted.Apart from it,through the adoption of software KEILC,after compiler and simulation,the length of Generation code,executive efficiency have been compared and analyzed specificly while surveillance of the observation window.And some technical problems about the efficienal processing of C51 which should be stressed on are also pointed out in the article.
Keywords:HS1101;F-RH transfer function;conversion accuracy;KEILC;performance analysis
1 引 言
HS1101法國HUMIREL電容式濕度傳感器,采用創(chuàng)新技術、穩(wěn)定性好、精度高、外帶防護罩,抗靜電、防灰塵、并可抵抗氯氣、氨水等,可測的濕度測量范圍為1~99%RH,精度可達到±2%可應用于濕度變送器、濕度儀表、濕度控制器及其他場合,在測量溫度Tα=25℃,測量工作頻率為10 kHz,C-RH特性曲線如圖1,從特性曲線圖上可以看出,HS1101具有極好的線性輸出。
可以近似看成相對濕度值和電容值成比例,在一般應用中,都將其接入如圖2所示的555振蕩電路,當555為典型的CMOS類型時,可得如下多項式的反應方程式:
Fmes=F55(1.103 8-1.936 810-3×RH+
3.011 410-6×RH2-3.440 310-8×RH3)
同時實驗定點采樣可得下列濕度-輸出頻率F-RH關系表見表1。
表1 濕度-輸出頻率F-RH關系表
RH 0 10 20 30 40 50
F 7 351 7 224 7 100 6 976 6 8536 728
RH 60 70 80 90 100
F6 600 6 468 6 330 6 186 6 033
圖1 HS1101特性曲線
在單片機應用中,一般通過測量振蕩電路的頻率,然后根據(jù)此多項反應式將其轉換成濕度,再送出顯示或發(fā)送上位機的,故F-RH轉換程序是濕度測試系統(tǒng)的重要組成部分,該程序的算法關系到F-RH轉換精度、經(jīng)編譯后的代碼長度以及執(zhí)行效率,從而也直接影響了系統(tǒng)的性能,由于上述多項反應方程式較為復雜,將此直接作為單片機編程算法,生成的代碼長度過長,從實際應用出發(fā),根據(jù)表1以及HS1101具有極好的線性輸出,又基于C語言語句結構直接支持分段函數(shù)的編程,故可將此特性曲線分段,在某一區(qū)間內(nèi)近似為線性,基于此算法思想,本文設計了3種典型轉換程序,經(jīng)KEIL C編譯后,實驗運行結果逐一分析如下:
圖2 濕敏電容構成的555振蕩電路
2 線性方程法
分析C-RH特性曲線,并根據(jù)F-RH表1進行描點,可發(fā)現(xiàn)F-RH近似于一條直線,取表格內(nèi)兩組數(shù)據(jù)采用系數(shù)代入法可推出如下直線方程:
RH=588-0.8F (6 033 RH=588-0.08F (6 330 RH=586-0.08F (6 075≤F≤6 330) 調(diào)整后的F′-RH表格如表2所示: 表2 調(diào)整后的F-RH表格 RH 0 10 20 30 40 50 F 7 351 7 224 7 100 6 976 6 8536 728 F′010.020.029.939.749.7 RH 60 70 80 90 100 F 6 600 6 468 6 330 6 186 6 033 F′6070.579.691.1100 程序如下: yfloat hs1101(void) {float RH; if(F>=6033F<=7351) if(F>6330)RH=588-0.08*F; else RH=586-0.08*F; return RH; } 為分析子函數(shù)的性能,將該函數(shù)HS1101()單獨加入主函數(shù),經(jīng)編譯后,在fsc=12 MHz,F(xiàn)=7 000 Hz時可通過DISASSEMBLY WINDOWN窗口(見圖3)可查出生成的代碼長度為984行,在PERFORMANCE ANALYZER WINDOW窗口下可以看到其運行平均執(zhí)行時間為(見圖3)556 μs。 圖3 DISASSEMBLY WINDOWN窗口 3 分段等差法 由于線性方程法運行后產(chǎn)生的誤差較大,通過分析上表各10%濕度之區(qū)間頻率并不是等差的,權衡后,將各區(qū)間頻率差值逐一分析后,進行多次分段處理,可得近似轉換值F′如表3所示: 表3 轉換值F′ RH 0 10 20 30 40 50 F 7 351 7 224 7 100 6 976 6 8536 728 F′010.0203039.950 RH 60 70 80 90 100 F6 600 6 468 6 330 6 186 6 033 F′6069.679.690100 程序如下: float hs1101(void) {float RH; if(F<=7351F>=6330) if(F>7224)RH=(7351-F)/12.7; else if(F>6600)RH=10+(7224-F)/12.4; else if(F>6186)RH=60+(6600-F)/13.8; else RH=90+(6186-F)/15.3; return RH; } 經(jīng)編譯后,可通過DISASSEMBLY WINDOWN窗口(見圖4)可查出生成的代碼長度為977行,在PERFORMANCE ANALYZER WINDOW窗口下可以看到其運行平均執(zhí)行時間為1 148 μs,盡管精度得到了改善,由于51系列單片機只支持8位數(shù)據(jù)的運算,但程序中多次用到實數(shù)計算,故必須調(diào)用浮點數(shù)運算程序包,所致代碼長度加長,執(zhí)行時間也比線性方程法長。 4 查表等差法 將F-RH關系表直接作為二維數(shù)組,用測得頻率值frequency作為數(shù)組下標值,查表后確認落在某一RH區(qū)域,可采用下列公式計算: RH=RHleft+Fright-frequency(Fright-Fleft)/10 其中,left,right 分別為區(qū)域下限值和上限值。 圖4 生成代碼 由于該程序精確跟蹤表格內(nèi)每10%RH采樣點,故精度比較高,具體程序如下: const unsigned int tab[2][11]={0,10,20,30,40,50,60,70,80,90,100,7351,7224,7100,6976,6853,6728,6600,6468,6330,6186,6033}; {float RH; unsigned char i; for(i=0;i<=10;i++) if(F<=tab[1][i]F>tab[1][i+1]) {RH=tab[0][i]+(tab[1][i]-F)/((tab[0][i]-tab[0][i+1])/10);break;}// return RH; } 通過DISASSEMBLY WINDOWN窗口可看出生成的代碼長度為505行, ANALYZER WINDOW窗口(見圖5)下可以看到其運行平均時間為436 μs,該算法生成的代碼較少,盡管采用循環(huán)算法,執(zhí)行的效率還是比較高。 圖5 代碼長度和運行時間 5 結 語 從上述3種算法程序編譯生成的代碼和運行性能來看,可得出如下結論: (1) 對于HS1101傳感器,接入555振蕩電路后, F-RH反應方程式為復雜的多項式,由于51單片機運算能力的限制,程序編譯后所消耗的資源過多,故可根據(jù)實驗采樣,具體分析采樣數(shù)據(jù)的特點,將特性曲線分段,用近似線性的方法來處理。 (2) 由于51系列CPU為8位機,直接支持的是8位整數(shù)運算,凡涉及到浮點數(shù)的運算,都要調(diào)用浮點數(shù)運算函數(shù)。該函數(shù)的體積龐大,生成的機器代碼較長,并將占用大量的ROM,無論是從執(zhí)行效率,還是合理利用存儲器出發(fā),程序中應盡量精簡實數(shù)計算式。 (3) 在C51中,程序生成的代碼長度和執(zhí)行效率不僅與C語言本身所采用的語句結構有關,更與51系列單片機本身的指令系統(tǒng)有關,故要提高C51程序的效率,在算法設計等環(huán)節(jié)必須綜合考慮單片機硬件支持條件。由于51系列CPU直接支持ROM查表指令,故當系統(tǒng)需要數(shù)值計算時,尤其對于在總字節(jié)小于127 B內(nèi)的數(shù)據(jù)表,采用查表算法,用空間換時間,可以大幅度提高執(zhí)行效率。 參考文獻 [1]徐愛均,彭秀華 .單片機高級語言C51Windows環(huán)境編程與應用.北京:電子工業(yè)出版社,2001. [2]馬宗梅.單片機C語言應用程序設計.北京:北京航空航天大學出版社,2001. [3]賴麒文.8051單片機C語言徹底應用.北京:科學出版社,2007. [4]張永楓.單片機應用實訓教程.西安:西安電子科技大學出版社,2005. [5]常君,李延.濕度傳感器HS1101在智能家居控制系統(tǒng)中的應用.電子測試,2007(12):71-73. [6]梅麗鳳.單片機原理及接口技術.北京:清華大學出版社,2007. [7]眭碧霞.單片機及其應用.2版.西安:西安電子科技大學出版社,2003. [8]沈紅衛(wèi).單片機應用系統(tǒng)設計實例與分析.北京:北京航空航天大學出版社,2003. [9]何立民.單片機應用技術選編(8).北京:北京航空航天大學出版社,2000. [10]李廣弟.單片機基礎.北京:北京航空航天大學出版社,1994. 作者簡介 邱玉娟 女,1963年出生,江蘇江陰人,實驗師,本科。研究方向為單片機應用。 注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文