【STM32】HAL库 PWM驱动舵机

系列文章目录

【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);
  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 */
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值