舵机固件和基本的调试方法
jinsonli opened this issue · comments
Hello 正在复刻的朋友们,分享一点简单的经验。
1)舵机第一次调试时,会默认初始化本地I2C地址为12,并且在收到主控的Enable信号前不会有动作。
2】舵机第一次连接主控时,【需要一个个配置地址】,一次只连一个,在主控用0X00地址发送 SetId指令。 比如:头部舵机配置为0X02,断电重启,用主控测试能否用0X02连接到舵机。 然后再插第二个舵机。one by one.
3)4.3g舵机用默认PD参数,和默认50%扭矩限制,能正常控制, 但是9g舵机(底座那个),需要把扭矩限制调到0.7以上,P参数调大一点,控制效果会好一点。
4)舵机的程序,我发现偶尔会有I2C卡死收不到中断的问题。后来我把控制函数从中断中拿出来,在Main While里200hz执行会明显有提升。不知道其他朋友们有没有遇到过。我用MDK编译了两个固件,有需要的朋友可以下载试试。(F030F4P6便宜很多)
ServoDrive-f030f4p6.zip
ServoDrive-f070f4p6.zip
ServoDrive-fw-f030.zip
ServoDrive-f70.zip
舵机调试工具.zip
ce7852a7f6c44d335e95db5f3323c53b.1.mp4
default.mp4
感谢反馈,如果能够把舵机调试流程封装成工具或者代码,可以提交pr我帮你合入仓库~
好的。 我有空弄一下。
舵机烧完程序记得用热熔胶固定一下哦避免短路,热熔胶加热就会融化所以不是一次性的固定方式可以放心整。
想请教一下,ServoDrive-fw文件夹中的代码是怎么运行的?
1).ioc文件应该只配置了芯片,用CubeMX生成的代码中不存在关于i2c和pid的代码,烧入芯片的时候这部分代码怎么处理?
2)有关i2c和pid等的代码在UserApp中,这一部分代码用cmake编译之后还要烧入芯片吗?两份代码会不会冲突?
本科和硕士都是做上位机开发的,对单片机编程不够了解,如果能描述一下ServoDrive-fw的处理过程那就太感谢了,还望赐教一下
所有代码都需要的,你用CubeMX生成的如果是keil工程那需要自己把其余代码文件添加进去,CubeMX是不知道你自己的代码在哪里的
你好,也就是说,需要一个个在舵机源码里先定义配置地址,再烧录进舵机控制MCU里吗
所有代码都需要的,你用CubeMX生成的如果是keil工程那需要自己把其余代码文件添加进去,CubeMX是不知道你自己的代码在哪里的
谢谢指点,现在发现问题主要是之前手欠cubemx保存了一次工程,没找到Main()的调用。。。所以我就纳闷我以为cubemx的main和Main都是运行入口来着
你好,也就是说,需要一个个在舵机源码里先定义配置地址,再烧录进舵机控制MCU里吗
两种方式:
1)是你说的可以单独给每个舵机板子定义一个地址(在代码里默认写好)
2)是舵机的代码是统一的。上电后默认I2C地址是12(或者随机一个),然后由主控通过 SetID函数来改变舵机控制板的I2C地址(掉电会存储这个地址)。
方式(1)烧写麻烦,舵机多了容易糊涂。方式(2)的好处是每个舵机烧写固件一样。
Dude . Make a channel and me/us how to code ?
Your are soo cool man i relay like your project 😍😍😍😍
And how do you know which controller/prosser to use ?
Which software i should use ?
你好,也就是说,需要一个个在舵机源码里先定义配置地址,再烧录进舵机控制MCU里吗
两种方式: 1)是你说的可以单独给每个舵机板子定义一个地址(在代码里默认写好) 2)是舵机的代码是统一的。上电后默认I2C地址是12(或者随机一个),然后由主控通过 SetID函数来改变舵机控制板的I2C地址(掉电会存储这个地址)。 方式(1)烧写麻烦,舵机多了容易糊涂。方式(2)的好处是每个舵机烧写固件一样。
兄弟,谢谢回复, 我在主程main里 调用 setid( joint[0].id=12,0x02)重新设置舵机ID,但舵机依旧不动,可否把你得具体调试流程知会一下,谢谢
介绍下怎么刷fw?
介绍下怎么刷fw?
用STLINK, JLINK 的 SWD模式都可以。
大佬想请教一下,我在打开.ioc后修改了IDE为MDK-ARM,确保路径无中文后generate code,但是期间遇到了一些问题。
首先是代码生成,按理说用cubeMX生成的代码应该都是单片机的配置代码,common_inc.h的引用和Main等函数调用应该是后面写进去的,为啥一生成就有?
然后是代码的编译问题,我直接编译这个工程,keil5会报错,找不到main_1.o。
我怀疑是keil5的cpp支持没有开,加了这样一句,未果。
问题的截图我附在这一楼,还望大佬指点
Which software i should use ?
Code and firmware of servo driver board has been uploaded.
感谢分享~上面提到I2C卡死的问题,应该是STM32F4主设备的for循环里忘了加1ms的延时?如果指令发送不间断频率过高的话可能会引起卡死
@FrankXu626522
你参考一下我上传的两个 MDK工程。 MDK工程用CUBE 生成后没法直接编译的, 需要将UserAPP/ 和 Ctrl 下的代码加入, 并且添加 目录,还可能需要解决一下编译环境造成的编译错误。
如果对MDK不熟悉的话, 建议使用 SW4STM32,稚晖君已经写好的 Cmake直接就可以编译。
@FrankXu626522 你参考一下我上传的两个 MDK工程。 MDK工程用CUBE 生成后没法直接编译的, 需要将UserAPP/ 和 Ctrl 下的代码加入, 并且添加 目录,还可能需要解决一下编译环境造成的编译错误。 如果对MDK不熟悉的话, 建议使用 SW4STM32,稚晖君已经写好的 Cmake直接就可以编译。
好的,我研究一下,谢谢TAT
单个舵机已经调试完成,这时候直接打开release的上位机就能连上了吗?
@FrankXu626522 你参考一下我上传的两个 MDK工程。 MDK工程用CUBE 生成后没法直接编译的, 需要将UserAPP/ 和 Ctrl 下的代码加入, 并且添加 目录,还可能需要解决一下编译环境造成的编译错误。 如果对MDK不熟悉的话, 建议使用 SW4STM32,稚晖君已经写好的 Cmake直接就可以编译。
看了一下你的MDK,用HAL库写的?
单个舵机已经调试完成,这时候直接打开release的上位机就能连上了吗?
不行,我试过
那release的上位机要怎么连接呢?
感谢分享~上面提到I2C卡死的问题,应该是STM32F4主设备的for循环里忘了加1ms的延时?如果指令发送不间断频率过高的话可能会引起卡死
大佬,有一个小问题,您做得STUDIO 怎么使用呢,我舵机调好了几个,连上sensorboard,烧录好固件,启动您的studio,做好动作序列,点play舵机一点反应没有呢。是不是我少做了几步?谢谢
先单独测试每个模块没问题(屏幕显示和USB通信用Test文件夹里的工程、舵机都单独测试好了),然后需要接上所有6个舵机才行;先连接机器人,再打开studio,三档开关打到模型优先就可以动了,是实时同步的
先单独测试每个模块没问题(屏幕显示和USB通信用Test文件夹里的工程、舵机都单独测试好了),然后需要接上所有6个舵机才行;先连接机器人,再打开studio,三档开关打到模型优先就可以动了,是实时同步的
谢谢,明白了,我并联两个舵机,互相干扰:两个一起得话结果一个也动不了,只能连接一个,奇怪了。
先单独测试每个模块没问题(屏幕显示和USB通信用Test文件夹里的工程、舵机都单独测试好了),然后需要接上所有6个舵机才行;先连接机器人,再打开studio,三档开关打到模型优先就可以动了,是实时同步的
谢谢,明白了,我并联两个舵机,互相干扰:两个一起得话结果一个也动不了,只能连接一个,奇怪了。
你的可以了?为啥我单独测试都没问题,打开studio没反应a
先单独测试每个模块没问题(屏幕显示和USB通信用Test文件夹里的工程、舵机都单独测试好了),然后需要接上所有6个舵机才行;先连接机器人,再打开studio,三档开关打到模型优先就可以动了,是实时同步的
大佬!在lowlevel设置角度没问题,打开release的unity没反应啊 ,请问这可能是啥问题呀?
字体在LargeFiles文件夹里面
ok!
请问一下,如果可以用STLINK Utility烧写程序 是不是就说明驱动板没有问题了?
但是我用手头的f103调试却不能动可能是什么原因呢?
请问一下,如果可以用STLINK Utility烧写程序 是不是就说明驱动板没有问题了? 但是我用手头的f103调试却不能动可能是什么原因呢?
舵机默认是失能状态,需要先发送命令使能舵机,然后才能控制转动,你可以先用示波器或逻辑分析仪看一下i2c总线上能不能在0x00节点叫到舵机
请问一下,如果可以用STLINK Utility烧写程序 是不是就说明驱动板没有问题了? 但是我用手头的f103调试却不能动可能是什么原因呢?
舵机默认是失能状态,需要先发送命令使能舵机,然后才能控制转动,你可以先用示波器或逻辑分析仪看一下i2c总线上能不能在0x00节点叫到舵机
好的好的 十分感谢
很棒,可以提交到Software/Tools里面。(最好在同目录下加上README使用说明哈)
很棒,可以提交到Software/Tools里面。(最好在同目录下加上README使用说明哈)
好嘞,我整下一起提交
很棒,可以提交到Software/Tools里面。(最好在同目录下加上README使用说明哈)
好嘞,我整下一起提交
另外提个建议,可以把舵机最大最小值的标定也加上(也就是ADC和机械角度的关系)
很棒,可以提交到Software/Tools里面。(最好在同目录下加上README使用说明哈)
好嘞,我整下一起提交
另外提个建议,可以把舵机最大最小值的标定也加上(也就是ADC和机械角度的关系)
是哦,现在舵机这块还不够细腻。 我到时候把舵机固件也加几个接口,还有舵机的 自动负反馈功能也可以一起弄下。
Hello 正在复刻的朋友们,分享一点简单的经验。
1)舵机第一次调试时,会默认初始化本地I2C地址为12,并且在收到主控的Enable信号前不会有动作。 2】舵机第一次连接主控时,【需要一个个配置地址】,一次只连一个,在主控用0X00地址发送 SetId指令。 比如:头部舵机配置为0X02,断电重启,用主控测试能否用0X02连接到舵机。 然后再插第二个舵机。one by one. 3)4.3g舵机用默认PD参数,和默认50%扭矩限制,能正常控制, 但是9g舵机(底座那个),需要把扭矩限制调到0.7以上,P参数调大一点,控制效果会好一点。 4)舵机的程序,我发现偶尔会有I2C卡死收不到中断的问题。后来我把控制函数从中断中拿出来,在Main While里200hz执行会明显有提升。不知道其他朋友们有没有遇到过。我用MDK编译了两个固件,有需要的朋友可以下载试试。(F030F4P6便宜很多)
ServoDrive-f030f4p6.zip ServoDrive-f070f4p6.zip ServoDrive-fw-f030.zip ServoDrive-f70.zip 舵机调试工具.zip
ce7852a7f6c44d335e95db5f3323c53b.1.mp4
default.mp4
![]()
请问底盘那个 9G舵机 内部结构与 4.3G的不同,没有电位器,大佬你是如何改造的? 谢谢
@wenFrankieeee 差不多的。 黄色的这个就是电位器。
大佬,软件一直是disconnect连接不上为什么啊
我们这边得问题是, Unity 上位机 无法操作舵机(unity所有功能均失效),用SDK 调用舵机角度设置也失效,但是单独调试舵机,包括6机联调 (90度往复旋转)可以6舵机同步往复运动。
042芯片可以刷030的驱动吗?
我们这边得问题是, Unity 上位机 无法操作舵机(unity所有功能均失效),用SDK 调用舵机角度设置也失效,但是单独调试舵机,包括6机联调 (90度往复旋转)可以6舵机同步往复运动。
还没解决么。。。
042芯片可以刷030的驱动吗?
不行哦。
大佬,软件一直是disconnect连接不上为什么啊
你仔细检查以下看看是哪个步骤有点问题哈。 已经有群友正常连接在使用了。
软件连接上要确保以下几点:
- 主控USB硬件和驱动正常,比如能正常运行 Test 下的屏幕显示DEMO。
- 然后 主控需要刷入 舵机测试专门的固件,在Tools对应的文件夹下。
- 先链接板子,再开启软件。 软件在启动时尝试连接,0.0版本没有断开重连机制。
大佬,软件一直是disconnect连接不上为什么啊
你仔细检查以下看看是哪个步骤有点问题哈。 已经有群友正常连接在使用了。
软件连接上要确保以下几点:
- 主控USB硬件和驱动正常,比如能正常运行 Test 下的屏幕显示DEMO。
- 然后 主控需要刷入 舵机测试专门的固件,在Tools对应的文件夹下。
- 先链接板子,再开启软件。 软件在启动时尝试连接,0.0版本没有断开重连机制。
test可以显示表情,舵机测试的代码可以往复运行,设置地址-断电-主控刷入调试固件-连上舵机-上电-打开软件,但是连不上,难受
大佬你好,请问9g舵机的参数多少合适呢?我把扭矩限制改为0.8,kp=500,kv=ki=0,kd,50,得把齿轮箱的外壳拆掉才能转,感觉总是力度不够,kp调到3000也不行
大佬你好,请问9g舵机的参数多少合适呢?我把扭矩限制改为0.8,kp=500,kv=ki=0,kd,50,得把齿轮箱的外壳拆掉才能转,感觉总是力度不够,kp调到3000也不行
感觉不对劲哦。 我的 9g 舵机就是图上这款。 kp = 20, torque_max = 0.95,其他的没变,基本正常反馈控制。
机测试的代码可以往复运行,设置地址-断电-主控刷入调试固件-连上舵机-上电-打开软件,但是连不上,难受
我跟你一样的问题,,USB驱动正常,显示屏测试也能显示图案了,就是更新这个固件,打开工具一直都是disconnect
大佬,软件一直是disconnect连接不上为什么啊
你仔细检查以下看看是哪个步骤有点问题哈。 已经有群友正常连接在使用了。
软件连接上要确保以下几点:
- 主控USB硬件和驱动正常,比如能正常运行 Test 下的屏幕显示DEMO。
- 然后 主控需要刷入 舵机测试专门的固件,在Tools对应的文件夹下。
- 先链接板子,再开启软件。 软件在启动时尝试连接,0.0版本没有断开重连机制。
这几个步骤都检查过了 ,但是呢 还是未链接上这个工具,额
各位大佬们,我的电机需要大一些的负重,按照基础的PID和torquelimt不负重可以正常控制,但是负重之后力度明显不足,继续调大torquelimt可能会导致电机突然死掉无法再控制。我想请问一下关于PIVD的数值是哪些值关于力度设置的,或者PIVD分别代表什么?
软件调整突破不了硬件限制啊,3g舵机就那么点力矩,调再大也没用的,建议更换舵机吧。可以选同尺寸减速比更大的,或者直接改结构选大点的舵机。
左右手臂推杆、头部舵机用舵机调试工具测试正常,连上位机的时候即使空载也只是会微微震动一下,这是什么情况呢?群里也有人遇到了同样的问题。
各位大佬,我想到一个点。现在舵机用的是电位器,定位。旋转的范围限制在一圈以内。有没有办法,加一个360度的角度传感器,这样就可以,对旋转角度没有限制,可以一直连续旋转下去了,并且可以精确定位位置。有没有好的角度传感器推荐的?
各位大佬,我想到一个点。现在舵机用的是电位器,定位。旋转的范围限制在一圈以内。有没有办法,加一个360度的角度传感器,这样就可以,对旋转角度没有限制,可以一直连续旋转下去了,并且可以精确定位位置。有没有好的角度传感器推荐的?
可以用线性霍尔,只是轴端还需要安装个磁铁,且相对位置还要满足要求,那么小的空间不好实现
我尝试用便宜的stm32f030f4做舵机的控制芯片。stm32烧写没有问题。但I2C访问0设备地址,1,2,3寄存器地址,读4字节数据,返回都是ff。我试了platformio自己编译的bin,编译出来是10K。本页头上的编译好的bin,我也试了。I2C没有数据回来。不过我现在是用的PC直接CH341T,USB转I2C直接访问舵机调试的。上拉电阻加了,也没变化。有啥想法不?
在stm32f030f4上调试ll版本的代码。F5跟了一下,发觉DMA1_Channel2_3_IRQHandler这个中断,就从来没有进去过。但诡异的是,断点设在I2C1_IRQHandler,的确看到I2C master发出来的设备地址,和寄存器地址,收到i2cDataRx这块区域了。但看代码结构,这块区域是DMA自己传到的。总感觉,I2C收数据这块和DMA间关系有点不理解。
嗨,請問有人有調適好的控制板嘛,我想直接買
可以的話能加我微信嘛? daxiang6581
因為在台灣想找到洗這個板子的廠商比較不容易
魔改电机烧录小机器
【稚晖君ElectronBot魔改电机烧录固件不用焊接线烧录小技巧】 https://www.bilibili.com/video/BV15w411v76z/?share_source=copy_web&vd_source=5b2a5bc63fd7e101e5f5de39eec5eab5