mg996r调试笔记(代码片段)

太阳下的楼 太阳下的楼     2022-12-06     612

关键词:

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站的舵机理论视频
实际操作网页

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

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

...,主要是学习舵机和舵机控制的知识,在这里做一下学习笔记。使用的舵机为2个DS3115MG数字舵机+4个MG996R模拟舵机。1.舵机基本构造                  &n 查看详情

8086debug调试学习笔记(代码片段)

8086DEBUG调试学习笔记安装路径:D:\\DOSBox①mountcD:\\DOSBox②输入c:③再输入masm④输入汇编的文件名(如test)⑤link⑥再输入汇编的文件名⑦debugtest.exe-r查看寄存器-a-q使用Q命令来退出debug调试-t单步调试DATASEGMENTBUFDB'HELLO... 查看详情

个人笔记rancher远程调试搭建(代码片段)

rancher远程调试搭建文章目录rancher远程调试搭建配置主机(关防火墙,关SELinux)安装docker安装go环境下载go配置环境变量安装dlv拉代码配置goland远程代码远程调试运行docker运行rancher-ui安装nodejs安装yarn拉代码启动访问dockerfile说句... 查看详情

omapl138调试笔记(代码片段)

...-function:Cre_ID:@Widic2018-1-23Mod_ID:三学习过程20170617uart2作为调试串口bandrate115200串口调试终端采用ZOC3.开发板启动开官如下:SD卡挂载boot分区挂载在/ 查看详情

linuxmipidsi驱动调试笔记-lcd时序参数配置(代码片段)

...知识以及LCD初始化序列的配置:LinuxMIPIDSILCD设备驱动开发调试细节学习笔记(一)LinuxMIPIDSI驱动调试笔记-设备树DCS格式序列之配置LCD初始化代码(二)要点亮MIPIDSI接口的LCD,我们还有一个非常重要的配置& 查看详情

c++代码调试的学习笔记(代码片段)

1.IO输出调试:输出重定向在《第八期-C++基础与深度解析》课程中,老师使用了“输出重定向”的语句来查看cout和cerr的结果:./HelloWorld>txt12>txt2代码含义:将程序HelloWorld的标准输出stdout重定向至文件txt1... 查看详情

移远4g模块调试笔记(代码片段)

...该接口可用于AT命令传送、数据传输、GNSSNMEA输出、软件调试、软件升级和USB语音。    系统: 查看详情

移远4g模块调试笔记(代码片段)

...该接口可用于AT命令传送、数据传输、GNSSNMEA输出、软件调试、软件升级和USB语音。    系统: 查看详情

sh我-mg-特质-2.0(代码片段)

查看详情

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

产品名称:TOWERPRO(辉盛)大扭力舵机MG996R(MG995升级产品)6v/11Kg厂家编号:MG996R产品净重:55g产品尺寸:40.7*19.7*42.9mm产品拉力:9.4kg/cm(4.8V),11kg/cm(6V)反应速度:0.17sec/60degree(4.8v)0.14sec/60degree(6v)工作电压:4.8-7.2V工作温度:0℃-55℃齿轮形式:金... 查看详情

django讲课笔记04:django项目的调试(代码片段)

...形界面运行项目4、终端命令运行项目(二)PyCharm调试Django项目1、修改index/views.py2、设置断点3、开始调试4、各按钮功能三、课堂小结四、课后 查看详情

bes平台(恒玄)anc调试笔记(代码片段)

一 前言最近比较忙,昨天更新了EQ调试模块,今天就趁热打铁把ANC部分也写下。主要说一些基于恒玄平台2500的ANC环境搭配软件设置和常见问题分析,个人见解,有不足之处,敬请锤教。二环境搭配 (此... 查看详情

linuxmipidsilcd设备驱动开发调试细节学习笔记(代码片段)

最近在学习MIPI接口的LCD驱动开发与调试,这里我主要用的是MIPI-DSI接口,它学习起来真的是太复杂了,特别是对于我这种很久都没写驱动来说更是头疼,但是头疼归头疼,工作咱们还是要完成的,那就只能硬着头皮往下肝吧!首... 查看详情

c语言进阶学习笔记七程序执行+调试技巧(实用技巧篇)(代码片段)

...符串④define宏名(参数表)字符串⑤宏和函数对比二、调试技巧篇①什么是bug?②调试是什么?有多重要?③debug和release的介绍④windows环境调试介绍⑥如何写出好(易于调试)的代码?一、程序执行篇程序的翻译... 查看详情

android逆向笔记-idapro动态调试android程序(真机)(代码片段)

这里的安卓版本是:Android5.1.1(Lollipop,API22)LGEGoogleNexus5arm使用的IDA为:IDAPro6.8将android_server送到/data/local/tmpadbpushandroid_server/data/local/tmpadbshellsumvandroid_serverandroi 查看详情

数据分析处理库pandas(代码片段)

#pandas_1importpandasfood_info=pandas.read_csv("food_info.csv")#print(type(food_info))print(food_info.dtypes)‘‘‘NDB_Noint64Shrt_DescobjectWater_(g)float64Energ_Kcalint64Protein_(g)float64Lipid_Tot_(g)float64Ash_(g)float64Carbohydrt_(g)float64Fiber_TD_(g)float64Sugar_Tot_(g)float64Calcium_(mg)f... 查看详情

瑞芯微rv1109sdk定制与调试总结笔记(代码片段)

1、修改串口波特率为115200,解决串口终端乱码问题1.1、修改buildroot1、修改路径:rv1126_rv1109_linux_sdk_v1.8.0_20210224/buildroot/configs/rockchip_rv1126_rv1109_defconfig2、修改方法:去除:-BR2_TARGET_GENERIC_GETTY_BAUDRATE_1500000=y添加:+BR2 查看详情

瑞芯微rv1109sdk定制与调试总结笔记(代码片段)

1、修改串口波特率为115200,解决串口终端乱码问题1.1、修改buildroot1、修改路径:rv1126_rv1109_linux_sdk_v1.8.0_20210224/buildroot/configs/rockchip_rv1126_rv1109_defconfig2、修改方法:去除:-BR2_TARGET_GENERIC_GETTY_BAUDRATE_1500000=y添加:+BR2 查看详情