热敏电阻-温度换算算法(分段线性拟合法)
概要
在工業(yè)上,會有各種讀取環(huán)境溫度,或讀取目標(biāo)物體溫度的需求,通常用到的方案有:傳感器測溫;熱敏電阻測溫等。本篇著重講解使用熱敏電阻測溫的方法。
熱敏電阻
何為熱敏電阻?熱敏電阻即為熱電偶傳感器,也稱為NTC,自身的阻值會隨著環(huán)境溫度的改變而改變,且為非線性變化,某品牌的熱敏電阻阻值表如下所示,可見該熱敏電阻本身有一定的設(shè)計誤差,在同一溫度下,由于設(shè)計誤差導(dǎo)致的溫度讀取差異可在25℃到30℃之間可達(dá)到±0.3℃左右。
該熱敏電阻大致溫度-電阻曲線如下圖所示。
由圖可見,想要精確獲取溫度值,應(yīng)先獲取電阻值,然后使用擬合法,對溫度-電阻曲線進(jìn)行擬合,根據(jù)擬合后的函數(shù)關(guān)系以及當(dāng)前熱敏電阻的電阻值,運算出相應(yīng)的溫度值。
電路設(shè)計
熱敏電阻采樣電路如圖所示,使用電阻分壓的形式,將熱敏電阻的變化通過電壓的變化表現(xiàn)出來,再經(jīng)過電壓跟隨器進(jìn)行穩(wěn)定,并用低通濾波器進(jìn)行濾波,此處也可用軟件濾波進(jìn)行濾波。
獲取到電壓值后,即可根據(jù)供電電壓、采樣到的電壓,還有上拉的分壓電阻的阻值三者的關(guān)系進(jìn)行運算,即可獲取到熱敏電阻的阻值。
R熱敏 / ( R熱敏 + R10K ) = VTP / V12V
擬合算法
1、使用多元擬合算法精確度難以達(dá)到要求,且對微控制器的運算負(fù)擔(dān)較重。故不適用。
2、使用線性擬合算法運算量小,但由于溫度跨度較大,無法獲取準(zhǔn)確擬合。
3、使用分段線性擬合算法,可克服以上兩種算法所存在的問題。
以下內(nèi)容為筆者運算分析的結(jié)果,目的在于分析分段線性擬合算法的準(zhǔn)確度以及實際應(yīng)用的可行性。
擬合算法是將所選溫度節(jié)點兩端的溫度值以及對應(yīng)的電阻值在笛卡爾坐標(biāo)系中進(jìn)行連線,形成二元一次函數(shù)。以25℃到30℃之間為例。如圖是以25℃到30℃之間線性擬合后的結(jié)果,函數(shù)為:y = -0.3406 * x + 18.52。
將25℃到30℃的源溫度-電阻值曲線使用Matlab進(jìn)行二次方擬合,可得如下圖所示結(jié)果。由圖可知,擬合結(jié)果為 y = 0.007411 * x^2 - 0.748 * x + 24.07,且殘差小于0.005。即可認(rèn)為已經(jīng)完全等同于源曲線。
將25℃到30℃的實際曲線與線性擬合出來的直線重疊,可見二者是有一定誤差的,且越靠近兩個溫度節(jié)點中心,誤差越大。
以下找出誤差最大的點的位置,
設(shè)二次方擬合曲線y1 = 0.007411 * x^2 - 0.748 * x + 24.07;
設(shè)線性擬合直線y2 = -0.3406 * x + 18.52;
令f(x) = y2-y1,x∈[25,30];
得f(x) = -0.007411x^2 + 0.4074x -5.57,x∈[25,30];
則f’(x) = -0.014822*x + 0.4074 = 0,x∈[25,30]時,即為函數(shù)f(x)的拐點,計算可得當(dāng)x = 27.49 ≈ 27.5時,f’(x) = 0。
如圖所示,當(dāng)x∈[25,27.5)時,f’(x)>0;當(dāng)x∈(27.5,30]時,f’(x)<0。即當(dāng)當(dāng)前溫度位于兩個取樣點中間時,誤差達(dá)到最大值。
f(27.5) = 0.029。即當(dāng)前溫度為27.5℃時,計算出的電阻值與實際電阻值誤差最大,為0.029kΩ。查表可知,由算法計算出的溫度誤差最大僅為+0.1℃,已經(jīng)遠(yuǎn)小于熱敏電阻本身因為制作工藝而導(dǎo)致的誤差(±0.3℃)。
同理可推算出取溫度節(jié)點間隔為10的情況,取[20,30]之間的數(shù)據(jù)進(jìn)行運算。使用matlab擬合曲線后則可得:f’(x) = 0時,x = 24.95 ≈ 25;x∈[20,25)時,f’(x)>0;當(dāng)x∈(25,30]時,f’(x)<0。即當(dāng)當(dāng)前溫度位于兩個取樣點中間時,誤差達(dá)到最大值。f(25) = 0.397kΩ,即當(dāng)取樣間隔為10℃時,最大計算誤差不超過1℃。
分段擬合
以上說明了線性擬合算法在不同溫度間隔下的擬合精度,可知在不考慮電阻本身設(shè)計誤差的情況下,溫度分割間隔為5℃時,誤差最大不超過+0.1℃;在溫度分割間隔為10℃的情況下,誤差最大不超過+1℃。在不需要精確測量的溫度區(qū)間,可使用10℃間隔進(jìn)行運算,增加運算速度;在需要精確測量的溫度區(qū)間,可使用5℃間隔進(jìn)行運算,增加測量精度。
于是設(shè)計出以下算法,
1、首先將溫度區(qū)間進(jìn)行劃分,在不需要精確測量的地方,使用10℃為一分割;在需要精確測量的地方,使用5℃為一分割。使用二維數(shù)組存儲對應(yīng)溫度下的標(biāo)準(zhǔn)電阻值。
2、然后根據(jù)測量到的電壓值進(jìn)行運算,獲取當(dāng)前的電阻值(若需要更為精確地獲取到實際溫度,可用標(biāo)準(zhǔn)儀器與熱敏電阻測出的實際溫度做對比,將溫度差值寫進(jìn)代碼中,對使用的熱敏電阻進(jìn)行校準(zhǔn))。
3、在代碼中進(jìn)行掃描,判斷熱敏電阻的阻值所處的溫度范圍,然后在此區(qū)間中進(jìn)行擬合運算,將獲取到的熱敏電阻阻值輸入到擬合出來的函數(shù)中,即可獲得當(dāng)前的溫度值。
算法使用二維數(shù)組存儲溫度節(jié)點對應(yīng)的電阻值,可根據(jù)工程師需要直接修改二維數(shù)組即可,可根據(jù)實際情況,隨意增加或減少溫度節(jié)點的數(shù)量,無需改動算法。同時使用了自動線性插值算法,無需工程師手動計算函數(shù),代碼可根據(jù)二維數(shù)組的參數(shù)直接匹配運算。增加了可移植性與可拓展性。
當(dāng)然也可在代碼運行之后就根據(jù)二維數(shù)組直接運算出每一段的k和b,或由工程師直接運算出每一段的k和b,放入代碼中,每次只需要匹配溫度區(qū)間即可直接運算溫度,無需每次都進(jìn)行擬合。
謝謝閱讀,有任何問題或新思路,均可溝通交流。
歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處:https://blog.csdn.net/qq_33751193/article/details/115268541
總結(jié)
以上是生活随笔為你收集整理的热敏电阻-温度换算算法(分段线性拟合法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文分为哪几个级别(一)
- 下一篇: linux sendmail