[STM32F4] 让F4的PWM立即输出高电平,占空比只有一半

[复制链接]
1090|4
 楼主| motor666 发表于 2022-3-20 21:36 | 显示全部楼层 |阅读模式
本帖最后由 motor666 于 2022-3-20 21:37 编辑

项目需求:管脚脉冲沿触发到来时,PWM管脚立即输出高电平(不能有等待时间),以后正常输出PWM脉冲。我用TIME8的TIM_CHANNEL_1输出脉冲,设定TIM8->ARR = XXXXX;        TIM8->CCR1 = TIM8->ARR; TIM8->CCR1 >>= 1; 让占空比为1:1,触发脉冲到来时,TIM8->CNT = TIM8->CCR1 - 2; 让CNT不从0开始,而是只差2就输出高电平,打开PWM:HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_1); 结果的确立即输出了高电平,只是第1个脉冲的宽度是正常的一半,如下图,下图是测量的反逻辑,显示低电平其实是高电平:
5962662372c551af95.png
根据PWM的原理,TIM8->CNT = CCR1 时,应输出高电平,CNT继续计数,直到ARR时,才翻转为低电平,如下图:
9636662372d39af496.png
一直想不明白,为什么第1个脉冲变窄了。




 楼主| motor666 发表于 2022-3-22 20:48 | 显示全部楼层
用过无数次PWM,只是第1个脉冲没人关心。
香水城 发表于 2022-3-25 11:20 | 显示全部楼层
你说:管脚脉冲沿触发到来时,PWM管脚立即输出高电平(不能有等待时间),以后正常输出PWM脉冲。

==》请问:那在管脚脉冲沿触发到来之前相应PWM管脚输出的是什么电平呢?
     触发信号到来时,pwm管脚立即输出高,你是如何实现这个立即的呢?
 楼主| motor666 发表于 2022-5-23 10:48 | 显示全部楼层
管脚脉冲沿触发到来之前相应PWM管脚输出低电平,因为PWM没启动,当脉冲到来时,让TIM8->CNT = TIM8->CCR1 - 2;或者干脆TIM8->CNT = TIM8->CCR1 ; ,理论上PWM会立即输出高电平,并持续CCR1的长度,但是实际不是,只持续了半个CCR1的长度,后续的脉冲都正常了。
这个立即输出高电平,就是让TIM8->CNT = TIM8->CCR1。
香水城 发表于 2022-5-25 17:25 | 显示全部楼层
本帖最后由 香水城 于 2022-5-25 17:26 编辑

对你的 让TIM8->CNT = TIM8->CCR1 - 2; 不是很理解,你是用的什么PWM模式? 模式1 模式2?

你的这个操作是当发现外来触发信号了,但是外来触发信号来之前TIM-CH1的通道就已经有输出了,如果此时计数器为0,pwm模式1、极性高有效、并且CCR已经设置非0值的话,此时输出就已经为高了,那就没有理解为高的说法了。 如果说此时计数器为0,pwm模式2、极性高有效的话,触发信号过来时TIM-CH1的输出应该为低。

这里有个类似话题,你可以看看,但愿能给点启示。PWM输出第一个脉冲宽带异常的话题

您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

426

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部