一、 概述
本文将会介绍 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