NTC作為一種負溫度系數熱敏電阻,其阻值隨溫度升高而降低。利用熱敏電阻的特性可以做溫度傳感器檢測溫度應用在單片機中。下面簡單介紹下,在單片機中AD檢測熱敏電阻電壓值,然后轉換成電阻值,求出當前的實際溫度。 一、熱敏電阻公式 NTC 熱敏電阻溫度計算公式:Rt = R *EXP(B*(1/T1-1/T2)) 其中,T1和T2指的是K度,即開爾文溫度。 Rt 是熱敏電阻在T1溫度下的阻值。 R是熱敏電阻在T2常溫下的標稱阻值。100K的熱敏電阻25℃的值為100K(即R=100K)。T2=(273.15+25) EXP是e的n次方 B值是熱敏電阻的重要參數 通過轉換可以得到溫度T1與電阻Rt的關系T1=1/(ln(Rt/R)/B+1/T2) (所以對應只有一個Rt未知數即可求出T1實時溫度) 對應的攝氏溫度t=T1-273.15,同時+0.5的誤差矯正。 二、硬件連接方式 單片機通過ADC檢測熱敏電阻電壓值,或者相關分壓值。一般在熱敏電阻上串聯(lián)與Rt阻值相同的分壓電阻。因為計算T1公式中需要知道Rt/R的比值關系,所以在這樣的串聯(lián)分壓電路時電阻比值即等于電壓比值,不需要將測得電壓值再換算成電阻值。具體電路圖如下: 圖中的檢測電壓是測分壓電阻R3的,一般來說直接測RTC更為直觀。R2由于單片機IO的高阻態(tài)等設置,R2上相當于開路,所以測得電壓可以當作為R3上的電壓。 三、程序實現(xiàn) ADC獲取過程就不再贅述了,相關程序可以在前一篇博客中查看,我這邊直接將獲取了相應溫度后如何處理程序展示下: uint16_t TempValue_Calculate( float TempADCValue ) { float TempValue = 0; float res_proportion = (vdd_value-TempADCValue)/TempADCValue; //電阻比值相當于電壓比值,根據電路圖計算, TempValue = 1.0/( (log(res_proportion))/3950.0 + 1.0/(273.15+25.0) ) - 273.15; //JlinkPrintf("current temp is %.2f\r\n,", TempValue); return (uint16_t)TempValue; } // vdd_value為內部電壓值,TempADCValue為對應AD檢測的電壓值(在這邊是電路圖中的R3電壓) 補充下知識點: 數學中的公式和c語言中有小小的區(qū)別。 1、數學中 log是對數符號,右邊寫真數和底數(上面是真數,下面是底數) lg是以10為底數(例lg100=2)(lg為常用對數) ln是以e為底數(lne2=2)(ln為自然對數 e=2.7182818284590452353602874713527...) 2、c語言中 c語言里面只有兩個函數log和log10 其中 函數 log(x) 表示是以e為底的自然對數,即 ln(x) 函數 log10(x) 以10為底的對數,即 lg(x) 以其它數為底的對數用換底公式來表示 函數如下: double logab(double a,double b) { return log(b)/log(a); } ———————————————— 版權聲明:本文為CSDN博主「眾緲之門」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/qq_42660303/article/details/84145382 |