有人使用STM32F303VC開發(fā)電源方面的產(chǎn)品,想使用4個ADC模塊進(jìn)行同時采樣轉(zhuǎn)換,感覺不知怎么實(shí)現(xiàn)。這里簡單介紹下實(shí)現(xiàn)過程,以供參考。
現(xiàn)在希望四個ADC模塊同時進(jìn)行AD轉(zhuǎn)換。我們使用雙ADC主從模式,ADC1與ADC2成為一組,構(gòu)成主從模式。同樣,ADC3與ADC4也成為一組構(gòu)成主從模式。其中,ADC1和ADC3分別為各組中的主,并讓兩組都工作在同時轉(zhuǎn)換模式,對規(guī)則通道進(jìn)行ADC轉(zhuǎn)換。
它們的轉(zhuǎn)換使用同一定時器事件來觸發(fā),這里選擇TIM4的更新事件來觸發(fā)所有ADC的轉(zhuǎn)換。如下圖所示,主ADC的CH1與從ADC的CH16同時進(jìn)行轉(zhuǎn)換,主ADC的CH2與從ADC的CH14同時進(jìn)行轉(zhuǎn)換,就這樣依次按照紅色箭頭方向進(jìn)行。
對于工作在主從模式的雙ADC的轉(zhuǎn)換結(jié)果,可以合并成一個字放在一個公共數(shù)據(jù)寄存器里ADCx_CDR( x=12 or 34),能被CPU或DMA讀取訪問。其中高半字存放從ADC的轉(zhuǎn)換結(jié)果,低半字存放主ADC的轉(zhuǎn)換結(jié)果?!具@里各ADC的分辨率選用12位,轉(zhuǎn)換結(jié)果采用右對齊方式?!?/p>
大致原理就介紹到這里,更多細(xì)節(jié)還得看STM32參考手冊。
現(xiàn)在將4個ADC模塊用起來,同時進(jìn)行ADC轉(zhuǎn)換,通過DMA傳輸ADC結(jié)果。這里只用到規(guī)則轉(zhuǎn)換,其中,ADC1使用它的CH1/CH2,ADC2使用它的CH3/CH4, ADC3使用它的CH5/CH6, ADC4使用CH7/CH8。
各ADC模塊的采樣通道連接如下圖所示,ADC經(jīng)定時器事件觸發(fā)轉(zhuǎn)換。
現(xiàn)在基于STM32CubeMx進(jìn)行初始化配置。
先看TIM4的配置,它的更新事件作為所有ADC的轉(zhuǎn)換觸發(fā)事件。
然后根據(jù)上面的規(guī)劃,對4個ADC模塊進(jìn)行配置。
4個ADC的配置除了各自選擇的通道不一樣外,在上面頁面里的配置都相同。定時器觸發(fā),工作在雙模式同時轉(zhuǎn)換。
因?yàn)橐獙DC結(jié)果實(shí)行DMA傳輸,根據(jù)當(dāng)前所選擇的工作模式,這里只需對ADC1和ADC3兩個主ADC的轉(zhuǎn)換事件進(jìn)行DMA配置,如下圖所示:
我這里將DMA傳輸配置成循環(huán)模式,基于ADC3事件的DMA傳輸配置跟上面一樣,只是DMA通道不同而已。
將時鐘等必要的配置完成后即可生成初始化代碼。在初始化代碼的基礎(chǔ)上添加用戶代碼。
我定義了2個數(shù)組pData12[4]、pData34[4]分別存放ADC1/2 與ADC3/4合并后的轉(zhuǎn)換結(jié)果。
基于STM32Cube HAL庫組織代碼,相關(guān)參考代碼如下:
代碼直觀明了,無須過多解釋。提醒一點(diǎn),使用雙ADC模式時,從ADC要先于主ADC啟動使能。
基于上面的規(guī)劃與代碼,測試結(jié)果如下:
結(jié)果跟實(shí)際硬件連接情況完全吻合。
上面只是基于雙ADC模塊規(guī)則通道的同時轉(zhuǎn)換模式做了簡單應(yīng)用介紹。其實(shí)對于雙ADC模式,還有其它更多轉(zhuǎn)換模式,在STM32開發(fā)應(yīng)用中可以靈活選擇使用。
責(zé)任編輯:pj
-
電源
+關(guān)注
關(guān)注
184文章
17488瀏覽量
249172 -
adc
+關(guān)注
關(guān)注
98文章
6396瀏覽量
543807 -
產(chǎn)品
+關(guān)注
關(guān)注
0文章
87瀏覽量
23302
發(fā)布評論請先 登錄
相關(guān)推薦
評論