MG996R调试笔记

Posted 太阳下的楼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MG996R调试笔记相关的知识,希望对你有一定的参考价值。

基本介绍

简介


补充一点:关于180度和360度的区别:MG996R舵机单线驱动,是一款360°舵机,180°舵机与360°舵机的区别就是:180°舵机可以直接控制舵机旋转的角度,但舵机只能够旋转180°;
360°舵机无法直接控制其旋转角度,只能控制其转动方向和速度。



其中的扭力是指摆臂长1cm舵机可以扭动的最大重量

控制

声明:MG996R舵机虽然是360度的舵机但我在使用时仅用到了0-90度所以此文章仅保证0至180度范围内的经验有效
详情:舵机的PWM控制一般需要一个20ms的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。
以180度角度舵机为例,对应的控制关系是这样的:
0.5ms--------------0度; 2.5% (0.5ms高电平+19.5低电平)
1.0ms------------45度; 5.0% (1.0ms高电平+19.0低电平)
1.5ms------------90度; 7.5% (1.5ms高电平+18.5低电平)
2.0ms-----------135度;10% (2.0ms高电平+18.0低电平)
2.5ms-----------180度;12.5%(2.5ms高电平+17.5低电平)

参数计算

舵机的控制用的是定时器的PWM波的输出通道,所以要实现舵机的精准控制一定要明确如下几个值:
1.定时器时钟分频

2.定时器频率
3.定时器周期

4.高电平脉冲值

图上为我用CubeMX配置生成的TIM2初始化部分,下面根据此配置进行计算

周期脉冲

舵机需要的周期脉冲为20ms,首先需要求定时器频率(我用的主控为STM32F103ZET6,时钟频率我配的72M)计算如下:72000,000/24/60000=50HZ;
求出定时器频率后再计算
1/50=0.02s=20ms;

舵机控制的输出量

占空比我认为是在定时器的周期脉冲中高电平/低电平所占的百分比,舵机的控制用的是高电平的占空比;
例如你想让舵机旋转45度,根据上面的控制关系可知占空比为5%,所以输出量为:定时器周期(60000)*占空比(5%)=3000

程序代码

 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_TIM1_Init();
  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); //一定要手动开启!!!!
  /* USER CODE END 2 */

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

    /* USER CODE END WHILE */
     __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1,1500); //舵机转动到0度
	 HAL_Delay(1000);
     __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1,7500);//舵机转动到180度
	 HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  
  /* USER CODE END 3 */

实现效果:舵机不停由0度转至180度
如若不是这个效果,问题可能出在tim.c中的void MX_TIM1_Init(void)函数中如图所示处:此为TIM初始化的输出量

下图是main函数中的输出量

两个输出量先执行初始化中的输出量;

代码很简单仅用到了两个HAL库里面的函数
1.HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
2.__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1,1500);
里面的初始化函数是我用CubeMX生成的没有任何改动。
MG996R舵机还有一个问题,在没装摆臂时它的转动方向是看不出来的,所以需要你手动把摆臂安在你想要的摆动范围内,可以先烧录上图代码让舵机呈180度来回转动,方便调节舵机摆臂的位置。

本次相关资料来源:
野火在B站的舵机理论视频
实际操作网页

写在最后:我写博客的初衷是因为我想从事这方面的工作,想要走的更远那一定要对自己的每一次经历有所总结,当然如果能帮到正在寻找方法的你,我也会由衷的高兴,同时第一次写博客如有错处欢迎指教。

以上是关于MG996R调试笔记的主要内容,如果未能解决你的问题,请参考以下文章

MG996R调试笔记

MG996R调试笔记

六自由度机械臂项目学习笔记

舵机&数据处理&stm32内存之堆栈溢出(遇到的问题)

STM32驱动硬件MG90S舵机

oracle课堂笔记--第十三天