NTC溫度傳感器溫度的采集和資料的處理方式有很多種,有通過ntc溫度公式直接計算溫度的,有通過查表的方法查表的,這裡介紹的是通過二分法查表的方式來處理采集的溫度值。
1.1簡單的采集電路
下圖是通過STM32單片機直接采集的簡單NTC采集電路,NTC和R1通過分壓直接将采集到的電壓經過RC濾波後直接傳給單片機采集,經驗表明R2不能太小也不能太大,太大會影響靈敏度,适當的大一點又會對EMC幹擾又一定的抑制作用。
圖1-1 NTC溫度采集電路
1.2 溫度表的制定
NTC溫度傳感器有很多種規格,首先應該明白所使用NTC的B值是多少,是多少K的,一般根據這兩個參數就能在網上找到對應阻值的阻值表,以B值為3950 10K的NTC傳感器為例。在網上找到對應的溫度阻值表,如圖1-2所示,再根據自己的電路圖,自己單片機采集的位數,求出對應在單片機中的AD采樣值,所用單片機AD的位數是12位,基準電壓為3.3V,根據圖1-1的電路圖,是以在AD值得表達式為:
式中VAL是對應的AD值,
是對應溫度的阻值,将公式輸入表格中,一拉就可以求出各個溫度所對應的AD值,取整儲存在程式的溫度表中,C語言就是儲存在一數組中,到時候查表數組的下标就和溫度有直接的關系了。溫度小數部分可以通過局部線性化的方式求得。
圖1-2 3950 10k部分溫度阻值表
圖1-3 10~50度的AD值
1.3 程式算法處理
通過查表的方法查表,在查表時有人處理的方法是在表中一個個從頭開始去查找,這種方法顯示存在着不足,比較浪費時間。采用二分法查找能節省更多單片機的處理時間周期。二分法查找針對的是一個有序的資料集合,每次通過與區間的中間元素對比,将待查找的區間縮小為之前的一半,直到找到要查找的元素,或者區間被縮小為0,二分查找非常高效,假設資料大小是n,每次查找後資料都會縮小為原來的一半,也就是會除以2,最壞情況下,直到查找區間被縮小為空,才停止,二分法查找在數越多表越大的情況下越能展現出它的優勢。
因為AD值正好是表中的值得機率其實很小,是以每次查找的基本上就是溫度的區間,完了通過局部線性化計算傳回溫度的值。二分法算法如下程式所示。
float binarySearch(u16 key)
{
u8 start = 0;
u8 end = 159;
u8 min =0;
while (start<=end) {
u8 mid = (start+end)/2;
if(key>TempValvue[mid]) end = mid-1;
else if(key<TempValvue[mid]) start = mid+1;
else return mid;
}
//到此處一定是 start>end start = end +1
return (float)end +(float)(key-TempValvue[end])/(TempValvue[start]-TempValvue[end]);
}
溫度值得擷取,AD采樣二分法查找後,可通過一階慣性濾波器濾一下波,這樣采集的溫度值比較穩定,如下面程式所示。
adcnum = Get_Adc_Average(ADC_CHANNEL_1, 1); // 擷取AD的值
Tem = 0.2 * (binarySearch(adcnum) - 10) + (1 - 0.2) * last_Tem; //一階慣性濾波器濾波
last_Tem = Tem;
本人水準有限,如有不妥之處請及時指正
[email protected]