MSP432自主开发笔记4:DS3115舵机的0~180全角度驱动
芯片使用: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.clockSource=TIMER_A_CLOCKSOURCE_SMCLK; //时钟源TimA3_PWMConfig.clockSourceDivider=48; //时钟分频 范围1~64TimA3_PWMConfig.timerPeriod=3333; //自动重载值TimA3_PWMConfig.compareRegister=TIMER_A_CAPTURECOMPARE_REGISTER_3;//通道一(与引脚相关联)TimA3_PWMConfig.compareOutputMode=TIMER_A_OUTPUTMODE_TOGGLE_SET; //输出模式TimA3_PWMConfig.dutyCycle=1; //此处可初始调占空比//初始化定时器:Timer_A_generatePWM(TIMER_A3_BASE,&TimA3_PWMConfig);}
这段代码分为几个步骤来初始化定时器TA3:
1.配置GPIO复用
2.配置初始化结构体:
我此处的时钟源SMCLK是配置的48Mhz,48分频,
TimA3_PWMConfig.timerPeriod=3333; 是自动重载值,是根据需要频率计算的:
计算公式如下:
PWM频率 = 时钟源频率 / ((时钟源除数值“时钟分频”) *(CCR0值“自动重载值” + 1))
此处我需要的是300HZ的信号,因此我的计算过程如下:
300=48 000 000/(48*(CCR0+1))
计算出CCR0约为3333
设计转角函数:
因为这个项目仅仅只需让这个舵机转就行了,所以这部分做的比较粗糙,使用了延时函数以及扔进主循环的诸多粗糙做法:
大致思路是定义好其最大与最小占空比,在定义其每次转角占空比增加的最小分度 ,让i从500~2500之间每次加三在变化,同时向上位机打印当前角度的i值:
#include "main.h"#define DIV 3
#define DIV_MAX 2500
#define DIV_MIN 500uint16_t i=0;int main(void)
{inint_all(); //初始化所有模块while (1){if(i<DIV_MIN){i=DIV_MIN;}i+=DIV;printf("%d\r\n",i);delay_ms(50);MAP_Timer_A_setCompareValue(TIMER_A3_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_3,i);if(i>=DIV_MAX){i=DIV_MIN;}}
}
整体测试工程下载:
https://download.csdn.net/download/qq_64257614/88111224?spm=1001.2014.3001.5503
测试成功视频:
·
DS3115舵机的0~180全角度驱动
提示:这个代码对MG996R舵机同样适用


相关文章:
MSP432自主开发笔记4:DS3115舵机的0~180全角度驱动
芯片使用:MSP432P401R. 今日学习一款全角度15KG大扭力舵机的驱动,最近电赛学习任务紧,更新一篇比较水的文章: 文章提供原理解释,全部代码,整体工程: 目录 舵机驱动原理: 这是舵机DS3115MG:…...
【Matlab】基于卷积神经网络的时间序列预测(Excel可直接替换数据)
【Matlab】基于卷积神经网络的时间序列预测(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码6.完整代码7.运行结果1.模型原理 基于卷积神经网络(Convolutional Neural Network,CNN)的时间序列预测是一种用于处理时间序列数据的深度学习方法。…...
Ansible安装部署与应用
文章目录 一、ansible简介二、ansible 环境安装部署三、ansible 命令行模块3.1 command 模块3.2 shell 模块3.3 cron 模块3.4 user 模块3.5 group 模块3.6 copy 模块3.7 file 模块3.8 hostname 模块3.9 ping 模块3.10 yum 模块3.11 service/systemd 模块3.12 script 模块3.13 m…...
重生之我要学C++第四天
这篇文章的主要内容是类的默认成员函数。如果对大家有用的话,希望大家三连支持,博主会继续努力! 目录 一.类的默认成员函数 二.构造函数 三.析构函数 四.拷贝构造函数 五.运算符重载 一.类的默认成员函数 如果一个类中什么成员都没有&…...
创建一个简单的 Servlet 项目
目录 1.首先创建一个 Maven 项目 2.配置 maven 仓库地址 3.添加引用 4.配置路由文件 web.xml 5.编写简单的代码 6.配置 Tomcat 7.写入名称,点击确定即可 8.访问 1.首先创建一个 Maven 项目 2.配置 maven 仓库地址 3.添加引用 https://mvnrepository.com/ 中央仓库地址…...
godot引擎c++源码深度解析系列一
许久没有使用c开发过项目了,如果按照此时单位的入职要求,必须拥有项目经验的话,那我就得回到十多年前,大学的时代,哪个时候真好,电脑没有这么普及,手机没有这么智能,网络没有这么发达…...
【VB6|第21期】检查SqlServer数据库置疑损坏的小工具(含源码)
日期:2023年7月25日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方…...
React的hooks---useCallback useMemo
useCallback 和 useMemo 结合 React.Memo 方法的使用是常见的性能优化方式,可以避免由于父组件状态变更导致不必要的子组件进行重新渲染 useCallback useCallback 用于创建返回一个回调函数,该回调函数只会在某个依赖项发生改变时才会更新,…...
05. 容器资源管理
目录 1、前言 2、CGroup 2.1、是否开启CGroup 2.2、Linux CGroup限制资源能使用 2.2.1、创建一个demo 2.2.2、CGroup限制CPU使用 2.3、Linux CGroup限制内存使用 2.4、Linux CGroup限制IO 3、Docker对资源的管理 3.1、Docker对CPU的限制 3.1.1、构建一个镜像 3.1.2…...
通过ETL自动化同步飞书数据到本地数仓
一、飞书数据同步到数据库需求 使用飞书的企业都有将飞书的数据自动同步到本地数据库、数仓以及其他业务系统表的需求,主要是为了实现飞书的数据与业务系统进行流程拉通或数据分析时使用,以下是一些具体的同步场景示例: 组织架构同步&#…...
MySQL基础扎实——MySQL中各种数据类型之间的区别
在MySQL中,有各种不同的数据类型可供选择来存储不同类型的数据。下面是一些常见的数据类型以及它们之间的区别: 整数类型: TINYINT:1字节,范围为-128到127或0到255(无符号)。SMALLINT࿱…...
每天五分钟机器学习:多项式非线性回归模型
本文重点 在前面的课程中,我们学习了线性回归模型和非线性回归模型的区别和联系。多项式非线性回归模型是一种用于拟合非线性数据的回归模型。与线性回归模型不同,多项式非线性回归模型可以通过增加多项式的次数来适应更复杂的数据模式。在本文中,我们将介绍多项式非线性回…...
ETH网络学习
概要 ETH网络是一个P2P网络,整个网络又区分为“执行层”与“共识层”。“执行层”节点负责交易交换,“共识层”节点负责区块打包、区块验证、区块同步和链同步。 执行层 执行层分为“服务发现”与“DevP2P”,两者共同并行执行。 服务发现…...
01-将函数参数化进行传递
项目源码:https://github.com/java8/ 1 应对不断变化的需求 在我们进行开发中,经常需要面临需求的不断变更,我们可以将行为参数化以适应不断变更的需求。 行为参数化就是可以帮助我们处理频繁变更的需求的一种软件开发模式 我们可以将代码…...
数据结构【栈和队列】
第三章 栈与队列 一、栈 1.定义:只允许一端进行插入和删除的线性表,结构与手枪的弹夹差不多,可以作为实现递归函数(调用和返回都是后进先出)调用的一种数据结构; 栈顶:允许插入删除的那端&…...
MATLAB | 产生阿尔法稳定分布噪声并作出概率密度函数
一、问题描述 想产生不同特征参数的α稳定随机变量,并且作出其概率密度函数进行对比。 二、解决思路 运行了MATLAB的官方实例代码: openExample(‘stats/ComparePDFsOfStableDistributionsExample’) (1)使用makedist()函数生成…...
深入浅出Pytorch函数——torch.softmax/torch.nn.functional.softmax
分类目录:《深入浅出Pytorch函数》总目录 相关文章: 机器学习中的数学——激活函数:Softmax函数 深入浅出Pytorch函数——torch.softmax/torch.nn.functional.softmax 深入浅出Pytorch函数——torch.nn.Softmax 将Softmax函数应用于沿dim的…...
Vue2学习笔记
vue是根据数据来构建用户界面的一套框架 创建一个vue实例 <!-- 1.创建一个容器 2.引入vue.js开发版本(全局的) 3.创建实例对象 4.配置选项 > 完成渲染 --> <div id"app">{{ msg }} </div> <script srcvue.js><…...
Java 悲观锁 乐观锁
锁可以从不同的角都分类。其中乐观锁和悲观锁是一种分类方式 一、悲观锁、乐观锁定义 悲观锁就是我们常说到的锁。对于悲观锁来说,他总是认为每次访问共享资源时会发生冲突,所以必须每次数据操作加上锁,以保证临界区的程序同一时间只能有一个…...
优惠券秒杀(二)
库存超卖问题分析 库存超卖问题其本质就是多个线程操作共享数据产生的线程安全问题,即当一个线程在执行操作共享数据的多条代码的过程中,其他线程也参与了进来,导致了线程安全问题的产生。例如:线程1发送请求,查询库存…...
【MobaXterm进阶】SSH连接稳定性优化:Keepalive与超时设置详解
1. 为什么SSH连接会频繁断开? 很多朋友在用MobaXterm远程连接服务器时都遇到过这样的困扰:明明连接得好好的,过一会儿就莫名其妙断开了。特别是当你正在执行一个耗时较长的任务时,突然中断简直让人抓狂。这种情况在家庭版用户中尤…...
QGIS里怎么加载NASA的SRTM高程数据?从下载到3D可视化的保姆级教程
QGIS实战:从NASA SRTM高程数据下载到3D地形可视化全流程指南 当你第一次在QGIS中看到那些起伏的山脉、蜿蜒的河谷以三维形式呈现时,那种将地理数据转化为视觉故事的成就感是无与伦比的。NASA的SRTM(航天飞机雷达地形测绘任务)高程…...
Phi-4-mini-reasoning部署案例:科研团队构建内部逻辑验证辅助工具链
Phi-4-mini-reasoning部署案例:科研团队构建内部逻辑验证辅助工具链 1. 项目背景与模型介绍 Phi-4-mini-reasoning 是一款专注于推理任务的文本生成模型,特别适合处理数学题、逻辑题、多步分析和简洁结论输出等场景。与通用聊天模型不同,它…...
javaweb企业设备信息资讯展示网站
目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分核心业务功能技术实现要点安全与维护项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户管理模块 用户注册与登…...
为什么头部AI团队已弃用Triton+ONNX Runtime?Cuvil架构设计图暴露Python推理第三条路!
第一章:Cuvil编译器在Python AI推理中的应用全景概览Cuvil编译器是一款面向AI工作负载的轻量级领域专用编译器,专为优化Python生态中基于PyTorch、ONNX及自定义计算图的推理流程而设计。它不替代传统Python解释器,而是通过源码到IR࿰…...
马上深挖!!!三段逆置如何实现数组轮转?!用最简单的话让你秒懂
一、目的给定一个数组和一个整数k,让数组向右轮转k个数。如令[1,2,3,4,5,6]向右轮转3个数,结果为[4,5,6,1,2,3]。二、代码#include <iostream> using namespace std;void swap(int* a,int* b) {int tmp*a;*a*b;*btmp;return; }void reverse(int* a…...
Qwen3.5-4B-Claude-Opus镜像保姆级教程:双RTX4090D上开箱即用
Qwen3.5-4B-Claude-Opus镜像保姆级教程:双RTX4090D上开箱即用 1. 镜像概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型,重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。该版本以 GG…...
WarcraftHelper解决方案:魔兽争霸3跨系统优化指南
WarcraftHelper解决方案:魔兽争霸3跨系统优化指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3作为经典的即时战略游戏&#…...
IntelliJ IDEA开发Qwen3-TTS-12Hz-1.7B-CustomVoice插件教程
IntelliJ IDEA开发Qwen3-TTS-12Hz-1.7B-CustomVoice插件教程 1. 引言 你是不是经常需要在开发过程中生成语音内容?比如给应用添加语音提示、制作有声说明文档,或者只是想给枯燥的编程生活加点声音乐趣?今天我要带你用IntelliJ IDEA开发一个…...
IndexTTS2 V23应用案例:打造智能客服语音,让机器说话更有人情味
IndexTTS2 V23应用案例:打造智能客服语音,让机器说话更有人情味 1. 为什么智能客服需要情感语音? 在当今的客户服务场景中,冰冷的机械语音正在被市场淘汰。研究表明,带有适当情感的语音交互能显著提升用户体验&#…...
