飞特STS3315基本使用方法

2024-09-07 11:52

本文主要是介绍飞特STS3315基本使用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

宁天道/FeelECH

01-介绍

串口总线舵机,可以通过一根线将多个舵机串联在一起,一个串口线片可以控制所有的舵机。

内带闭环,可以自定义舵机移动的最大速度,加速度,

可以修改各种模式,满足各种各样的需求,步进模式,

可控最多7.5圈稳定闭环转动

需要USB/TTL调试版

通过入手教程学习

数据单位和指令内容等在内存表中可以看

其他长相的也行

默认波特率1000000

电压6-8.4

02-上位机调试内容

0-连接上位机

使用USB与调试版连接时,然后和舵机通信时,需要将ZX和USB引脚短接,其他调试版应该也有类似的需求,注意一点

1-设计扭矩

仅限夹取相同物品(相同质量的物品)且需提前设定好“扭矩限制”百分比,如果是多次夹取质量体积不固定的物品,无法判定舵机需要输出的扭矩值,可能会损坏物体或舵机出现过载卸力等情况。

以串口舵机为例,串口舵机具备“扭矩限制”百分比输出可控。当物体的重量需要舵机输出 1kg 的力且能维持物品夹取不掉落又不损伤物体。

我们可以通过以下操作实现:假设堵转扭矩为 10kg.cm,在 16 地址“扭矩限制”中输入 100(表示 10kg 的 10%即 1kg 输出),即可实现 1kg 的力去夹取物品,但同时速度也会变慢。


舵机输出轴是按照公斤每厘米计算的,如 20kg.cm 就是输出轴中心 1CM 处最大负重 20kg,如装上摆臂后,摆臂长度是 10CM,那么摆臂末端所能负重最大是 2kg,舵机在最大负载下寿命及短,需保证在额定负载下,会延长舵机使用寿命,一般堵转的三分一是额定扭矩,那么上述说的 20kg.cm,额定就是约为 6.5kg 以下,2kg 就是 0.65kg 以下。

2-观察最大速度

3-修改舵机ID

4-修改波特率

还有一部分,看上手手册去吧

03-基本调度(无DMA)(自行移植版本v0.1)

1-写逻辑

这是一个发送指令的函数

int	syncReadPacketTx(uint8_t ID[], uint8_t IDN, uint8_t MemAddr, uint8_t nLen)
{uint8_t checkSum;uint8_t i;rFlushSCS();syncReadRxPacketLen = nLen;checkSum = (4+0xfe)+IDN+MemAddr+nLen+INST_SYNC_READ;writeByteSCS(0xff);writeByteSCS(0xff);writeByteSCS(0xfe);writeByteSCS(IDN+4);writeByteSCS(INST_SYNC_READ);writeByteSCS(MemAddr);writeByteSCS(nLen);for(i=0; i<IDN; i++){writeByteSCS(ID[i]);checkSum += ID[i];}checkSum = ~checkSum;writeByteSCS(checkSum);wFlushSCS();syncReadRxBuffLen = readSCS(syncReadRxBuff, syncReadRxBuffMax);return syncReadRxBuffLen;
}
int writeByteSCS(unsigned char bDat)
{if(wLen<sizeof(wBuf)){wBuf[wLen] = bDat;wLen++;}return wLen;
}//将数据指令逐个写入缓冲区//写缓冲区结束,将其阻塞发送
void wFlushSCS()
{if(wLen){Uart_Send(wBuf, wLen);wLen = 0;}
}
void Uart_Send(uint8_t *buf , uint16_t len)
{HAL_UART_Transmit(UART_InitStructure, buf, len, HAL_MAX_DELAY);
}

2-读逻辑

先发送指令,之后立刻进入阻塞式接收方式(那我DMA是不是也可以仿照这种模式)

int readSCS(unsigned char *nDat, int nLen)
{return Uart_Read(nDat, nLen, IOTimeOut);
}
int16_t Uart_Read(uint8_t *buf , uint16_t len, uint32_t timeout)
{if(HAL_UART_Receive(UART_InitStructure, buf, len, timeout)==HAL_OK){return len;}else{return 0;}
}

接收到数据后,直接下一步进入结算

	for(i=0; i<sizeof(ID); i++){//接收ID[i]同步读返回包if(!syncReadPacketRx(ID[i], rxPacket)){continue;//接收解码失败}STS_Group[i]->position = syncReadRxPacketToWrod(15);//解码两个字节 bit15为方向位,参数=0表示无方向位STS_Group[i]->speed = syncReadRxPacketToWrod(15);//解码两个字节 bit15为方向位,参数=0表示无方向位HAL_Delay(10);}

04-DMA版本(v1.1)

有些缺陷,在scan和set间最少间隔一毫秒

在sts_api.h中有详细的调用方案

1-写逻辑

在开始发送的时候关闭DMA传输,在结束发送的时候重新开启,此时的效果和缓冲区模式类似

//只在内部
void Uart_DMA_Send_Stop(void)//开始写缓冲区时,关闭,并清空缓冲区
{HAL_UART_DMAStop(&UART_InitStructure);//直接关闭串口全部DMA,可能有问题,//	或许可以通过全局变量加个保护
}//只在内部
void Uart_DMA_Send_Start(uint8_t *buf , uint16_t len){//写完缓冲区后,打开发送DMAHAL_UART_Transmit_DMA(&UART_InitStructure, buf, len);//使用DMA发送数据
}

2-读逻辑

开启串口空闲中断

在完成指令的发送后,立刻打开DMA接收,之后读函数就结束,在串口空闲中断进入的时候,进行数据的计算

问题:

01-串口空闲中断只在接收完一帧数据后,没有继续接收数据时才会进入,发送结束不会激活。

02-一开始这个逻辑时不能用的,但在给malloc前加入了(uint8_t*)后就可以用了,不知道为什么,观察到没有的时候,其数据一直是0且只有一位。加入后,也只有一位,但数据为ff

这篇关于飞特STS3315基本使用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144991

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施: