STM32 HAL 库实现舵机旋转
引言
舵机
有一种电机可以在程序的控制下,在一定范围内连续改变输出轴角度并可以保持住。 这种电机最早被用在航模和船模等遥控模型中,控制各种舵面的转动,这就是舵机。
舵机控制基本原理
舵机的控制一般需要一个 20ms 周期的 PWM 信号,该脉冲的高电平部分一般为 0.5ms~2.5ms 范围内的角度控制脉冲部分。以 180° 角度伺服为例,对应关系如下所示:
- 0.5 ms 高电平 ——– 0°
- 1.0 ms 高电平 ——– 45°
- 1.5 ms 高电平 ——– 90°
- 2.0 ms 高电平 ——– 135°
- 2.5 ms 高电平 ——– 180°
顺时针还是逆时针转动需要自己试。
准备工作
硬件
- STM32F429IGT6 开发板
- SG90 9 克舵机
软件
- STM32CubeMX
- Keil5
计算
180° → 2ms。那么 3μm → 0.27°。意味着这个舵机的控制精度为 0.27°。
推导公式:n/90(ms) + 0.5ms,n 为想要转到的角度。
实操步骤
- 打开 STM32CubeMX 软件,按照
STM32CubeMX 通用配置
(参考:成为点灯大师 LED Master | Story Begins )完成后。选择针脚,查阅手册可知 PA6 可通过 TIM3_CH1 开启。配置 TIM3 的 CH1,完成后可以看到右边 PA6 引脚变为绿色。③ 的原理参考:xx。
进行
STM32CubeMX 通用配置
[2]的第 5 步。打开工程文件。按照
Keil5 MDK 通用配置
[2]完成后开始编写代码。打开
main.c
文件。在main
函数中开启 PWM。1
2
3/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
/* USER CODE END 2 */输出 PWM。此处输出为正转 180° 后反转 180°,以此往复。
1
2
3
4
5
6
7
8
9
10
11
12
13
14/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_6);
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 500);
HAL_Delay(1000);
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 2500);
HAL_Delay(1000);
}
/* USER CODE END 3 */进行
Keil5 MDK 通用配置
[2]的第 5 步。
上述例程成功运行。
参考
- 本文标题:STM32 HAL 库实现舵机旋转
- 创建时间:2023-04-03 16:16:13
- 本文链接:2023/04/03/053-STM32-HAL-库实现舵机旋转/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!