使用ADC時配合FVR的問題

作者 chrC475 於 2018年09月28日 16:52:39
我現時有一些專案會用到LM35DZ來測量空氣溫度,原本的ADC讀取程序是不使用FVR(以VDD作為正參考這樣)。LM35DZ在不低於最低操作電壓時,輸出都是在0.00V至1.00V這範圍,代表攝氏0度至100度。在供應電壓有至少5V時MCU讀取的ADC值屬正常範圍,但供應電壓一旦低於5V時讀取值就會偏高(對於固定的LM35DZ輸出範圍,越低VDD電壓會顯得輸出比例越高)。所以有想到改用FVR作為協調用,然而在測試時得到一些似乎不太符合預期的結果。

這個測試使用16F1939。分多次在不同電壓的環境下,每隔100毫秒讀取一次ADC,每個設定讀取4次,然後寫到EEPROM。測試時LM35DZ的輸出在以下任一的VDD電壓都是非常穩定的0.28V,意味著環境溫度約為28度,在5V下期望ADC值在56至58左右。

使用FVR的情況所用到的設定值如下:

FVRCON
=0x81; //1.024V VREF+
ADCON1=0x83; //結果置右,使用FVR作為VREF+

LM35DZ的輸出永遠無法超過FVR所設定的1.024V所以理應上不會發生讀取值超過1023的結果。

測試結果:

VDD
= 5.12V
使用FVR:A0 A0 A0 A0
不使用FVR:20 20 20 20

VDD
= 4.6V
使用FVR:AF AF AF AF
不使用FVR:2F 2E 2F 2F

VDD
= 3.98V
使用FVR:BF BD BF BF
不使用FVR:3F 3F 40 3F


對於不使用FVR的情況下,讀取值變得越來越高是預料到的。而FVR的輸出電壓一直沒超過VDD電壓喔,但為什麼有使用FVR的情況也是會同樣出現失準的情況呢?

至於為什麼實際讀取值比期望值還要少一半我自行再探討。

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=1&topic_id=22422&post_id=78733