RoboMaster

标题: 【分享帖】从STM32开始的RoboMaster生活:进阶篇 VI [打印本页]

作者: Alchemic Ronin    时间: 2020-3-25 01:58
标题: 【分享帖】从STM32开始的RoboMaster生活:进阶篇 VI
本文已经同步发布于作者部署的私人博客
为了更好的排版和观看体验
可以移步到 从STM32开始的RoboMaster生活:进阶篇 VI [Timer & PWM]

从STM32开始的RoboMaster生活:进阶篇 VI [Timer & PWM]

1.0 什么是Timer?PWM又是什么玩意儿?
1.1 Timer定义
Timer就是定时器,但是与一般我们生活中使用的定时器不同的是,Timer的单位不是s秒,而是Hz赫兹,而且通常是MHz(1,000,000Hz),定时器通常从0开始数数,然后直到占满其16位寄存器,就会告诉CPU,“我已经满得不行了~~”,然后从0开始重新计数。
Timer具体的频率多少通常取决于,其Clock Source,Prescaler,和Period
这里值得注意的是,虽然Prescaler和Period都可以降频,但是根据笔者实测,两者是不一样的,Prescaler会改变PWM信号的密度,所以不推荐过大的Prescaler,而Period会改变PWM信号的Resolution清晰度/分辨率,过小会导致能选择的Duty Cycle占空比过少,所以不推荐过小的Period。但是具体怎么平衡选择,其实还是需要看你的需求和设备。
如果是高级定时器,还需要考虑Repetition Counter
定时器分为
因为RoboMaster暂时只用得上Basic Timer和General Purpose Timer,其他Timer都暂时不讲。在RM中,Basic Timer用于计时,General Purpose Timer用于生成PWM,虽然也可以当成普通的Basic Timer来用。
所有Timer的时钟源分布图

                               
登录/注册后可看帖子
在无法确认某个Timer的时钟源在Clock Tree中的位置时,请参考上图!
1.2 PWM定义
PWM ( Pulse Width Modulation ) 脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,PWM控制技术正是有赖于在逆变电路中的应用,才确定了它在电力电子技术中的重要地位。PWM能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量通信到功率控制与变换的许多领域中。
最基础最本质的概念:Duty Cycle 占空比
​​

                               
登录/注册后可看帖子
PWM这项技术的本质其实非常简单,“在不改变最大电压的情况下,通过改变最大电压出现的比率,来改变整体的平均电压”,而这可以顺带传递信息。
PWM通常用于控制电机,舵机,加密信息传递,电压变化控制等等
1.3 PWM的实际应用
1.3.1 呼吸灯1.3.2 舵机控制1.3.3 电机控制
这里以RoboMaster中常见的M3508直流无刷减速电机和C620无刷电机调速器为例

                               
登录/注册后可看帖子
2.0 Timer的用法
  1. HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
复制代码
  1. HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);
复制代码
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
  2.       ......
  3.   }
复制代码
3.0 PWM的用法
  1. HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
复制代码
  1. HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);
复制代码
  1. __HAL_TIM_GET_AUTORELOAD(__HANDLE__);
复制代码
用于得到Period值,也就是PWM宽度
  1. __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__);
复制代码
4.0 练习项目
4.1 项目简介4.2 项目代码
完整的工程文件可以在这里找到!
4.2.1 彩灯  
4.2.2 呼吸灯  
4.2.3 舵机控制  ​
4.2.4 电机控制(单向转动模式)  
4.2.4 电机控制(双向转动模式)  ​
代码链接:https://github.com/AlchemicRonin/-STM32-RoboMaster-
4.3 效果展示

http://player.bilibili.com/player.html?aid=98576098&bvid=BV177411m7we&cid=168273908&page=1


本文已经同步发布于作者部署的私人博客
为了更好的排版和观看体验
可以移步到 从STM32开始的RoboMaster生活:进阶篇 VI [Timer & PWM]








欢迎光临 RoboMaster (https://bbs.robomaster.com/) Powered by Discuz! X3.2