[STM32F1]

STM32 PWM One Pulse Mode

[复制链接]
242|2
手机看帖
扫描二维码
随时随地手机跟帖
GlenX|  楼主 | 2023-1-17 14:57 | 显示全部楼层 |阅读模式
硬件:STM32F103C8T6,TIM4_CH4 PWM输出

配置PWM ONE PULSE 功能,脉宽设定为5 mS,高电平输出,采用HAL_TIM_PWM_Start()在主程序启动:

结果能产生5mS脉冲,但在ARR时间后,输出持续为高,如果采用HAL_TIM_PWM_Stop()提前终止,则脉冲不能输出,

如果在ARR时间后HAL_TIM_PWM_Stop(),则总会输出一个高电平,然后才Stop,也就是会输出2个脉冲,

这与:PWM One Pulse Mode 功能矛盾!!!???

有人用过这个功能吗?

不得已,只好采用HAL_TIM_PWM_Start_IT()然后在HAL_TIM_PeriodElapsedCallback()中再Stop,

才能实现PWM One Pulse输出。

使用特权

评论回复
GlenX|  楼主 | 2023-1-17 22:53 | 显示全部楼层
问题找到了:
"若采用PWM1模式,就必须选择极性低有效",否则输出奇怪!
//      __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4,5000);   //脉宽5mS

        HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);
        HAL_Delay(10);                                                                        //不能少于9mS,否则输出被切掉了!!!
        HAL_TIM_PWM_Stop(&htim4,TIM_CHANNEL_4);
        HAL_Delay(100);
这是5mS脉宽的输出程序。
但必须使用STOP,否则下一个脉冲就无法启动了!

使用特权

评论回复
GlenX|  楼主 | 2023-1-22 22:07 | 显示全部楼层
总结:
STM32 PWM One Pulse Mode
若采用PWM1模式,就必须选择极性低有效;
若采用PWM2模式,则必须选择极性高有效;
否则输出有多余异常电平,无法更改。同时,在STOP前,必须有个延时,等到计数到ARR结束,否则输出脉宽受影响!
当然除非你采用中断方式,在波形结束中断直接STOP。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则