针对CW32L083芯片使用GTIM3-CH3(PA11)输出38K PWM后关闭出现杂波的问题,可通过以下步骤排查和解决:
问题原因分析
- 引脚状态未复位:关闭PWM后引脚可能进入高阻态(Hi-Z),易受外界干扰产生杂波。
- 寄存器残余配置:定时器关闭后输出比较逻辑可能未完全复位。
- 硬件电路干扰:红外发射管驱动电路设计缺陷(如缺失下拉电阻)。
解决方案代码(基于标准外设库)
// 停止PWM输出并消除杂波
void PWM_Stop(void) {
// 1. 强制输出低电平(覆盖PWM输出)
GTIM_ForceOutputChannelCmd(CW_GTIM3, GTIM_CHANNEL3, GTIM_ForcedAction_Inactive);
// 2. 关闭GTIM3定时器
GTIM_Cmd(CW_GTIM3, DISABLE);
// 3. 重配PA11为普通GPIO输出低电平
GPIO_InitTypeDef gpio_init = {0};
gpio_init.Pins = GPIO_PIN_11;
gpio_init.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
gpio_init.IT = GPIO_IT_NONE;
GPIO_Init(CW_GPIOA, &gpio_init);
GPIO_WritePin(CW_GPIOA, GPIO_PIN_11, GPIO_Pin_RESET); // 强制拉低
}
// 启动PWM输出
void PWM_Start(uint16_t duty) {
// 切换PA11为复用功能
GPIO_InitTypeDef gpio_init = {0};
gpio_init.Pins = GPIO_PIN_11;
gpio_init.Mode = GPIO_MODE_OUTPUT_PP_AF; // 复用推挽
GPIO_Init(CW_GPIOA, &gpio_init);
// 取消强制输出,恢复PWM模式
GTIM_ForceOutputChannelCmd(CW_GTIM3, GTIM_CHANNEL3, GTIM_ForcedAction_Disabled);
// 设置新占空比并启动定时器
GTIM_SetCompare3(CW_GTIM3, duty);
GTIM_Cmd(CW_GTIM3, ENABLE);
}
关键配置说明
强制输出低电平:
GTIM_ForceOutputChannelCmd(CW_GTIM3, GTIM_CHANNEL3, GTIM_ForcedAction_Inactive);
在关闭定时器前强制通道输出低电平(非激活电平),避免瞬时高阻态。
双重引脚控制:
- 关闭PWM后立即将PA11切换为普通GPIO并拉低,确保物理电平稳定。
- 启动PWM前恢复复用功能,防止引脚冲突。
定时器基础配置(初始化时需包含):
// 时钟使能
RCC_APB2PeriphClk_Enable(RCC_APB2PERIPH_GTIM3, ENABLE);
RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_GPIOA, ENABLE);
// GTIM3初始化
GTIM_InitTypeDef tim_init = {
.Prescaler = prescaler, // 计算:系统时钟/(38kHz * reload_period)
.ReloadValue = reload_period,
.Mode = GTIM_MODE_TIME,
.OneShotMode = GTIM_COUNT_CONTINUE,
};
GTIM_TimeBaseInit(CW_GTIM3, &tim_init);
// PWM通道配置
GTIM_OCInitTypeDef oc_init = {
.OCMode = GTIM_OCMODE_PWM1,
.OCPolarity = GTIM_OCPOLARITY_HIGH, // 高电平有效
.OCState = GTIM_OCSTATE_ENABLE,
.OCValue = 0, // 初始占空比0
};
GTIM_OC3Init(CW_GTIM3, &oc_init);
硬件设计建议
- 添加下拉电阻:
- 在PA11与GND之间并联10kΩ电阻,避免高阻态时引入干扰。
- 驱动电路优化:
- 检查红外发射管驱动三极管(如用)的基极限流电阻,确保开关特性干净。
- 电源端增加0.1μF去耦电容。
验证步骤
- 用示波器观察
PWM_Stop()调用后的PA11波形,确认是否稳定低电平。
- 检查关闭PWM时系统功耗变化,排除其他外设干扰。
- 若仍有杂波,尝试降低GPIO输出速度(初始化时添加
gpio_init.Speed = GPIO_SPEED_LOW;)。
注意事项:切换GPIO模式时需确保定时器已关闭,否则可能引发总线冲突。通过强制输出+引脚模式切换的组合操作,可彻底消除关闭PWM后的杂波问题。
|
|
|
|
|
|
|
|