使用CH582M单片机的PWM控制器,在交错模式下,PWM4和PWM5、PWM6和PWM7、PWM8和PWM9、PWM10和PWM11为交错方式工作。作为例子,我们这里只测试PWM4和PWM5、PWM6和PWM7、PWM8和PWM9。因为PWM10对应的GPIO已经被下载器使用了。另外,作为对比PWM6和PWM7不用交替模式,而是依旧使用各自单独工作的模式,
#include "CH58x_common.h"
/*********************************************************************
* @fn main
*
* @brief 主函数
*
* @return none
*/
int main() {
SetSysClock(CLK_SOURCE_PLL_60MHz); // 系统时钟频率:60MHz
/* 配置GPIO */
GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); // PA12 - PWM4
GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); // PA13 - PWM5
GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeOut_PP_5mA); // PB0 - PWM6
GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); // PB4 - PWM7
GPIOB_ModeCfg(GPIO_Pin_6, GPIO_ModeOut_PP_5mA); // PB6 - PWM8
GPIOB_ModeCfg(GPIO_Pin_7, GPIO_ModeOut_PP_5mA); // PB7 - PWM9
GPIOB_ModeCfg(GPIO_Pin_23, GPIO_ModeOut_PP_5mA); // PB23 - PWM11
// 时钟分频寄存器(R8_PWM_CLOCK_DIV)
PWMX_CLKCfg(60); // PWM的时钟频率 cycle = Fsys/60 = 1MHz,周期1μs
// 配置控制寄存器(R8_PWM_CONFIG)
PWMX_CycleCfg(PWMX_Cycle_256); // 周期 = 256*cycle,即PWM波的周期为 256 * 1μs = 256μs
// 交错模式下
PWMX_AlterOutCfg(RB_PWM4_5_STAG_EN, ENABLE);
PWMX_AlterOutCfg(RB_PWM6_7_STAG_EN, DISABLE);
PWMX_AlterOutCfg(RB_PWM8_9_STAG_EN, ENABLE);
// 配置 占空比
PWMX_ACTOUT(CH_PWM4, 128, High_Level, ENABLE);
PWMX_ACTOUT(CH_PWM5, 128, High_Level, ENABLE);
PWMX_ACTOUT(CH_PWM6, 64, High_Level, ENABLE);
PWMX_ACTOUT(CH_PWM7, 64, High_Level, ENABLE);
PWMX_ACTOUT(CH_PWM8, 32, High_Level, ENABLE);
PWMX_ACTOUT(CH_PWM9, 32, High_Level, ENABLE);
while(1) {
}
}逻辑分析仪获得的波形(PWM4 - CH0, PWM5 - CH1, PWM6 -CH2,PWM7- CH3, PWM8- CH4,PWM- ):

可以看到 PWM4 和 PWM5 、PWM8 和PWM9 的高电平交替输出。而PWM6和PWM7是同步输出的。
如果上级代码中 的 PWM5 的 参数由 High_Level 改为 Low_Level ,则输出变成:

因此交替模式下,交替双方是可以单独控制输出极性的。
由测量出来的波形来看,交错模式相当于交替输出,而不是我们习以为常的那种硬件互补输出方式,也不存在死区控制,因此,如果你需要的是用于电机驱动的严格互补 PWM(带死区),CH582M 可不是最佳选择。
我要赚赏金
