[开发工具] STM32CubeMX_24 | 使用通用定时器产生PWM驱动舵机

[复制链接]
2280|30
 楼主| equivalent 发表于 2020-4-14 14:36 | 显示全部楼层
动态改变舵机角度
上一个实验中,我们配置了PWM波的高电平时长计数个数为1000,即时长为1ms,对应旋转角度为45°,在本实验中,我们来动态改变 PWM 占空比,使舵机在0°到180之间来回旋转。

编写如下代码:
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */

  4.     uint16_t pluse = 500;

  5.   /* USER CODE END 1 */

  6.   HAL_Init();
  7.   SystemClock_Config();
  8.   MX_GPIO_Init();
  9.   MX_TIM16_Init();

  10.   /* USER CODE BEGIN 2 */

  11.   /* USER CODE END 2 */

  12.   /* Infinite loop */
  13.   /* USER CODE BEGIN WHILE */
  14.   while (1)
  15.   {
  16.     /* USER CODE END WHILE */

  17.     /* USER CODE BEGIN 3 */
  18.     //产生PWM,舵机转动
  19.     HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);

  20.     //1s后改变舵机角度,增加45°
  21.     HAL_Delay(1000);
  22.     pluse += 500;
  23.     if(pluse == 3000)
  24.     {
  25.       //如果舵机角度大于180°,回零
  26.       pluse = 500;
  27.     }

  28.     //设置PWM占空比
  29.     __HAL_TIM_SetCompare(&htim16, TIM_CHANNEL_1, (uint16_t)pluse);
  30.   }
  31.   /* USER CODE END 3 */
  32. }
 楼主| equivalent 发表于 2020-4-14 14:37 | 显示全部楼层
注意:STM32F1系列会报错找不到__HAL_TIM_SetCompare函数,解决方案啊:
      STM32CubeMX生成F1的工程中提示找不到 __HAL_TIM_SetCompare 问题的解决方案。
      https://blog.csdn.net/Mculover666/article/details/104801386
 楼主| equivalent 发表于 2020-4-14 14:38 | 显示全部楼层
编译下载后可以看到舵机在0°-180°之间来回旋转:

ImBhKMzpWqKa.gif
 楼主| equivalent 发表于 2020-4-14 14:38 | 显示全部楼层
至此,我们已经学会如何使用通用定时器产生PWM驱动舵机。
guanjiaer 发表于 2020-5-8 14:38 | 显示全部楼层
非常感谢楼主分享
heimaojingzhang 发表于 2020-5-8 14:39 | 显示全部楼层
角度是通过位置传感器吗
keaibukelian 发表于 2020-5-8 14:39 | 显示全部楼层
请问什么是舵机
labasi 发表于 2020-5-8 14:40 | 显示全部楼层
非常不错的资料
paotangsan 发表于 2020-5-8 14:40 | 显示全部楼层
是微型电机旋转的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部