盧玉波,石鑫
(海信集團有限公司,青島266071)
現代家電(如冰箱、空調等),功能越來越多,技術含量越來越高,這些家電大多使用單片機進行控制。近幾年來單片機得到了飛速的發展,從8位機發展到目前的32位機,存儲器從OTP發展到現在的FLASH,內部資源也越來越豐富。但是家電產品追求利潤,單片機在選型時,往往選擇能滿足要求的最低配置,在復雜的設計中,常常會遇到內部FLASH空間不夠的問題。為此,本文針對家電產品常用的溫度測量,提出了一種查表數據壓縮算法,有效降低了FLASH空間占用。
NTC(Negative Temperature Coefficient,負溫度系數熱敏電阻)是指隨溫度上升電阻呈指數關系減小、具有負溫度系數的熱敏電阻現象和材料[1]。NTC當作溫度傳感器,在家電、汽車電子、醫療儀器、手機電池及充電電器等方面應用廣泛。在比較高檔的冰箱上,會用到6~10只NTC,各NTC的溫度轉換是程序設計的重要部分。
在實際產品設計應用中發現,NTC電阻值和溫度變換是成非線性關系的[2]。二者關系如下所示:
RT=RN×exp[B(1/T-1/TN)] (1)
其中,RT是在溫度為T時的NTC熱敏電阻值,RN是額定溫度為TN時的NTC熱敏電阻值,T為所測溫度。因為材料常數B本身也是溫度T的函數,所以式(1)是經驗公式,只有在額定溫度TN或額定電阻阻值RN的有效范圍內才具有一定的精度,在全部范圍內偏差可能超過10%。
在設計冰箱時,會根據具體的應用部位選擇不同參數的NTC,并按照冰箱間室的不同特征溫度選擇NTC的額定溫度。如冷藏室溫度為1~8℃,特征溫度為5℃,測量冷藏室溫度的NTC選擇R(5℃)=5K06,B(5/25℃)=3 839K;冷凍室的溫度為-15~-25℃,特征溫度為-18℃,測量冷凍室溫度的NTC選擇R(-18℃)=16K9,B(-18/25℃)=3 771 K;測量環境溫度的 NTC選擇R(25℃)=5K0,B(5/25℃)=3 839K。
以冷凍室溫度測量電路為例,如圖1所示,分壓電阻R1=10 kΩ,若ADC轉換精度為8位,則NTC所測溫度經ADC轉換后的值為255×RT/(RT+10)。圖2給出了1.3節中3種參數的NTC的溫度-電阻值-A/D值的部分數據。

圖1 冷凍室溫度測量電路

圖2 RT表及對應的A/D值
在實際應用中,單片機性能和公式的偏差決定了不可能由式(1)直接推算出所測溫度,簡便可行的辦法是查表。以冷凍室溫度傳感器為例,溫度測量范圍為-40~40℃,共81個溫度值,對應的A/D值為220~25,共196個。
每個溫度值對應1~4個A/D值,每個A/D值對應一個溫度值。為了處理簡便,將溫度范圍調整為0~80℃,可得到以下數組temp_f1:


由此可得到NTC所測溫度:

其中AD值是A/D轉換后的值。
這是最普通直接的算法,但在單片機應用領域,存在表格數據所占空間太大的問題。在冰箱中,有多種參數的NTC,表格數據所占空間在0.5 KB以上,對單片機的選型和成本影響很大。必須采用某種形式的壓縮算法,并且是無損的壓縮方式,這在單片機內存空間緊張時非常有用。
鑒于查表法產生的表格數據占據存儲空間量大的問題,本文提出了一種實用的無損壓縮查表算法。用1個字節表示2個溫度值,如:-40℃,對應的A/D值有2個,-39℃,對應的A/D值有2個,可以用十六進制數據0x22表示-40℃和-39℃對應的A/D值。得到數組temp_f2,數組temp_f2比數組temp_f1所占空間減少了79%,但包含的信息是相同的。

當然,還可以進一步壓縮,從圖2中可以看出,每個溫度對應的A/D值不超過4個,因此可以用1個字節的2位表示1個溫度值,那么1個字節就表示4個溫度值。以上數組可壓縮成21個字節,節省空間89.2%,這種壓縮方法在解壓縮時,耗費的程序空間要大一些。圖3為將數組temp_f2壓縮/解壓縮的流程圖。

圖3 數組temp_f2壓縮/解壓縮的流程圖
對于一款ROM為4 KB的單片機而言,使用本文提出的無損壓縮算法所占的內存空間為0.08 KB,未使用壓縮算法處理的表格數據占內存空間為0.53 KB。選擇樣本為500臺的家用電冰箱做測試,發現程序跑飛的概率二者分別為0%和0.2%,驗證了本算法的可行性。
本文給出的壓縮算法,可有效地降低溫度轉換部分程序占用量,在家電產品巨大的成本壓力下,讓單片機有限的FLASH存儲空間容納更多的功能。
[1]王恩信,荊玉蘭,王鵬程,等.NTC熱敏電阻器的現狀與發展趨勢[J].電子元件與材料,1997(4).
[2]孟凡文.NTC熱敏電阻的非線性誤差及其補償[J].傳感器世界,2003(5).