MSP432自主开发笔记4:DS3115舵机的0~180全角度驱动

news2024/11/15 13:56:17

芯片使用: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~64
    TimA3_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 500

uint16_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舵机同样适用

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/798722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python怎么实现贪婪排名算法

目录 什么是贪婪排名算法 贪婪排名算法的优点 贪婪排名算法的应用 Python怎么实现贪婪排名算法 总结 什么是贪婪排名算法 贪婪排名算法是一种常见的排序算法&#xff0c;在许多优化问题中得到广泛应用。它的主要思想是通过每次选择当前看起来最优的选择&#xff0c;逐步构…

嵌入式:QT Day3

一、完成闹钟的实现 首页&#xff1a; 启动后&#xff1a; 点击停止后&#xff1a; 二、思维导图

Ansible的应用

Ansible简介 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机…

4. 方法(函数)

文章目录 4.1. 什么是方法的返回值?返回值在类的方法里的作用是什么?4.2. 为什么 Java 中只有值传递&#xff1f; 4.1. 什么是方法的返回值?返回值在类的方法里的作用是什么? 方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果&#xff01;&#xff08;前提…

MessageBox弹出框中加入DatePicker日期选择器

效果&#xff1a; 代码片段 重点是open函数中&#xff0c;使用了h函数来写dom。关于h函数的解释可见一下博文点击跳转博文&#xff1a;解析h函数 在element-ui的官方文档中&#xff0c;对这种方式有清晰的解释。点击跳转官网可见 <template><div><el-button t…

appium介绍

移动自动化测试工具appium。appium目前在移动UI自动化测试领域占有重要地位&#xff0c;不仅支持Android和IOS两大平台&#xff0c;还支持多种编程&#xff0c;因而得到广泛的应用。 移动应用类型 移动应用类型主要分为以下几类 Native App&#xff1a;原生应用。Mobile Web…

Android性能优化之游戏收敛线程,减少OOM发生(epic 检测线程调用/booster减少常驻线程超时销毁)

先来了解下一个空白app的进程中线程数量&#xff1a; 分析迷你世界中app线程之前&#xff0c;先来了解下空白app &#xff0c;中线程情况&#xff1a; 一个空白app的线程大概是27个&#xff1a; 一个空白的的app&#xff0c;包含FinalizerDaemon线程、FinalizerWatchd线程、R…

GitHub Copilot:让开发编程变得像说话一样简单

引用&#xff1a; 人类天生就梦想、创造、创新。但今天&#xff0c;我们花太多时间被繁重的工作所消耗&#xff0c;花在消耗我们时间、创造力和精力的任务上。为了重新连接我们工作的灵魂&#xff0c;我们不仅需要一种更好的方式来做同样的事情&#xff0c;更需要一种全新的工…

“从世界第一黑客到顶级安全咨询专家” 凯文·米特尼克去世

一、人物简介 凯文米特尼克&#xff08;英语&#xff1a;Kevin David Mitnick&#xff0c;1963年8月6日—2023年7月16日&#xff09;&#xff0c;是美国计算机安全顾问&#xff0c;作家和黑客。他拥有“世界头号黑客”&#xff0c;“世界上最著名的黑客”、“地狱黑客”、“头号…

SPI通信

文章目录 SPI通信简介硬件电路移位示意图SPI时序基本单元1.起始条件2.终止条件模式1模式0模式2模式3 SPI时序 SPI通信简介 四根通信线&#xff1a; SCK"串行时钟线 MOSI:主机输出从机输入 MISO:主机输入从机输出 SS:从机选择 通信方式&#xff1a;同步&#xff0c;全双工…

向量数据库Milvus的四个版本

目录 MilvusLite版 单机版 分布式版 Milvus Cloud版 Milvus是一个功能强大的向量数据库管理系统,提供了多种版本,以满足不同用户的需求。以下是关于Milvus四个版本的具体介绍。 MilvusLite版 MilvusLite版是Milvus的轻量级版本,适合于小规模数据集和高性能计算场景。…

使用for循环输出左上三角、右上三角、左下三角、右下三角、上下三角

1、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图形 666666666666666*/for(int i1;i<5;i){for(int j1;j<i;j){putchar(6);}printf("\n"); } return 0; } 2、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图…

合作客户销售数据可视化分析

以一个案例进行实际分析&#xff1a; 数据来源&#xff1a;【地区数据分析】 以此数据来制作报表。 技巧一&#xff1a;词云图 以城市名称来显示合同金额的分布&#xff0c;合同金额越大&#xff0c;则城市文字显示越大。 2 2 2 2 2 2

【MySQL数据库备份】

目录 一、概述 二、数据备份的重要性 1. 数据保护 2. 灾难恢复 3. 数据完整性 4. 合规性要求 三、造成数据丢失的原因 1. 硬件故障 2. 人为错误 3. 黑客攻击 4. 自然灾害 5. 软件故障 四、备份类型 1.物理与逻辑角度 1.1 概念 1.2 物理备份 1.2.1 冷备份 1.2…

php-golang-jsonrpc2.0 rpc-codec/jsonrpc2和tivoka/tivoka实践

golang代码&#xff1a; package main import ( "context" "net" "net/rpc" "github.com/powerman/rpc-codec/jsonrpc2" ) type App struct{} type Res struct { Code int json:"code" Msg string json:"msg&quo…

kafka集群

目录 broker ZooKeeper consumer group&#xff08;消费者组&#xff09; 分区&#xff08;Partitions&#xff09; 副本&#xff08;Replicas&#xff09; 主题&#xff08;Topic&#xff09; 偏移量&#xff08;offset&#xff09; broker 一个kafka进程就是一个broker…

C++ 名字空间namespace

在C中支持三种域&#xff1a;局部域、名字空间域和类域。 名字空间域是随标准C而引入的。它相当于一个更加灵活的文件域&#xff08;全局域&#xff09;&#xff0c;可以用花括号把文件的一部分括起来&#xff0c;并以关键字namespace开头给它起一个名字&#xff1a; namespac…

多线程与高并发(17)——多线程总结(很全)

总结并复习了一下之前写的多线程的知识&#xff0c;见下图。 不够清楚可私信或者processOn。

983. 最低票价;1911. 最大子序列交替和;894. 所有可能的真二叉树

983. 最低票价 核心思想&#xff1a;对于365天中的一天&#xff0c;如果它不在旅行的日子&#xff0c;我们在这一天可以不花钱&#xff1b;如果它在旅行的日期&#xff0c;那么要么这一天花钱&#xff0c;要么在前面花钱的时间范围内。所以想到了动态规划&#xff0c;对于dp[x…

深入篇【C++】【容器适配器】:(stack)(queue)(priority_queue)模拟实现(详细剖析底层实现原理)

深入篇【C】【容器适配器】: (stack&#xff09;&& (queue&#xff09;&& (priority_queue&#xff09;模拟实现(详细剖析底层实现原理&#xff09; Ⅰ.容器适配器Ⅱ.认识dequeⅢ.stack模拟实现Ⅳ.queue模拟实现Ⅴ.priority_queue模拟实现1.priority_queue()2.…