发新帖我要提问
12
返回列表
打印
[开发工具]

STM32CubeMX_24 | 使用通用定时器产生PWM驱动舵机

[复制链接]
楼主: equivalent
手机看帖
扫描二维码
随时随地手机跟帖
21
equivalent|  楼主 | 2020-4-14 14:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
动态改变舵机角度
上一个实验中,我们配置了PWM波的高电平时长计数个数为1000,即时长为1ms,对应旋转角度为45°,在本实验中,我们来动态改变 PWM 占空比,使舵机在0°到180之间来回旋转。

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

    uint16_t pluse = 500;

  /* USER CODE END 1 */

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM16_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

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

    //1s后改变舵机角度,增加45°
    HAL_Delay(1000);
    pluse += 500;
    if(pluse == 3000)
    {
      //如果舵机角度大于180°,回零
      pluse = 500;
    }

    //设置PWM占空比
    __HAL_TIM_SetCompare(&htim16, TIM_CHANNEL_1, (uint16_t)pluse);
  }
  /* USER CODE END 3 */
}

使用特权

评论回复
22
equivalent|  楼主 | 2020-4-14 14:37 | 只看该作者
注意:STM32F1系列会报错找不到__HAL_TIM_SetCompare函数,解决方案啊:
      STM32CubeMX生成F1的工程中提示找不到 __HAL_TIM_SetCompare 问题的解决方案。
      https://blog.csdn.net/Mculover666/article/details/104801386

使用特权

评论回复
23
equivalent|  楼主 | 2020-4-14 14:38 | 只看该作者
编译下载后可以看到舵机在0°-180°之间来回旋转:

使用特权

评论回复
24
equivalent|  楼主 | 2020-4-14 14:38 | 只看该作者
至此,我们已经学会如何使用通用定时器产生PWM驱动舵机。

使用特权

评论回复
25
guanjiaer| | 2020-5-8 14:38 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
26
heimaojingzhang| | 2020-5-8 14:39 | 只看该作者
角度是通过位置传感器吗

使用特权

评论回复
27
keaibukelian| | 2020-5-8 14:39 | 只看该作者
请问什么是舵机

使用特权

评论回复
28
labasi| | 2020-5-8 14:40 | 只看该作者
非常不错的资料

使用特权

评论回复
29
paotangsan| | 2020-5-8 14:40 | 只看该作者
是微型电机旋转的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则