STM32中定时器产生PWM更改频率在步进电机中的问题

本文探讨了在使用STM32控制步进电机的过程中如何调整PWM频率以改变电机速度。通过深入理解TIMx模块的工作原理,特别是自动重装载值ARR的更新机制,介绍了一种快速更改PWM频率的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近,在使用DM542驱动来控制步进电机时。需要调节步进电机的速度,PWM来控制步进电机这个十分的简单。调节步进电机的速度就是通过调节步进电机的PWM的频率,可以通过重新设置自动重装载值来进行更改PWM的频率值,但是在实验中发现每次更改频率都需要等待一段时间才能更改电机的速度。对应这个问题通过阅读STM32手册发现了问题所在。

一、TIMx功能描述

我们先来看官方手册给出的这段话的意思。

 通过这句话我们的可以得知,我们将自动重装载值直接写入ARR中内容会有两种方式,一种是立即一种则是在每次更新UEV事件才能传送到影子寄存器。那我们就可以有两种方式,一种是产生一次更新中断,一次则是修改CR1中的ARPE位来控制ARR值的直接写入。下面给出官方给出的时序图:

 可以看出ARPE=0没有缓存直接写入,而为1时需要缓存存入到影子寄存器。而且要在产生更新中断时才能进行更新影子寄存器。

这样我们的问题就好解决了,我们只需要在写入新的重载值出,产生一次更新中断就可以快速更改PWM的频率。为什么我们之前修改会出现要等待一定的时间才能修改频率呢?

假设我们的ARR值之前设定为10,当前的准备将ARR设置为2。我们在开启定时器之后,定时器不断在0-10内进行计数如果:

TIM\_CNT>ARR_{new}

 当前的值本身是要和旧的ARR值进行对比,但是发现当前值大于新的ARR值,只能一直进行计数加到65535才溢出产生更新中断,这样才能从0-2进行计数。如果TIM\_CNT<ARR_{new}

 不需要考虑这种问题,处理这个问题我们可以通过软件产生一次更新中断从而重新开始计算。在更改ARR值之后只需要在之后加上以下代码即可。

TIM_SetAutoreload(TIMX,ARR);
TIM_GenerateEvent(TIMx,TIM_IT_Update);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日亿学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值