sem网站建设,南通网站建设方案托管,wordpress 免密码,wam和wordpress芯片使用#xff1a;MSP432P401R.
今日学习一款全角度15KG大扭力舵机的驱动#xff0c;最近电赛学习任务紧#xff0c;更新一篇比较水的文章#xff1a;
文章提供原理解释#xff0c;全部代码#xff0c;整体工程#xff1a;
目录
舵机驱动原理:
这是舵机DS3115MG:…芯片使用MSP432P401R.
今日学习一款全角度15KG大扭力舵机的驱动最近电赛学习任务紧更新一篇比较水的文章
文章提供原理解释全部代码整体工程
目录
舵机驱动原理:
这是舵机DS3115MG:
全角度反馈编程设计
初始化定时器TA3
设计转角函数
整体测试工程下载 测试成功视频
提示这个代码对MG996R舵机同样适用 舵机驱动原理:
目前我所接触到的舵机9g舵机以及本文将要介绍的DS3115MG它们作为舵机一般接有三根线其中俩根是供电使用还有一根是信号线供电需要我们对照产品手册选择合适的电源而信号线则是重点学习的地方
之前我有一篇文章讲过9g舵机的驱动 MSP432学习笔记8定时器A_PWM驱动舵机_NULL指向我的博客-CSDN博客 而我们今日学习的主角DS3115MG它的驱动原理与之大同小异我们需要给信号线一个相应频率PWM的信号让其知道有控制信号要到来然后同时调整PWM的占空比即可调整其旋转角度
这里信号的频率与占空比先不仔细说后文会一起查阅介绍手把手编程驱动 这是舵机DS3115MG: 我们看到它的手册挖掘有用信息
我们需要知道的大致有三个重要点1、电压电流 2、PWM频率 3、识别占空比范围 第一张图告诉我们这个产品是有15KG的扭力的而且预计可能要最大6V的供电 第二张图介绍基本机械特性与性能使用机械电子产品应在合理的环境条件下 这张图便是有我们需要的参数 1.PWM频率范围50~330Hz 2.脉宽范围是500~2500 us 3.精度是3us 4.旋转方向是顺时针 全角度反馈编程设计 实验目标 0.初始化定时器A的PWM模式 1.舵机缓慢从0~180全角度转动 2.反馈当前高电平占空比 首先我们有输出PWM的需求因此这时少不了MSP432的定时器A他作为瑞士军刀级别的多功能定时器模块它有PWM输出的功能
初始化定时器TA3
//定时器A3 PWM 初始化
void TimerA3_PWM_inint(void)
{//1.配置GPIO复用GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P9,GPIO_PIN2,GPIO_PRIMARY_MODULE_FUNCTION);//2.配置结构体Timer_A_PWMConfig TimA3_PWMConfig; //定义一个名为 TimA1_PWMConfig的结构体TimA3_PWMConfig.clockSourceTIMER_A_CLOCKSOURCE_SMCLK; //时钟源TimA3_PWMConfig.clockSourceDivider48; //时钟分频 范围1~64TimA3_PWMConfig.timerPeriod3333; //自动重载值TimA3_PWMConfig.compareRegisterTIMER_A_CAPTURECOMPARE_REGISTER_3;//通道一与引脚相关联TimA3_PWMConfig.compareOutputModeTIMER_A_OUTPUTMODE_TOGGLE_SET; //输出模式TimA3_PWMConfig.dutyCycle1; //此处可初始调占空比//初始化定时器Timer_A_generatePWM(TIMER_A3_BASE,TimA3_PWMConfig);} 这段代码分为几个步骤来初始化定时器TA3
1.配置GPIO复用
2.配置初始化结构体 我此处的时钟源SMCLK是配置的48Mhz48分频 TimA3_PWMConfig.timerPeriod3333; 是自动重载值是根据需要频率计算的 计算公式如下 PWM频率 时钟源频率 / (时钟源除数值“时钟分频” *CCR0值“自动重载值” 1) 此处我需要的是300HZ的信号因此我的计算过程如下 30048 000 000/48*CCR01 计算出CCR0约为3333 设计转角函数
因为这个项目仅仅只需让这个舵机转就行了所以这部分做的比较粗糙使用了延时函数以及扔进主循环的诸多粗糙做法
大致思路是定义好其最大与最小占空比在定义其每次转角占空比增加的最小分度 让i从500~2500之间每次加三在变化同时向上位机打印当前角度的i值
#include main.h#define DIV 3
#define DIV_MAX 2500
#define DIV_MIN 500uint16_t i0;int main(void)
{inint_all(); //初始化所有模块while (1){if(iDIV_MIN){iDIV_MIN;}iDIV;printf(%d\r\n,i);delay_ms(50);MAP_Timer_A_setCompareValue(TIMER_A3_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_3,i);if(iDIV_MAX){iDIV_MIN;}}
} 整体测试工程下载 https://download.csdn.net/download/qq_64257614/88111224?spm1001.2014.3001.5503 测试成功视频
· DS3115舵机的0~180全角度驱动 提示这个代码对MG996R舵机同样适用