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