【RoboMaster】PWM?计时器Timer?我们马上解决掉他们!【STM32】

本文介绍了STM32中的定时器Timer和PWM技术,包括它们的定义、实际应用和使用方法。Timer作为定时器,频率取决于Clock Source、Prescaler和Period,而PWM用于脉冲宽度调制,常见应用如呼吸灯、舵机控制和电机控制。文中还提供了练习项目,包括彩灯、呼吸灯、舵机控制和电机控制的代码实现。
摘要由CSDN通过智能技术生成

同步博客地址从STM32开始的RoboMaster生活:进阶篇 VI [Timer & PWM]

项目&教程仓库-STM32-RoboMaster-


1.0 什么是Timer?PWM又是什么玩意儿?

1.1 Timer定义

Timer就是定时器,但是与一般我们生活中使用的定时器不同的是,Timer的单位不是s秒,而是Hz赫兹,而且通常是MHz(1,000,000Hz),定时器通常从0开始数数,然后直到占满其16位寄存器,就会告诉CPU,“我已经满得不行了~~”,然后从0开始重新计数。

Timer具体的频率多少通常取决于,其Clock Source,Prescaler,和Period

F r e q u e n c y   =   C l o c k   S o u r c e ( P r e s c a l e r + 1 ) ( P e r i o d + 1 ) Frequency\ =\ \frac{Clock\ Source}{(Prescaler+1)(Period+1)} Frequency = (Prescaler+1)(Period+1)Clock Source

这里值得注意的是,虽然Prescaler和Period都可以降频,但是根据笔者实测,两者是不一样的,Prescaler会改变PWM信号的密度,所以不推荐过大的Prescaler,而Period会改变PWM信号的Resolution清晰度/分辨率,过小会导致能选择的Duty Cycle占空比过少,所以不推荐过小的Period。但是具体怎么平衡选择,其实还是需要看你的需求和设备。

如果是高级定时器,还需要考虑Repetition Counter ( RC )

F r e q u e n c y   =   C l o c k   S o u r c e ( P r e s c a l e r + 1 ) ( P e r i o d + 1 ) ( R C + 1 ) Frequency\ =\ \frac{Clock\ Source}{(Prescaler+1)(Period+1)(RC+1)} Frequency = (Prescaler+1)(Period+1)(RC+1)Clock Source

定时器分为

  1. Basic Timer

    • TIM6
    • TIM7
  2. General Purpose Timer

    • TIM2到TIM5
    • TIM9到TIM14
  3. Advanced Timer

    • TIM1

    • TIM8

  4. SysTick Timer

因为RoboMaster暂时只用得上Basic Timer和General Purpose Timer,其他Timer都暂时不讲。在RM中,Basic Timer用于计时,General Purpose Timer用于生成PWM,虽然也可以当成普通的Basic Timer来用。

所有Timer的时钟源分布图

https://i.loli.net/2020/03/23/CkxDet1yH7Oi3o4.jpg

在无法确认某个Timer的时钟源在Clock Tree中的位置时,请参考上图!

1.2 PWM定义

PWM ( Pulse Width Modulation ) 脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,PWM控制技术正是有赖于在逆变电路中的应用,才确定了它在电力电子技术中的重要地位。PWM能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量通信到功率控制与变换的许多领域中。

最基础最本质的概念:Duty Cycle 占空比

D   =   T o n P e r i o d × 100 % D\ =\ \frac{T_{on}}{Period}\times100\% D = PeriodTon×100%

P e r i o d   =   T o n + T o f f Period\ =\ T_{on}+T_{off} Period = Ton+Toff

Duty Cycle.png

PWM这项技术的本质其实非常简单,“在不改变最大电压的情况下,通过改变最大电压出现的比率,来改变整体的平均电压”,而这可以顺带传递信息。

PWM通常用于控制电机,舵机,加密信息传递,电压变化控制等等

1.3 PWM的实际应用

1.3.1 呼吸灯
  • 这个很好理解,毕竟越大的Duty Cycle占空比,短时间内的平均电压越大,灯也就越亮,所以控制PWM信号的Duty Cycle占空比就可以在不改变电压的情况下调控瞬时平均电压。
1.3.2 舵机控制
  • 舵机通常可以用CAN或者PWM来控制,PWM是非常常见的舵机控制方式,基本上没有不支持PWM的舵机。PWM的Duty Cycle占空比的大小对应者着舵机的角度。通常频率为50Hz,如果Period为2000, T o n T_{on} Ton为50~250,Duty Cycle占空比为2.5%~12.5%,则对应着舵机的0°~180°/0°~270°。
1.3.3 电机控制

这里以RoboMaster中常见的M3508直流无刷减速电机和C620无刷电机调速器为例

M3508.jpg

  • PWM信号给到C620,然后C620根据其Duty Cycle占空比来控制M3508速度
  • M3508用PWM驱动,需要每次都先校验PWM,需要先给最大Duty Cycle占空比,然后在3s内给最小Duty Cycle占空比
  • M3508是缓启动,也就是说,速度需要从0开始递增,而不能直接让M3508满速
  • M3508能接收的频率为50Hz到500Hz,脉宽从1000us到2000us变化,推荐500Hz,Period为2000
  • M3508分为两种模式
    • 单向转动模式
      • V m i n   =   1000 u s V_{min}\ =\ 1000us Vmin = 1000us
      • V m a x   =   2000 u s V_{max}\ =\ 2000us Vmax = 2000us
    • 双向转动模式
      • − V m a x   =   1000 u s -V_{max}\ =\ 1000us Vmax = 1000us
      • V 0   =   1500 u s V_{0}\ =\ 1500us V0 = 1500us
      • V m a x   =   2000 u s V_{max}\ =\ 2000us Vmax = 2000us

2.0 Timer的用法

HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
  • 参数
    • htim:指向TIM配置结构体
  • 返回值
    • HAL_StatusTypeDef:如果开启成
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值