舵机+stm32+CUBE+PWM——学习笔记

最近做项目时烧了两个舵机才发现自己对舵机的学习还不够透彻,所以又重新找了一些资料看看,在这里做个总结,欢迎大家一起来探讨。

一、舵机的控制原理

        舵机的控制周期一般是20ms。也就是给其一个20ms的脉冲,其中高电平部分一般为0.5ms-2.5ms,脉冲宽度为1.5ms时作为基准信号,对应180°舵机的90°位置,对应360°舵机的速度为0。

 180°舵机:                                                                   360°舵机:

    0.5ms--------------0度;                                                  0.5ms ------------正向最大转速

    1.0ms------------45度;

    1.5ms------------90度;                                                  1.5ms ------------速度为0

    2.0ms-----------135度;

    2.5ms-----------180度;                                                  2.5ms -----------反向最大转速

         补充:180°舵机和360°舵机的控制逻辑是不同的。舵机本质是个位置伺服电机,90度、180度舵机的功能实现就能很明显的体现出这一点;但360度舵机相当于一个无极变速的减速电机,控制的是速度和方向,并不能做位置控制。所以大家在选购舵机时要根据自己的需求进行选择。

(关于舵机的控制周期以及高电平部分参数为什么是这些笔者也不知道,可能跟舵机的内部结构原理有关,如果有知道的大佬,还请在评论区或者私信多多指点)

 二、CUBEMX——PWM配置

以stm32f4xx+TIM5为例:

1.时钟配置

2.定时器配置——TIM5

·

(1+19999) / ( 84Mhz / 84 ) = 20ms,这样就配置出来一个控制周期为20ms的PWM信号。

3.代码实现

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM5_Init();
  /* USER CODE BEGIN 2 */
	HAL_TIM_Base_Start (&htim5 );
	HAL_TIM_PWM_Start (&htim5, TIM_CHANNEL_1 );
  /* USER CODE END 2 */

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

	  
    /* USER CODE BEGIN 3 */
	  __HAL_TIM_SetCompare(&htim5 , TIM_CHANNEL_1 , 500-1);  // 0°
	  HAL_Delay(1000);
	  __HAL_TIM_SetCompare(&htim5 , TIM_CHANNEL_1 , 1000-1); // 45°
	  HAL_Delay(1000);
	  __HAL_TIM_SetCompare(&htim5 , TIM_CHANNEL_1 , 1500-1); // 90°
	  HAL_Delay(1000);
	  __HAL_TIM_SetCompare(&htim5 , TIM_CHANNEL_1 , 2000-1); // 135°
	  HAL_Delay(1000);
	  __HAL_TIM_SetCompare(&htim5 , TIM_CHANNEL_1 , 2500-1); // 180°
	  HAL_Delay(1000);
	  __HAL_TIM_SetCompare(&htim5 , TIM_CHANNEL_1 , 2000-1); // 135°
	  HAL_Delay(1000);
	  __HAL_TIM_SetCompare(&htim5 , TIM_CHANNEL_1 , 1500-1); // 90°
	  HAL_Delay(1000);
	  __HAL_TIM_SetCompare(&htim5 , TIM_CHANNEL_1 , 1000-1); // 45°
	  HAL_Delay(1000);
	  __HAL_TIM_SetCompare(&htim5 , TIM_CHANNEL_1 , 500-1);  // 0°
	  HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

4.功能实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值