一、 概述
本文將會介紹 SemiDrive E3 MCAL Pwm 模塊的簡介以及基本配置,其中還會涉及到 Xtrg 模塊的配置。此外會結合實際操作的介紹,幫助新手快速了解並掌握這個模塊的使用,文中的 MCAL 是基於 PTG3.0 的版本,開發板是官方的 E3640 網關板。
二、 Pwm 模塊簡介
E3 的 Pwm 模塊的底層硬體依賴於 Etimer 和 EPwm,E3 系列晶片最多有 4 個 EPwm 和 4 個 Etimer,其中每個 Epwm 和 Etimer 都有 4 個通道(通道 A/B/C/D),每個通道還有 2 個子通道(例如:通道 A0/A1),因此 E3 最多支持 64 通道的 PWM 輸出。當底層硬體為 Epwm 時,每個通道有兩個周期可以選擇,對應的子通道周期一致,當底層硬體為 Etimer 時,每個通道的周期都可以獨立配置,對應的子通道的周期一致。
三、 Pwm 模塊的主要配置
要使用 Pwm 模塊,首先需要在 Mcu 模塊中使能 EPWM、ETIMER 等底層硬體。具體操作如下圖所示,在 Mcu 模塊的 McuHwlpConfig 選項中勾選上需要使能的模塊即可。
圖 3.1 使能底層硬體
接著對 Pwm 模塊進行配置,首先需要添加 PwmController,然後對每個 PwmController 進行配置。
圖 3.2 添加 PwmController
PwmController 的配置包括以下選項,如下圖所示。
圖 3.3 PwmController 的配置選項 1
圖 3.4 PwmController 的配置選項 2
關於配置項的說明如下:
- PwmHwModule:該配置項用於選擇 PwmController 所使用的底層硬體。
- PwmNotification:中斷回調函數。
- PwmModuleFrequency:Pwm 模塊的主頻,該時鐘固定為 250MHz 和 7MHz(E3206/E3106/E3205/E3104 系列)。
- PwmHwModulePrescaler,Pwm 頻率的預分頻值,例如該值為 0 時,Pwm 模塊的實際頻率為 250 M/(0+1) = 250MHz。
- EIDEnable:配置是否使能 Pwm 觸發 ADC 採樣。
- EIDValue:CMP Event ID 的值。
- PwmPeriodDefault:Pwm 通道的周期,單位為 ns。
- PwmChannelClass:該配置決定該計數器產生的 Pwm 波是否可以改變周期和占空比,當配置為 PWM_FIXED_PERIOD 時,使用該計數器產生的 Pwm 波不可改變周期,占空比可變;當配置為 PWM_VARIABLE_PERIOD 時,使用該計數器產生的 Pwm 波周期和占空比可變;配置為 PWM_FIXED_PERIOD_SHIFTED 則無效,該配置未實現。
需要注意的是,每個計數器都可以配置 PwmPeriodDefault 和 PwmChannelClass,總共有以下計數器:CNT_G0/1,LCNT_A/B/C/D,其中當底層硬體選擇 EPWM 時,其比較通道的計數器只能選擇 CNT_G0/1,當底層硬體選擇為 ETIMER 時,其比較通道計數器只能選擇 LCNT。
配置完 PwmController 後,接著需要配置 Pwm 的比較通道,如下圖所示。
圖 3.5 比較通道的配置
關於比較通道的配置項,說明如下:
- PwmCmpChannelId:Pwm 比較通道的 Id,ID 為 0 對應通道 A,ID 為 1 對應通道 B,以此類推。
- PwmSubCmpChannel_1_EN:該選項決定是否使能子通道 1,默認只使用子通道 0。
- CntSel:該配置用於選擇使用哪個計數器,當底層硬體為 EPWM 時,選擇 CNT_G0/1,當底層硬體為 ETIMER 時,選擇使用 LCNT 作為計數器。
- DmaEnable:配置是否支持通過 DMA 搬運 Cmp 值。
- FIFOWaterMarkLevel:當 DmaEnable 使能時,配置 FIFO 水線。
- DmaTotalTxNum:當 DmaEnable 使能時,配置 Dma 搬運的總 Ward 數。
- DutyCycleDefault:Pwm 通道占空比,默認值為 0x4000,對應占空比 50%。
- Polaity:PWM 通道極性,選擇 PWM_HIGH 或 PWM_LOW。
- IdleState:PWM 通道空閒時的狀態,選擇 PWM_HIGH 或 PWM_LOW。
配置完了以後進行 Pwm 通道的配置,將通道跟之前配置的比較通道進行綁定。
圖 3.6 Pwm 通道配置
配置完 Pwm 模塊後,我們需要對 Xtrg 模塊進行配置,將 PWM 信號路由到 IO 中。需要注意的是需要通過 Xtrg 路由的引腳,其 Port 需要進行對應的配置。
圖 3.7 Xtrg 模塊配置
圖 3.8 Port配置
四、 實際操作
完成了 EB 相關模塊的配置後,我們便可以進行驗證了,測試代碼如下所示。代碼中主要進行了 Xtrg 以及 PWM 的初始化,完成初始化後便可以輸出對應的 PWM 信號了。
圖 4.1 測試代碼
對工程進行編譯,在線調試運行,串口中輸入測試命令“runcase 700”,如下圖所示。
圖 4.2 輸入測試命令
接著使用邏輯分析儀抓取 IO 的波形,如下圖所示,可以看出,輸出的 PWM 波形的頻率和占空比跟我們的配置是一樣的。
圖 4.3 PWM 波形
五、 使用注意事項
配置 Pwm 模塊時,需要注意以下事項:
- Pwm 模塊的主頻是固定的,分配係數可以進行設置,範圍為 0~0xffff。
- 目前不支持 LowPower 的相關 API。
- 調用 Pwm_SetPeriodAndDuty 接口時,只會生效傳參的通道的周期和占空比,如果其他通道使用了傳參通道的計數器,則其他通道會使用新的周期值和舊的占空比,如果其他通道需要更新周期和占空比,也需要調用 Pwm_SetPeriodAndDuty 這個接口。
- 調用 Pwm_SetOutputToIdle 接口時會在下個周期生效,而不是立即生效。
- 當 etimer 用於 PWM 輸出時,其未使用到的硬體通道不支持用於 SENT 消息解析和 ICU 捕獲。
- 目前僅支持在初始化時配置好 DMA Buffer 的數據,不支持 DMA PINGPONG 模式。
六、 參考資料
1.《SemiDrive_E3_MCAL_User_Guide_Rev03.00.pdf》,2023.08
評論