NTC傳感器如下圖所示,NTC的阻抗隨著溫度升高而降低。手冊(cè)給出了阻抗到溫度的轉(zhuǎn)換公式。
我們可以通過(guò)ML51單片機(jī)提供的12位ADC來(lái)讀取該串聯(lián)電阻的分壓,從而根據(jù)參考電阻計(jì)算出傳感器的阻抗,然后利用手冊(cè)的溫度計(jì)算公式計(jì)算出溫度。下圖是手冊(cè)給出的幾個(gè)常用計(jì)算常數(shù)B,可根據(jù)測(cè)量的范圍合理的選擇,用于提高測(cè)量精度。
實(shí)現(xiàn)溫度轉(zhuǎn)換
根據(jù)手冊(cè)提供的公式:R=R0 exp B(1/T - 1/T0);其中R是待測(cè)電阻,R0是某個(gè)溫度T0 K下的已知電阻,B是溫度傳感器常數(shù)。
通過(guò)以上公式反推T = temp=1/((1/T0)+(log(RT/R0)/B));
代入數(shù)據(jù)測(cè)試,例如T0=25攝氏度時(shí)候R0=10K歐姆,主意以上代入實(shí)際計(jì)算時(shí)候要使用絕對(duì)溫度,單位開(kāi)爾文。
經(jīng)過(guò)測(cè)試上述公式可以完成驗(yàn)算,即,正確。
根據(jù)手冊(cè)該型號(hào)的B常數(shù)在25到50度之間采用3380,25到80之間采用3428,25到85之間采用3434,25到100攝氏度之間采用3455.
為了方便,本項(xiàng)目采用3455計(jì)算。
完成代碼如下所示。
//***********************************************************************************************************
// 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)換為溫度作為一個(gè)獨(dú)立的頭文件NTC.h
這樣就可以直接調(diào)用得出攝氏度了。本例子,采用串口打印的測(cè)量結(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;
}
繪制出曲線(xiàn)如下圖所示。
點(diǎn)評(píng):NTC測(cè)量溫度成本低,響應(yīng)迅速,只需要使用1路ADC通道即可。比數(shù)字類(lèi)型的溫度計(jì)驅(qū)動(dòng)更加容易,使用更加靈活,還可以自己實(shí)現(xiàn)校準(zhǔn)功能。
責(zé)任編輯:xj
原文標(biāo)題:實(shí)用應(yīng)用案例:ML51單片機(jī)通過(guò)ADC驅(qū)動(dòng)NTC傳感器測(cè)量溫度
文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
NTC
+關(guān)注
關(guān)注
7文章
416瀏覽量
52012 -
adc
+關(guān)注
關(guān)注
98文章
6443瀏覽量
544129 -
51單片機(jī)
+關(guān)注
關(guān)注
273文章
5698瀏覽量
123215 -
ML
+關(guān)注
關(guān)注
0文章
146瀏覽量
34609
原文標(biāo)題:實(shí)用應(yīng)用案例:ML51單片機(jī)通過(guò)ADC驅(qū)動(dòng)NTC傳感器測(cè)量溫度
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論