打印
[STM32F4]

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

[复制链接]
927|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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个脉冲的宽度是正常的一半,如下图,下图是测量的反逻辑,显示低电平其实是高电平:

根据PWM的原理,TIM8->CNT = CCR1 时,应输出高电平,CNT继续计数,直到ARR时,才翻转为低电平,如下图:

一直想不明白,为什么第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。

使用特权

评论回复
5
香水城| | 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输出第一个脉冲宽带异常的话题

使用特权

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

本版积分规则

174

主题

422

帖子

1

粉丝