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调试笔记的主要内容,如果未能解决你的问题,请参考以下文章