1. 基本思路
對於stm32的ADC多通道采樣,由於不是每個通道都具備轉換結果寄存器,因此在多通道采樣時通常需要采用DMA,但是考慮到敏感場合DMA錯誤或導致ADC Overrun,從而導致待控制的Power Stage故障。鑒於此,考慮采用Auto Injection模式配和一個連續采樣的Regular通道實現多通道連續采樣,此時連續采樣的規則通道和注入通道交替進行,從而實現所設定的通道依次連續采樣。經測算,采用此方法采樣25通道,所需時間在2us以內。
此時可用的通道數為5個,轉換結果分別存放與RDATA和JDATA1-4,如下圖所示。
2. 實現方法
以下采用STM32CubeIDE說明實現方法。
(1) 電源和時鍾配置
基於手冊給出的限制進行設置。
對於多ADC單端情況,設置電源Range1。
由PLLP引出ADC的時鍾,fADC<52Mhz。
ADC配置頁,取時鍾分頻如下。
(2) 通道和采樣模式設置
通道選擇見上圖,6、7、15通道被選中,取單端模式。設置一個規則采樣通道,並使之為連續模式,新值overwrite,軟件觸發轉換。
使能注入轉換,設置所需Rank數和響應的通道,選擇Auto Injected Mode。
對於采樣時間的選擇,不妨選擇與手冊中測試條件相同的設置,快速通道取2.5 Cycles,慢速通道取6.5 Cycles。
3. 使用方法
- 在ADC初始化后,采用函數
HAL_ADC_Start(&hadc)
和HAL_ADCEx_InjectedStart(&hadc1)
啟動ADC的多通道連續采樣; - 直接讀取ADC的相應RDATA寄存器和JDATA寄存器即可獲取轉換值,如:
A1_6 = hadc1.Instance->DR;
A1_7 = hadc1.Instance->JDR1;
A1_15 = hadc1.Instance->JDR2;