ADC硬件電路

ADC采樣的硬件電路比較簡單,經過調整之后的電路通過R、C濾波接到ADC采樣端口。

如果對精度有要求,可以在單片機的AD基準電壓的輸入腳Vref接入高精度的穩壓電源。

可以采用TL431提供Vref電壓。

需要注意輸入采樣電壓的瞬時值不能操作ADC端口允許的輸入電壓范圍。

ADC端口的輸入電阻不能過大,否則在多路ADC轉換時,ADC模塊的采樣電容可能沒有足夠的時間采樣到電壓就開始轉換,影響ADC的精度。

一般來說,單片機只有有限幾個ADC模塊,而為了支持盡可能多的ADC通道,在單片機內部通過查模擬開關進行通道的切換。

比如STM32F103的單片機,其內部有3個ADC模塊,支持10幾個ADC通道。

因此單片機在做ADC轉換時,有如下三個步驟:

切換通道,通過單片機的通道選擇寄存器控制內部的模擬開關切換ADC通道。

電壓采樣,通過一定ADC時鐘的延時,使得ADC端口電壓被采集到ADC模塊的采樣電容上。

數值轉換,通過逐次逼近的原理,對采樣到采樣電容上的電壓與參考電壓Vref進行比較,得到AD數值。

這幾個步驟都需要編寫單片機的程序實現。

ADC一次采樣率的計算,

一次ADC采樣的時間包括:

采樣電容采樣的時間+轉換時間,

采樣電容采樣的時間通過寄存器進行設置。

逐次逼近的ADC,采用二分法進行逐次逼近,其轉換時間一般為ADC的位數+1個ADC時鐘。

比如14位的ADC,其轉換時間為15個ADC時鐘。

對于周期性的自動觸發轉換,其單次采樣的時間必須要小于ADC的轉換周期。

比如:

采樣時間為10us,ADC時鐘為1us,14位的ADC,單次轉換時間約為10us+15us=25us,采樣率必須

單片機的ADC程序,主要包括以個方面:

ADC模塊的初始化,包括:

輸入端口的初始化配置,需要把端口配置成模擬輸入口。

參考電壓初始化,選擇參考電壓。

ADC時鐘初始化,設置ADC時鐘的分頻等,使得ADC的時鐘既能滿足ADC模塊的規格要求,又能滿足ADC采樣速率的要求。

設置采樣時間,以及轉換的啟動觸發源。

如果需要進行周期性等間隔采樣,比如采樣市電電壓、電流計算真有效值,可以利用定時器作為ADC的啟動觸發源。

否則可以通過軟件控制ADC的啟動位進行觸發轉換。

ADC轉換的狀態機

大部分工程師編寫的ADC代碼,將ADC配置->采樣->轉換->讀結果一次性操作完成。在代碼中,通過延時進行采樣,再while等待轉換完成標志之后讀取數值。

這樣的代碼執行效率低,在ADC轉換時,無法處理其它邏輯,響應的實時性差。

軟件控制觸發的ADC,其狀態機如下:

單片機adc采樣原理

以下是本人使用的ADC轉換程序,用來檢測溫度、濕度、電壓等模擬量。

單片機adc采樣原理

如果是周期性的自動觸發轉換,需要配置轉換完成中斷,在該中斷程序中讀取結果進行處理。