天天看點

利用二分法查找NTC溫度值以及資料采集方法

NTC溫度傳感器溫度的采集和資料的處理方式有很多種,有通過ntc溫度公式直接計算溫度的,有通過查表的方法查表的,這裡介紹的是通過二分法查表的方式來處理采集的溫度值。

1.1簡單的采集電路

下圖是通過STM32單片機直接采集的簡單NTC采集電路,NTC和R1通過分壓直接将采集到的電壓經過RC濾波後直接傳給單片機采集,經驗表明R2不能太小也不能太大,太大會影響靈敏度,适當的大一點又會對EMC幹擾又一定的抑制作用。

利用二分法查找NTC溫度值以及資料采集方法

                                                               圖1-1 NTC溫度采集電路

1.2 溫度表的制定

NTC溫度傳感器有很多種規格,首先應該明白所使用NTC的B值是多少,是多少K的,一般根據這兩個參數就能在網上找到對應阻值的阻值表,以B值為3950 10K的NTC傳感器為例。在網上找到對應的溫度阻值表,如圖1-2所示,再根據自己的電路圖,自己單片機采集的位數,求出對應在單片機中的AD采樣值,所用單片機AD的位數是12位,基準電壓為3.3V,根據圖1-1的電路圖,是以在AD值得表達式為:

利用二分法查找NTC溫度值以及資料采集方法

式中VAL是對應的AD值,

利用二分法查找NTC溫度值以及資料采集方法

是對應溫度的阻值,将公式輸入表格中,一拉就可以求出各個溫度所對應的AD值,取整儲存在程式的溫度表中,C語言就是儲存在一數組中,到時候查表數組的下标就和溫度有直接的關系了。溫度小數部分可以通過局部線性化的方式求得。

利用二分法查找NTC溫度值以及資料采集方法

                                                            圖1-2 3950 10k部分溫度阻值表

利用二分法查找NTC溫度值以及資料采集方法

                                                             圖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]

上一篇: PAT1013

繼續閱讀