NTC傳感器如下圖所示,NTC的阻抗隨著溫度升高而降低。手冊給出了阻抗到溫度的轉(zhuǎn)換公式。
我們可以通過ML51單片機提供的12位ADC來讀取該串聯(lián)電阻的分壓,從而根據(jù)參考電阻計算出傳感器的阻抗,然后利用手冊的溫度計算公式計算出溫度。下圖是手冊給出的幾個常用計算常數(shù)B,可根據(jù)測量的范圍合理的選擇,用于提高測量精度。
實現(xiàn)溫度轉(zhuǎn)換
根據(jù)手冊提供的公式:R=R0 exp B(1/T - 1/T0);其中R是待測電阻,R0是某個溫度T0 K下的已知電阻,B是溫度傳感器常數(shù)。
通過以上公式反推T = temp=1/((1/T0)+(log(RT/R0)/B));
代入數(shù)據(jù)測試,例如T0=25攝氏度時候R0=10K歐姆,主意以上代入實際計算時候要使用絕對溫度,單位開爾文。
經(jīng)過測試上述公式可以完成驗算,即,正確。
根據(jù)手冊該型號的B常數(shù)在25到50度之間采用3380,25到80之間采用3428,25到85之間采用3434,25到100攝氏度之間采用3455.
為了方便,本項目采用3455計算。
完成代碼如下所示。
//***********************************************************************************************************
// File Function: ML51 series ADC software trigger on shot demo code
//***********************************************************************************************************
#include "ML51.h"
#include "math.h"
#include "NTC.h"
/******************************************************************************
The main C function. Program execution starts
here after stack initialization.
******************************************************************************/
void main ()
{
unsigned int ADCRESULT;
float Rval;
float temp;
/*
For UART0 P0.5 TXD output setting
* include gipo.c in Library for GPIO mode setting
* include uart.c in Library Setting for UART0
*/
MFP_P31_UART0_TXD; // UART0 TXD use P0.5
P31_QUASI_MODE; // set P0.5 as Quasi mode for UART0 trasnfer
UART_Open(24000000,UART0_Timer3,115200); // Open UART0 use timer1 as baudrate generate and baud rate = 115200
ENABLE_UART0_PRINTF;
/*
ADCS to trig ADC convert
* include adc.c in Library for ADC initial setting
*/
ADC_Open(ADC_SINGLE,1); //Enable ADC_CH4
ADC_ConvertTime(3,7);
//* find ADC result in ADC interrupt*/
while(1)
{
set_ADCCON0_ADCS; // Software trig adc start
while((ADCCON0|CLR_BIT7)==CLR_BIT7); // wait ADCF = 1;
ADCRESULT = (ADCRH<<4)+ADCRL;
printf(" ADC result = %d ", ADCRESULT);
Timer0_Delay(24000000,100,5000);
Rval=1000*((ADCRESULT*6.2)/(4095-ADCRESULT));
printf(" Rval=%d Ohm",(unsigned int)Rval);
temp=Res_to_Tem(Rval);
printf(" temp=%.2f",temp-K);
printf(" ----------------");
}
}
將阻抗轉(zhuǎn)換為溫度作為一個獨立的頭文件NTC.h
這樣就可以直接調(diào)用得出攝氏度了。本例子,采用串口打印的測量結(jié)果如下圖所示。
/*
電阻值換算到溫度
adc_val:NTC當(dāng)前的阻抗值,單位歐姆
返回值:攝氏度
*/
float Res_to_Tem(float adc_val)
{
float temp;
temp=1/((1/T0)+(log(adc_val/R0)/B));
return temp-K;
}
繪制出曲線如下圖所示。
點評:NTC測量溫度成本低,響應(yīng)迅速,只需要使用1路ADC通道即可。比數(shù)字類型的溫度計驅(qū)動更加容易,使用更加靈活,還可以自己實現(xiàn)校準(zhǔn)功能。
責(zé)任編輯:xj
原文標(biāo)題:實用應(yīng)用案例:ML51單片機通過ADC驅(qū)動NTC傳感器測量溫度
-
NTC
+關(guān)注
關(guān)注
7文章
401瀏覽量
51960 -
adc
+關(guān)注
關(guān)注
97文章
6351瀏覽量
543420 -
51單片機
+關(guān)注
關(guān)注
273文章
5696瀏覽量
122802 -
ML
+關(guān)注
關(guān)注
0文章
144瀏覽量
34533
原文標(biāo)題:實用應(yīng)用案例:ML51單片機通過ADC驅(qū)動NTC傳感器測量溫度
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論