如何使用STM32輸出比較模式產生相移信號

在一些應用中,有時會使用 STM32 產生兩個特定的 PWM 波,這兩個波形頻率相同,占空比相同,但相位不同。本篇就介紹如何使用定時器的輸出比較模式可以產生這種帶相移的 PWM 波形。

在未使能預裝載寄存器時(OCxPE=0),使用輸出比較模式,可以隨時通過軟體更新TIM_CCRx 寄存器的值,以控制輸出波形。DMA 的循環模式,可以在最後一次數據傳輸完成後,自動重新加載初始編程值,內部地址寄存器會重新加載基址值,進入下一個循環。使用輸出比較模式配合 DMA 的循環模式可以不斷更新 TIMx_CCR 寄存器的值,從而輸出可控的波形。

下面以 NUCLEO-L031 為例介紹產生相移信號的方法,使用TIM2作為輸出。

為了便於觀察,令 PWM 波的周期為 100ms,占空比為 20%。以 TIM2_CH1 輸出的波形的為基準,其為 0 度相移。
➢ TIM2_CH1: 相移 0 度,占空比為 20%
➢ TIM2_CH2: 相移 90 度,占空比為 20%
➢ TIM2_CH3: 相移 180 度,占空比為 20%
➢ TIM2_CH4: 相移 270 度,占空比為 20%

使用 STM32CubeMX 進行基礎參數的配置。這裡配置時鐘為 32MHz,如圖 1 所示。
圖1. 管腳與時鐘配置








配置時鐘源為內部時鐘,因為 TIM2_CH1 為基準信號,直接配置為 PWM 輸出即可。TIM2_CH2、TIM2_CH3 和 TIM2_CH4 配置為輸出比較模式,如圖 2 所示。
圖2. 選擇 Timer2 的時鐘源


配置 TIM2 的預分頻值與計數周期,配置計數周期為 100,計數模式配置為"Up"。配置channel1 的模式為"PWM mode 1",因為占空比為 20%,計數周期為 100,所以 CCR1 寄存器配置為 20(也即 Channel1 的 Pulse 配置為"20"),極性配置為"High"。Channel2、Channel3 和 Channel4 的模式都配置為"Toggle on match"(匹配時翻轉電平),極性配置為"low",CCR 不需要配置,因為會通過 DMA 自動寫入。具體配置如圖 3 所示。
圖3. 配置 Timer2 的詳細參數



添加 TIM2_CH2、TIM2_CH3 和 TIM2_CH4 的 DMA,並進行配置,配置的內容都相同,配置如下:
➢ Direction: Memory To Peripheral

➢ Mode: Circular
➢ Data Width: Word
具體配置如圖 4 所示
圖4. 配置 DMA 的參數



由 STM32CubeMX 生成代碼之後,需要在生成的代碼中添加一些處理。
首先需要計算 channel2、channel3 和 channel4 的 CCR 值。以 channel2 為例:配置的計數周期為 100,初始極性為 low,當 CNT 計數值與 CCR 寄存器匹配的時候,輸出電平發生翻轉,所以為了實現與 channel1 占空比相同的波形,需要翻轉兩次電平。第一次翻轉的 CCR 可以通過相位差進行計算,第二次翻轉的 CCR 值可以通過占空比和第一次翻轉的 CCR 值這兩個條件進行計算。Channel2 第一次翻轉的 CCR 值為: "100 x (90°/360°) = 25";第二次翻轉的 CCR 值為:"25 + (20% x 100) = 45"
表 1 由上面計算方式同理可得:
表1. Channel 2~4 的 CCR 值計算結果



在 main.c 文件中需要建立三個數組,將 channel2~4 的兩次 CCR 值存入這三個數組
中,具體如下所示:
/* USER CODE BEGIN PV */
uint32_t ccr_ch2[2] = {25, 45};
uint32_t ccr_ch3[2] = {50, 70};
uint32_t ccr_ch4[2] = {75, 95};
/* USER CODE END PV */

然後在 mian 函數中添加如下代碼。使 channel1 輸出 PWM 波,配置 channel2~4 在DMA 模式下使用輸出比較模式進行輸出。
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
HAL_TIM_OC_Start_DMA(&htim2, TIM_CHANNEL_2, ccr_ch2, 2);
HAL_TIM_OC_Start_DMA(&htim2, TIM_CHANNEL_3, ccr_ch3, 2);
HAL_TIM_OC_Start_DMA(&htim2, TIM_CHANNEL_4, ccr_ch4, 2);
/* USER CODE END 2 */


測試結果如下圖所示,4 個 channel 產生的 PWM 波的周期都為 100ms,占空比都為20%,測試出來的 channel2~4 的相移與設計目標波形一致。
圖5. 測試結果

★博文內容參考自 網站,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

false: https://www.stmcu.com.cn/Designresource/detail/LAT/711778

評論