[其他ST产品] 高级定时器PWM占空比什么时候更新?

[复制链接]
2317|6
 楼主| Hufei1994 发表于 2020-10-5 19:56 | 显示全部楼层 |阅读模式
本帖最后由 Hufei1994 于 2020-10-5 20:54 编辑

大家好,我想问一下高级定时器PWM的更新时刻点能否自定义?我现在采用的是中间对其方式,如果我想要在三角波的最高点进行更新PWM应该怎么操作呢?
 楼主| Hufei1994 发表于 2020-10-7 11:10 | 显示全部楼层
有人知道么?
小灵通2018 发表于 2020-10-7 22:00 | 显示全部楼层
都要等到当前周期结束后更新。
里面有晴雨 发表于 2020-10-9 11:23 | 显示全部楼层
当前周期结束之后,进行更新的。好好看看datasheet
香水城 发表于 2020-10-9 14:15 | 显示全部楼层
对于高级定时器,其更新事件的时间点是可以调整的。 具体结合你你这里,采用了中心对齐模式,你目的无非是想调整PWM的占空比,

你可以令RCR=1,在当前周期修改CCR、ARR,借助更新事件 在下一个周期生效.  

如果这样配置,更新事件发生在每次下溢的时刻。此时开启ARR/RCR的预装功能。


8455f7fffe4cc439.png
 楼主| Hufei1994 发表于 2020-10-9 16:00 | 显示全部楼层
香水城 发表于 2020-10-9 14:15
对于高级定时器,其更新事件的时间点是可以调整的。 具体结合你你这里,采用了中心对齐模式,你目的无非是 ...

版主,您好!
我在规格书中看到了这么一句话:
在中心对齐模式下,如果 RCR 值为奇数,更新事件将在上溢或下溢时发生,这取决于何时写入 RCR 寄存器以及何时启动计数器如果在启动计数器前写入 RCR,则 UEV 在上溢时发生。如果在启动计数器后写入 RCR,则 UEV 在下溢时发生。例如,如果 RCR = 3, UEV将在每个周期的第四个上溢或下溢事件时生成(取决于何时写入 RCR)。
1、根据上述所有,如果我想在每个周期上溢出进行更新,需要在定时器启动之前修改RCR寄存器值为 1 ,我是用的是Cubemx自动生成的代码,那么修改寄存器这个操作是放在 MX_TIM1_Init() 前面,还是 HAL_TIM_Base_Start(&htim1) 前面?是不是只需要写一次?
我的理解如下图所示,第K次上溢更新的CRR值是K-1次采样数据计算出来的。
2、关于您说的 ARR/RCR的预装功能 是什么作用呢?是否一定要进行开启?
PWM.png
香水城 发表于 2020-10-10 13:37 | 显示全部楼层
本帖最后由 香水城 于 2020-10-10 16:31 编辑

1、关于第一个问题。
在中心对齐计数模式下,如果你要求在每个周期的上溢点产生更新事件,你可以在初始化定时器后修改RCR=1,TIM1->RCR=1;
你现在使用的cubemx进行配置,RCR那个地方先保持0默认值不动。
720675f813256b533b.png

修改寄存器这个操作是放在 MX_TIM1_Init() 的后面,一次即可。
  。。。。。。


  MX_GPIO_Init();
  MX_TIM1_Init();

    TIM1->RCR=1;


     。。。。。。
第2个问题:
它涉及到ARR/RCR/CCR等带预装功能的数据生效问题,当开启预装功能时,
它们的寄存器内容在发生更新事件时才生效,否则即改即有效。 像你这里开启
预装功能合适些。


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

本版积分规则

28

主题

160

帖子

0

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