文中我以MF58 玻殼測溫型 NTC 熱敏電阻器為例,測量範圍為:-50度~250度; 因為項目原因,我的測溫範圍隻需要從-20度~180度就可以了。
NTC 5K B值:3950
如果直接用拟合二次方程計算,就會有小數,乘法,除法,指數運算,對于單片機的話,就要花很多的時間去處理。 查表法則可以很好地提高處理效率。
電路非常簡單,如果要實現多路溫度檢測,則單片機隻需要增加多路模拟開關就好了。
根據對應型号的NTC的溫度-阻表對照表(見本底)。 而我們隻需要按每10度,取幾個點。 我在程序中從-20度~180度,取了21個點。
再EXCEL裡,拉個表,計算一下。 我使用的是MSP430F249,adc為12位,滿度為:4096
計算公式為:=ROUND(B2*1000/(B2*1000 10000)*4096,0)
然後轉為16進制,不轉也成,16進制看着舒服。
轉換公式為:="0x"&DEC2HEX(C2)&","
實際取值為:-20度至180度。
然後我們在程序裡建一個表。我不需要小數,所以直接将最終結果轉換成了整數。如果你需要小數位,就把程序适當地改一下。
查表算法非常簡單,根據當前ADC讀到的值對表裡查找接近值,取得整數部分, 然後再把相差的值,去和 前後範圍做比例計算。 這樣就得到了後面的小數部分。
如果你采用PTC,也是基本同樣的思路。比如電機測量常用的KTY84-130。 有時間下次再也出個PTC的。
//----------------------------------------------------------------------------//
//-20 ~ 180,adc raw vaule R2/(R1 R2)*4096 | R1=10000(ohm) on board
//MF58_B3950 1%
#define INVALID_TEMP (int)32767
#define MAX_NTC_TABLE_CT 21
const int Table_NTC[MAX_NTC_TABLE_CT]={//0xF21,0xE6D,
0xD52,0xBCF,0x9F7,
0x800,0x629,0x496,0x35A,0x26F,
0x1C5,0x14B,0x0F3,0x0B5,0x088,
0x068,0x050,0x03F,0x031,0x028,
0x020,0x01A,0x016,
};
//----------------------------------------------------------------------------//
// MF58 B3950 1% Table_NTC
//----------------------------------------------------------------------------//
int Temp_Convert_NTC_By_Table(uint16 adc_raw_value)
{
int i,tmp=INVALID_TEMP;
for(i=MAX_NTC_TABLE_CT-1;i>=0;i--)
{
if (adc_raw_value <= Table_NTC[i])
{
tmp=i*10-20;
//calculate decimal part
if ((i>=0)&&(i<MAX_NTC_TABLE_CT-1))
{
tmp=tmp (int)(((float)(Table_NTC[i]-adc_raw_value)/(float)(Table_NTC[i]-Table_NTC[i 1]))*10.0 0.5);
}
break;
}
}
return tmp;
}
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!