问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

小白入门STM32:控制SG90舵机的基础工作原理详解

创作时间:
作者:
@小白创作中心

小白入门STM32:控制SG90舵机的基础工作原理详解

引用
CSDN
1.
https://blog.csdn.net/mantoureganmian/article/details/127592585

本文是一篇关于STM32单片机控制SG90舵机的基础教程。从理论到实践,详细介绍了PWM信号控制原理、定时器的工作机制,并给出了具体的代码示例。

序言

本文旨在帮助有一定C语言基础的读者入门STM32单片机。按照理论先行、实践跟进的思路,通过讲解PWM控制原理和定时器机制,指导读者完成对SG90舵机的控制。SG90舵机是最适合初学者的舵机类型,可以直接由单片机驱动。

一、基础理论

1.1 舵机控制原理–PWM

舵机通常可以在0-180度或0-360度范围内转动,广泛应用于小车转向控制和机械臂关节控制等领域。其转动角度范围需要在购买时确认。

控制舵机的基本需求包括:

  1. 控制舵机转动到指定角度
  2. 在舵机转动过程中,可以随时改变目标角度

设计者采用了一种简单而有效的方法:使用一个20ms周期的PWM信号来控制舵机。信号的前段为高电平,持续时间在0.5ms到2.5ms之间,对应0-180度或0-360度的转动角度,后半段为低电平。具体如下图所示:

这种设计使得舵机能够根据高电平的持续时间来调整转动角度。需要注意的是,舵机转动到指定角度需要一定时间,转动角度越大所需时间越长。如果在舵机转动过程中发送新的角度指令,舵机会直接从当前位置转向新目标角度,而不会完成当前指令后再转向。

习题

  1. 如果2.5ms对应90度,那么36度的PWM信号高电平时间长度是多少?
  2. 为什么使用PWM控制舵机?是否有其他控制方法?
  3. PWM信号属于串行还是并行通信?全双工还是单工?为什么采用这种设计?
  4. 为什么PWM信号长度为20ms,但通常只使用前2.5ms?

1.2 定时器

1.2.1 基础定时器

定时器的作用类似于闹钟,可以设定在特定时间执行特定操作。例如,每隔4秒让二极管亮起或熄灭。

为了实现这一功能,可以设计一套定时器系统:

  1. 时钟装置:将1秒分为50份,每份20ms。
  2. 循环计数装置:每当定时器响一次,计数值加一,最大值为199,超过后重置为0。
  3. 开关装置:当计数装置数值为199时,开关反转一次,控制灯的亮灭。

在STM32单片机中,时钟装置通常使用系统时钟(72MHz),需要通过分频来降低频率。循环计数器包含两个重要寄存器:

  • 计数寄存器CK_CNT:存储一个16位数字,时钟每前进一次,数值自动加一或减一。
  • 自动重载寄存器ARR:当CK_CNT大于ARR时,会触发中断并重新开始计数。

循环计数器有三种模式:

  • 向上计数:从0增长到ARR
  • 向下计数:从ARR减小到0
  • 中心对齐:先从0加到ARR,再从ARR减到0

1.2.2 比较定时器

为了产生PWM信号,需要在循环计数器中添加比较功能。比较寄存器CCR用于存储一个比较值,当计数器的值更新时,与CCR比较,并对外输出比较结果。

习题

  1. 定时器的时钟装置和循环计数器各发挥了什么作用?
  2. 循环计数器有哪些重要参数需要设置?
  3. STM32时钟频率为72MHz,分频数为16位,CK_CNT为16位,最大和最小循环时间间隔是多少?
  4. 如何设置时钟装置和循环计数器的寄存器值以产生360度的PWM信号?

二、实战上手

STM32单片机已经封装好了时钟装置、循环计数器和对外输出装置等功能,用户只需进行相关设置和接线。

2.1 设置定时器和单片机接线

2.2 代码示例

/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    TIM1->CCR1=50;
    HAL_Delay(1000);
    TIM1->CCR1=150;
    HAL_Delay(1000);
}
/* USER CODE END 3 */

三、习题答案

  1. 36度的PWM信号高电平时间长度计算:
    [
    (2.5 - 0.5) / 90 * 36 + 0.5 = 1.3ms
    ]

  2. PWM控制舵机的原因:

  • 使用时间长度表示转动角度,支持高精度细分
  • 只需一根导线传输信号,成本低
  • 可能存在其他控制方法
  1. PWM信号通信特性:
  • 串行通信
  • 单工
  • 设计原因:一根导线成本低,PWM机制可靠,执行端无需反馈
  1. PWM信号长度设计:
  • 2.5ms占20ms的八分之一
  • 空余17.5ms用于区分杂音信号和准备接收下一个PWM信号
  1. 定时器组件作用:
  • 时钟装置提供时间粒度
  • 循环计数器记录时间以执行特定操作
  1. 循环计数器重要参数:
  • 循环周期长度
  1. STM32定时器时间间隔计算:
  • 最小时间间隔:(1.38e-07s \times 1 = 1.38e-07s)
  • 最大时间间隔:(65536s \times 0.00910 = 596.3776s)
  1. 产生360度PWM信号的寄存器设置:
  • 360度对应2.5ms
  1. Counter Period设置为1999的原因:
  • 计算机从0开始计数,0-1999共2000个数
  1. 二极管观察PWM信号:
  • 不可行,因为闪烁太快,人眼无法识别
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号