ADC全稱Analog Digital Convertor,中文名稱是模擬數字轉換器。ADC的主要功能是將外界的模擬形式的連續信號轉換成易于數字處理的,數字形式的離散信號。目前ADC主要是將外界輸入的模擬電壓信號經過采樣保持和內部量化形成數字信號。
YTM32B1Lx系列芯片內置12bit采樣率1MSPS的ADC,在YTM32B1Mx系列芯片,內置ADC采樣頻率最高可以到2MSPS,采樣精度同樣為12bit,可以滿足汽車上大部分的模擬信號轉換需求。L和M系列中的ADC主要是采樣速率上有一定差異,在使用方式上基本是一致的,所以后續都統一介紹。
SAR ADC的基本原理
YTM MCU內部ADC采用逐次逼近結構的ADC, Successive-approximation register ADC(SAR ADC), 這種結構的ADC總體面積比較小,功耗比較低,非常適合MCU中的應用場合,典型的SAR ADC結構如下:
ADC SAR框圖 From White Flye
在圖中:
- DAC (digital-to-analog converter):數字模擬轉換器
- EOC (end of conversion):結束轉換
- SAR (successive approximation register):連續逼近寄存器,用于存放轉換的中間結果和最終結果
- S/H (sample and hold circuit):采樣保持電路
- Comparator :電壓比較器,對數字模擬轉換器輸出的電壓與輸入電壓進行比較
- VIN :輸入電壓
- VREF :參考電壓
SAR ADC是通過內部DAC重建一個逐次逼近于采樣保持電路的電壓,經過比較器之后產生數字結果,由寄存器保存該結果,并生成下個周期需要的重建電壓。經過多次比較之后,我們就得到了ADC的轉換結果。
實際設計中,為了靈活適應各種應用,ADC的輸入級一般會有一個MUX模塊,用于實現多通道的時分復用。
ADC模塊框圖
YTM32 MCU ADC模塊包含SAR ADC轉換核心、ADC輸入通道復用模塊(Channel MUX)、轉換控制數字邏輯幾個部分。ADC模塊的系統框圖如下:
ADC模塊框圖
ADC的模擬通道復用模塊相當于一個多選一的開關,開關選通之后,對應的外部通道和內部ADC轉換核心連接,這個時候就可以對該通道進行轉換。ADC有一部分外部通道是直接連到一些內部模塊的輸入。比如說內部的一些參考電壓,溫度傳感器的電壓輸出等等。ADC可以通過這些通道,實現對芯片內部模塊的一些監測。
SAR ADC的結構特性使得ADC完成采樣之后,外部信號的輸入就可以和ADC斷開。這對于ADC的時間計算是比較重要的。比如當使用ADC做電機控制的電流采樣的時候,我們只需要保證在ADC采樣時間內信號是穩定的,而不用將轉換時間考慮在內。實際上當ADC完成采樣之后,即使外部信號出現波動或者出現噪聲,對ADC的轉換也是沒有影響的。
ADC的數字控制邏輯,主要實現對ADC的轉換控制和結果保存等相關操作。在ADC中我們內置了一個FIFO可以用于緩存ADC的轉換結果。ADC轉換結果的讀取有中斷、DMA和輪詢等幾種方式。ADC內部還有一個Watch Dog模塊, 可以實現對某個或者所有通道電壓的持續監測,當通道電壓超出預定范圍之后,ADC會產生一個特殊的中斷上報系統。
另外這個ADC還支持通過降低轉換精度提高采樣率的方式。這個實際上也是SAR ADC的一個特性。YTM32 MCU中ADC支持12bit、10bit、8bit幾種轉換精度。
ADC轉換時間計算
嵌入式應用中一般對ADC的轉換時間比較敏感,因為涉及到軟件的周期調度,如果ADC不能在給定的時間內轉換結束,那么整個系統調度可能會出現問題。
決定ADC轉換時間的主要因素有ADC的時鐘選擇、ADC的時鐘分頻以及ADC采樣精度、采樣時間等有關系。
從SAR ADC的結構框圖可以看出,ADC需要依賴一個時鐘基準,ADC模塊支持通過IPC來選擇轉換的時鐘和分頻。而ADC內部還有額外的分頻,所以ADC的實際工作頻率為:
這里計算的時候分頻均代表模塊實際分頻。
ADC每次轉換所需要的時鐘數量=ADC的轉換精度+ADC采樣時間+2,比如ADC轉換精度為12,采樣時間為2個時鐘周期,那么總共需要的轉換時間為 12 + 2 + 2 = 16 個時鐘周期,假如ADC的實際工作頻率為16MHz,那么一次轉換所需要的時間就是1us,對應的采樣速率就是1MSPS。
目前產品手冊上標的都是在12bit模式下的最高轉換速率,實際上針對應用對采樣速率要求比較高,而采樣精度要求不高的情況,可以通過降低采樣精度方式提高采樣率,比如采樣精度降低為8,那么一次轉換之需要12個時鐘周期,這種情況下M系列ADC最高轉換速率可以到2.67MSPS,L系列則為1.33MSPS。
注意,這里采樣速率只適用于ADC連續轉換模式,當ADC工作在單次轉換或者單序列轉換模式下,ADC的Trigger輸入還需要3~5個時鐘,ADC 開了auto off功能之后還需要一個Startup時間,所以這些情況下ADC的轉換速率都是有一定的下降的。
ADC的工作模式
YTM32 MCU中ADC主要有三種工作模式和兩種觸發方式:
typedef enum
{
ADC_CONV_STEP = 0x00U, /*!< One channel convert per trigger. */
ADC_CONV_LOOP = 0x01U, /*!< One loop convert per trigger. */
ADC_CONV_CONTINUOUS = 0x02U /*!< Continuous convert per trigger. */
} adc_sequence_mode_t;
ADC_CONV_STEP
: ADC每次觸發轉換一個通道,轉換結果放在FIFO,并等待下次觸發。轉換的通道按照Sequence中設定的順序依次轉換。ADC_CONV_LOOP
:ADC每次觸發轉換一個Sequence(序列),序列的最高長度一般是8個通道,轉換后將結果依次寫入FIFO,并等待下一次觸發。轉換結果通過讀取FIFO獲得,數據的順序和序列中配置好的順序相同。這種模式是ADC最常用的一種工作方式,一般都是將需要采集的ADC通道配置到序列中,需要轉換的時候通過硬件或者軟件觸發開始轉換,轉換結果通過中斷或者DMA直接讀取一個序列的結果。ADC_CONV_CONTINUOUS
:連續轉換模式,ADC在觸發之后,按照Sequence連續轉換,Sequence轉換結束之后會自動重新開始。當ADC連續轉換時候要注意及時從FIFO中將結果讀走,當開啟WAIT模式之后,如果數據沒有及時讀走,ADC會等待結果讀取再繼續轉換。
ADC的兩種觸發方式指的是硬件觸發和軟件觸發:
- 硬件觸發:ADC在某些事件發生的時候開始ADC轉換,事件來源可以是PTU和TMU,比如電機控制中,eTMR可以通過TMU模塊觸發ADC采樣。PTU和TMU的觸發選擇位于CIM模塊。
- PTU觸發,僅部分模塊支持,PTU可以將一次觸發事件分解成多個觸發,一般配合
ADC_CONV_STEP
模式使用,可以精確控制ADC每個通道的轉換點。 - TMU觸發,常用的硬件觸發方式,每次出發可以轉換一個STEP(單個通道)或者一個LOOP(一個序列)。
- PTU觸發,僅部分模塊支持,PTU可以將一次觸發事件分解成多個觸發,一般配合
- 軟件觸發:通過寫入ADC的START位來開始ADC的轉換
注意:配置ADC硬件觸發模式的時候,需要先配置好ADC的工作模式并開啟ADC之后再配置硬件觸發(TMU或PTU)。
ADC的轉換時只會按照Sequence中配置好的順序進行轉換,結果讀取也必須按照sequence讀取,不支持單獨開啟序列中的某一個通道,或者單獨讀取序列中某一個通道的轉換結果。
ADC使用注意事項
為了更好的使用芯片內部的ADC模塊,應用軟件操作ADC時應該注意以下事項:
- ADC模塊本身由VDDA供電,但是ADC的參考電壓默認是VREFH/VREFL(可以軟件改動為VDDA),所以ADC正常工作的必要條件是VDDA和VREFH/VREFL供電正常,VREFH和VREFL都要正確連接。
- ADC工作在連續轉換模式時,ADC輸出結果要及時通過中斷或者DMA讀走,否則會出現ADC等待數據讀取或者ADC轉換結果被覆蓋的情況。
- ADC的兩級分頻后的時鐘不要超頻,也就是ADC轉換速率不能高于DS中規定的速率,否則ADC雖然可以繼續出轉換結果,但是結果會有很大的誤差。
- ADC模塊本身支持在低功耗模式下工作,但是如果應用僅需要ADC在RUN模式工作,則進入低功耗模式之前要關閉ADC,或者打開ADC的auto off功能,并在ADC完成當前轉換后再進入低功耗模式。ADC在低功耗模式開啟情況下,VDDA上會增加1~2mA的電流。
-
傳感器
+關注
關注
2548文章
50678瀏覽量
752010 -
mcu
+關注
關注
146文章
16992瀏覽量
350314 -
轉換器
+關注
關注
27文章
8627瀏覽量
146869 -
SAR
+關注
關注
3文章
414瀏覽量
45898 -
adc
+關注
關注
98文章
6438瀏覽量
544097
發布評論請先 登錄
相關推薦
評論