1. 前言
當前的數字電源設計中,ADC 與定時器是最重要的兩個外設,算法基於 ADC 的採樣結果來計算更新 PWM 輸出,以實現環路控制。一般情況下使用定時器的復位/周期事件或是某個比較事件來觸發 ADC 轉換,然後在 ADC 轉換完成中斷中執行環路算法,讓 ADC 的轉換頻率、算法執行頻率與 PWM 頻率保持一致。但是某些情況下 ADC 的轉換頻率或是環路計算頻率跟不上 PWM 的頻率,需要對 ADC 的觸發進行分頻,實現每 N 個 PWM 周期觸發一次 ADC 轉換。本文基於STM32G474 介紹在高精度定時器與高級控制定時器中如何實現 ADC 的觸發分頻。
2. 高精度定時器中 ADC 分頻的實現
在 G474 的高精度定時器中有多達 10 路的 ADC 觸發信道,每個觸發通道有多達 32 種觸發源可以選擇,PWM 發波可以與 ADC 觸發非常靈活的關聯。如下圖為 hrtim_adc_trg1~hrtim_adc_trg4 與其對應可選觸發源的框圖。
高精度定時器中通過“ADC post-scaler”來實現 ADC 觸發源的分頻,配置 ADCxPSC[4:0]即可。如下圖所示為在定時器工作在 up-counting 計數模式下,設置某個比較事件觸發 ADC 轉換,在 ADCxPSC[4:0]配置不同的值時實現 ADC 觸發分頻輸出的示意圖。
當定時器工作在 up-down counting 計數模式下時,對於設定的比較值或是 Roll-Over 都存在兩個點,所以首先還需通過設置 ADROM 來確定觸發點,如下:
如下圖所示為在定時器工作在 up-down counting 計數模式下,設置某個比較事件觸發 ADC 轉換,在 ADCxPSC[4:0]與 ADROM[1:0]配置不同的值時實現 ADC 觸發分頻輸出的示意圖。
3. 高級控制定時器中 ADC 分頻觸發的實現
在高級控制定時器中,同樣有很多事件可以用來觸發 ADC 轉換,如更新事件、比較事件、定時器觸發輸出等。根據選擇的觸發事件,有不同的方案來實現 ADC 觸發分頻。
3.1. 定時器的 UEV(更新事件) + RCR 觸發 ADC 轉換
選擇 UEV 方式觸發 ADC 轉換時,結合 Repetition 寄存器(RCR)即可實現 ADC 分頻觸發。若定時器工作在 up counting 或是 down counting 模式下,每個計數周期只有一個 UEV 事件,在定時器計數周期點產生;而當定時器工作在 up-down counting 模式下,每個計數周期有兩個 UEV 事件,分別產生於周期點(crest)與 0 點(Valley)。下圖為 RCR 為不同的值時,不同的計數模式下,UEV 事件的產生方式。確定了 UEV 的產生方式後,ADC 觸發工作的方式也就確定了。需要注意的是在 up-down counting 模式下,要實現 ADC 分頻且觸發點固定,RCR 要設置為大於等於 3 的奇數。
3.2. 定時器比較事件 + 觸發沿設定觸發 ADC 轉換
若是 ADC 的觸發源為比較事件,那麼採用方案 1 就不太適合實現 ADC 觸發分頻,因為比較事件每個計數周期都會發生,且與 RCR 無關。這種情況下可以採用比較事件結合 ADC 觸發源的沿選擇來實現。
該方案只適合定時器工作在 up 或是 down 計數模式下實現 ADC 轉換頻率為 PWM 頻率的1/2,下面以 Timer 1 CC4 事件觸發 ADC 轉換為例來說明該方案如何實現。設置如下:
• 設置 ADC 的觸發源為 Timer 1 CC4,上升沿有效。
• 設置 Timer 1 CC4 的工作方式比較事件發生時輸出翻轉。
實測結果如下,每兩個定時器計數周期(PWM 周期)觸發一次 ADC 轉換,ADC 轉換頻率為PWM 頻率的 1/2。
C1(黃色):高級控制定時器 PWM 輸出
C2(藍色):CC4 波形,上升沿觸發 ADC 轉換
C3(紅色):信號翻轉表示 ADC 被觸發並轉換完成
4. 小結
這裡介紹了在 STM32G474 中基於高精度定時器和高級控制定時器如何實現 ADC 觸發分頻的方法。
• 高精度定時器中使用 ADC post-scaler 功能,依靠設置 ADCxPSC[4:0]與 ADROM[1:0]實現。
• 高級控制定時器中,ADC 的觸發源結合 RCR 或者觸發沿選擇實現。
評論