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