NTC傳感器如下圖所示,NTC的阻抗隨著溫度升高而降低。手冊給出了阻抗到溫度的轉換公式。
我們可以通過ML51單片機提供的12位ADC來讀取該串聯電阻的分壓,從而根據參考電阻計算出傳感器的阻抗,然后利用手冊的溫度計算公式計算出溫度。下圖是手冊給出的幾個常用計算常數B,可根據測量的范圍合理的選擇,用于提高測量精度。
實現溫度轉換
根據手冊提供的公式:R=R0 exp B(1/T - 1/T0);其中R是待測電阻,R0是某個溫度T0 K下的已知電阻,B是溫度傳感器常數。
通過以上公式反推T = temp=1/((1/T0)+(log(RT/R0)/B));
代入數據測試,例如T0=25攝氏度時候R0=10K歐姆,主意以上代入實際計算時候要使用絕對溫度,單位開爾文。
經過測試上述公式可以完成驗算,即,正確。
根據手冊該型號的B常數在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(" ----------------");
}
}
將阻抗轉換為溫度作為一個獨立的頭文件NTC.h
這樣就可以直接調用得出攝氏度了。本例子,采用串口打印的測量結果如下圖所示。
/*
電阻值換算到溫度
adc_val:NTC當前的阻抗值,單位歐姆
返回值:攝氏度
*/
float Res_to_Tem(float adc_val)
{
float temp;
temp=1/((1/T0)+(log(adc_val/R0)/B));
return temp-K;
}
繪制出曲線如下圖所示。
點評:NTC測量溫度成本低,響應迅速,只需要使用1路ADC通道即可。比數字類型的溫度計驅動更加容易,使用更加靈活,還可以自己實現校準功能。
-
NTC
+關注
關注
7文章
424瀏覽量
52045 -
adc
+關注
關注
98文章
6496瀏覽量
544495 -
51單片機
+關注
關注
274文章
5702瀏覽量
123532 -
ML
+關注
關注
0文章
149瀏覽量
34646
原文標題:實用應用案例:ML51單片機通過ADC驅動NTC傳感器測量溫度
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論