調試備忘錄-NTC電阻的使用(教程 + 代碼)


軟件環境:CodeWarrior 11.1

硬件環境:NXP S9KEAZ64A

傳感器參數:NTC熱敏電阻(R25 = 50k,B25-50 3950) 

寫在前面

  最近做小項目需要用到NTC電阻,因此寫一個調試備忘錄記錄下。

什么是NTC電阻?

  NTC熱敏電阻就是負溫度系數的電阻,當溫度升高時,電阻降低(反之則為PTC電阻)。NTC電阻靈敏度高,溫度分辨率高,但

是測量溫度范圍較窄,通常低於100攝氏度。

NTC電阻與溫度之間的關系

  NTC熱敏電阻溫度和電阻關系最常見的公式就是如下圖基於參數“β”的指數公式,公式比較簡單,也是非常常用的公式。(其中的

β,有些資料也稱為B) 

  其中,

  

 

  因此,如果知道了RT2 、T2和B的值,就可以計算出任意溫度下NTC熱敏電阻的阻值,或者計算出任意NTC熱敏電阻阻值對應的溫

度值。常規應用中,廠家一般會給出T=298.15k下的阻值和B值,不同型號的NTC熱敏電阻其參數也是不同。

 

 

NTC電阻的實際應用

  在購買使用NTC電阻之前,我們需要先確認NTC電阻在25℃的阻值,然后設計溫度采樣電路。可以先和商家確認熱敏電阻的阻值表。

例如:下表部分阻值表的截圖,其中的R25=15KΩ就是熱敏電阻在25℃時候的阻值,B25/50就是25℃-50℃時候的B值。

  因此如果我想檢測溫度的話,直接將檢測到的電阻值帶入上面的公式,就可以得到當前的溫度了。

 

 

  當然,如果你檢測區間不在25℃-50℃,你也可以自己將阻值表里面的數據,帶入公式中,得出你目標區間的B值,進而在一定區間內比較精准的檢測溫度。

  對於NTC熱敏電阻的檢測電路,直接使用最簡單的分壓電路就可以了。如下圖:

                                                                                

RT1阻值的計算方法為:R = (adc_value * 20 * 1.0 /  (adc_all - adc_value))  ;

  其中,adc_all 為你的ADC采樣精度,例如8位精度就是0xFF,adc_value為你的ADC實際采樣值,20為電路中的分壓電阻,20K。1.0是為了確保有小數結果。

所以最終的溫度為:

ADC_Channel_Vlaue = ADC_Read(ch);					//Read ADC value from channel n 
R = (20 * ADC_Channel_Vlaue * 1.0 /(255 - ADC_Channel_Vlaue));		//8位精度
Temperature1_Value = 1/ (log( R / R25 )  / B + 1 / (273.15 + 25));
Temperature1_Value = Temperature1_Value - 273.15;


Temperature1_Value 為最終的溫度。

附上函數的全部代碼

float Temperature_Measurement(UINT8 ch)
{
	UINT8 Temperature_Counter = 0; 
	UINT8 ADC_Channel_Vlaue = 0;
	float Temperature1_Value;	
	float Temperature1_Sum_Value = 0;
	float Temperature1_Average_Value = 0;
	float R25 = 50;
	float R = 0;
	float B = 3950;
	
	while(Temperature_Counter<100)
	{
		Temperature_Counter++;
		ADC_Channel_Vlaue = ADC_Read(ch);		          //Read ADC value from channel n 
		R = (20 * ADC_Channel_Vlaue * 1.0 /(255 - ADC_Channel_Vlaue));	 //
		Temperature1_Value = 1/ (log( R / R25 )  / B + 1 / (273.15 + 25));
		Temperature1_Value = Temperature1_Value - 273.15;
		Temperature1_Sum_Value = Temperature1_Sum_Value + Temperature1_Value;	
		ADC_SC1 = 0	;						
	}		
	
	Temperature1_Average_Value = Temperature1_Sum_Value / Temperature_Counter;	
	
	return (Temperature1_Average_Value);	
}

  

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM