盧玉波,石鑫
(海信集團(tuán)有限公司,青島266071)
現(xiàn)代家電(如冰箱、空調(diào)等),功能越來(lái)越多,技術(shù)含量越來(lái)越高,這些家電大多使用單片機(jī)進(jìn)行控制。近幾年來(lái)單片機(jī)得到了飛速的發(fā)展,從8位機(jī)發(fā)展到目前的32位機(jī),存儲(chǔ)器從OTP發(fā)展到現(xiàn)在的FLASH,內(nèi)部資源也越來(lái)越豐富。但是家電產(chǎn)品追求利潤(rùn),單片機(jī)在選型時(shí),往往選擇能滿足要求的最低配置,在復(fù)雜的設(shè)計(jì)中,常常會(huì)遇到內(nèi)部FLASH空間不夠的問(wèn)題。為此,本文針對(duì)家電產(chǎn)品常用的溫度測(cè)量,提出了一種查表數(shù)據(jù)壓縮算法,有效降低了FLASH空間占用。
NTC(Negative Temperature Coefficient,負(fù)溫度系數(shù)熱敏電阻)是指隨溫度上升電阻呈指數(shù)關(guān)系減小、具有負(fù)溫度系數(shù)的熱敏電阻現(xiàn)象和材料[1]。NTC當(dāng)作溫度傳感器,在家電、汽車電子、醫(yī)療儀器、手機(jī)電池及充電電器等方面應(yīng)用廣泛。在比較高檔的冰箱上,會(huì)用到6~10只NTC,各NTC的溫度轉(zhuǎn)換是程序設(shè)計(jì)的重要部分。
在實(shí)際產(chǎn)品設(shè)計(jì)應(yīng)用中發(fā)現(xiàn),NTC電阻值和溫度變換是成非線性關(guān)系的[2]。二者關(guān)系如下所示:
RT=RN×exp[B(1/T-1/TN)] (1)
其中,RT是在溫度為T時(shí)的NTC熱敏電阻值,RN是額定溫度為TN時(shí)的NTC熱敏電阻值,T為所測(cè)溫度。因?yàn)椴牧铣?shù)B本身也是溫度T的函數(shù),所以式(1)是經(jīng)驗(yàn)公式,只有在額定溫度TN或額定電阻阻值RN的有效范圍內(nèi)才具有一定的精度,在全部范圍內(nèi)偏差可能超過(guò)10%。
在設(shè)計(jì)冰箱時(shí),會(huì)根據(jù)具體的應(yīng)用部位選擇不同參數(shù)的NTC,并按照冰箱間室的不同特征溫度選擇NTC的額定溫度。如冷藏室溫度為1~8℃,特征溫度為5℃,測(cè)量冷藏室溫度的NTC選擇R(5℃)=5K06,B(5/25℃)=3 839K;冷凍室的溫度為-15~-25℃,特征溫度為-18℃,測(cè)量冷凍室溫度的NTC選擇R(-18℃)=16K9,B(-18/25℃)=3 771 K;測(cè)量環(huán)境溫度的 NTC選擇R(25℃)=5K0,B(5/25℃)=3 839K。
以冷凍室溫度測(cè)量電路為例,如圖1所示,分壓電阻R1=10 kΩ,若ADC轉(zhuǎn)換精度為8位,則NTC所測(cè)溫度經(jīng)ADC轉(zhuǎn)換后的值為255×RT/(RT+10)。圖2給出了1.3節(jié)中3種參數(shù)的NTC的溫度-電阻值-A/D值的部分?jǐn)?shù)據(jù)。
圖1 冷凍室溫度測(cè)量電路
圖2 RT表及對(duì)應(yīng)的A/D值
在實(shí)際應(yīng)用中,單片機(jī)性能和公式的偏差決定了不可能由式(1)直接推算出所測(cè)溫度,簡(jiǎn)便可行的辦法是查表。以冷凍室溫度傳感器為例,溫度測(cè)量范圍為-40~40℃,共81個(gè)溫度值,對(duì)應(yīng)的A/D值為220~25,共196個(gè)。
每個(gè)溫度值對(duì)應(yīng)1~4個(gè)A/D值,每個(gè)A/D值對(duì)應(yīng)一個(gè)溫度值。為了處理簡(jiǎn)便,將溫度范圍調(diào)整為0~80℃,可得到以下數(shù)組temp_f1:
由此可得到NTC所測(cè)溫度:
其中AD值是A/D轉(zhuǎn)換后的值。
這是最普通直接的算法,但在單片機(jī)應(yīng)用領(lǐng)域,存在表格數(shù)據(jù)所占空間太大的問(wèn)題。在冰箱中,有多種參數(shù)的NTC,表格數(shù)據(jù)所占空間在0.5 KB以上,對(duì)單片機(jī)的選型和成本影響很大。必須采用某種形式的壓縮算法,并且是無(wú)損的壓縮方式,這在單片機(jī)內(nèi)存空間緊張時(shí)非常有用。
鑒于查表法產(chǎn)生的表格數(shù)據(jù)占據(jù)存儲(chǔ)空間量大的問(wèn)題,本文提出了一種實(shí)用的無(wú)損壓縮查表算法。用1個(gè)字節(jié)表示2個(gè)溫度值,如:-40℃,對(duì)應(yīng)的A/D值有2個(gè),-39℃,對(duì)應(yīng)的A/D值有2個(gè),可以用十六進(jìn)制數(shù)據(jù)0x22表示-40℃和-39℃對(duì)應(yīng)的A/D值。得到數(shù)組temp_f2,數(shù)組temp_f2比數(shù)組temp_f1所占空間減少了79%,但包含的信息是相同的。
當(dāng)然,還可以進(jìn)一步壓縮,從圖2中可以看出,每個(gè)溫度對(duì)應(yīng)的A/D值不超過(guò)4個(gè),因此可以用1個(gè)字節(jié)的2位表示1個(gè)溫度值,那么1個(gè)字節(jié)就表示4個(gè)溫度值。以上數(shù)組可壓縮成21個(gè)字節(jié),節(jié)省空間89.2%,這種壓縮方法在解壓縮時(shí),耗費(fèi)的程序空間要大一些。圖3為將數(shù)組temp_f2壓縮/解壓縮的流程圖。
圖3 數(shù)組temp_f2壓縮/解壓縮的流程圖
對(duì)于一款ROM為4 KB的單片機(jī)而言,使用本文提出的無(wú)損壓縮算法所占的內(nèi)存空間為0.08 KB,未使用壓縮算法處理的表格數(shù)據(jù)占內(nèi)存空間為0.53 KB。選擇樣本為500臺(tái)的家用電冰箱做測(cè)試,發(fā)現(xiàn)程序跑飛的概率二者分別為0%和0.2%,驗(yàn)證了本算法的可行性。
本文給出的壓縮算法,可有效地降低溫度轉(zhuǎn)換部分程序占用量,在家電產(chǎn)品巨大的成本壓力下,讓單片機(jī)有限的FLASH存儲(chǔ)空間容納更多的功能。
[1]王恩信,荊玉蘭,王鵬程,等.NTC熱敏電阻器的現(xiàn)狀與發(fā)展趨勢(shì)[J].電子元件與材料,1997(4).
[2]孟凡文.NTC熱敏電阻的非線性誤差及其補(bǔ)償[J].傳感器世界,2003(5).