当前位置:   article > 正文

【STM32】HAL库 PWM驱动舵机_stm32hal驱动舵机

stm32hal驱动舵机

系列文章目录

【STM32】HAL库 新建MDK工程
【STM32】HAL库 定时器中断
【STM32】HAL库 PWM驱动LED呼吸灯


前言

使用按键控制PWM,驱动舵机

一、SG90舵机

舵机的控制一般需要一个20ms左右的时基脉冲,脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:

高电平时间旋转角度
0.5ms0度
1.0ms45度
1.5ms90度
2.0ms135度
2.5ms180度

计数器自动重装值为ARR,0.5ms的计数次数为h。
ARR/ 20 = h / 0.5,h = ARR /40。

1ms旋转45度,1ms的计数次数为0.5ms的两倍 ,求系数k
ARR/ 40 * 2 = 45 *k + ARR/40,k = ARR/ 1800。

1ms的占空比为1 / 20
CCR = 占空比 * ARR = ARR / 20 = ARR/ 40 * 2
CCR = 角度 * ARR / 1800 + ARR /40

二、STM32CubeMX设置

舵机的控制一般需要一个20ms左右的时基脉冲,所以一个周期的时间为20ms,50Hz。舵机的死区时间为5us,所以重装载值需要小于4000 = 20ms/5us。重装载值取2000,50Hz = 72MHz / 分频系数/2000 ,分频系数为720。

在这里插入图片描述

按键引脚

三、代码

  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
  • 1
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
   if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) == GPIO_PIN_RESET)
	 {
			HAL_Delay(20);
			while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_RESET);
			HAL_Delay(20);
		 	Angle += 30;
			if (Angle > 180)
			{
				Angle = 0;
			}
	 }
	 __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2,Angle  * (htim2.Init.Period + 1) / 1800 + (htim2.Init.Period + 1) / 40);
  }
  /* USER CODE END 3 */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/850869
推荐阅读
相关标签
  

闽ICP备14008679号