peng-zhihui / ElectronBot

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

舵机固件和基本的调试方法

jinsonli opened this issue · comments

commented

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我帮你合入仓库~

commented

好的。 我有空弄一下。

舵机烧完程序记得用热熔胶固定一下哦避免短路,热熔胶加热就会融化所以不是一次性的固定方式可以放心整。

想请教一下,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都是运行入口来着

commented

你好,也就是说,需要一个个在舵机源码里先定义配置地址,再烧录进舵机控制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,但舵机依旧不动,可否把你得具体调试流程知会一下,谢谢

commented

我先简单提供一点测试代码,还在抽空整理一个舵机调试小工具。

1 广播测试舵机运动

2 广播设置ID,其他地址测试运动

main.zip

能否分享一下舵机的F030和F070 MDK源码?感谢 @jinsonli

介绍下怎么刷fw?

commented

介绍下怎么刷fw?

用STLINK, JLINK 的 SWD模式都可以。

commented

能否分享一下舵机的F030和F070 MDK源码?感谢 @jinsonli
传了,暂时没有做优化,能自己编译和做点调试。 后面优化了再合到主线去。

大佬想请教一下,我在打开.ioc后修改了IDE为MDK-ARM,确保路径无中文后generate code,但是期间遇到了一些问题。
首先是代码生成,按理说用cubeMX生成的代码应该都是单片机的配置代码,common_inc.h的引用和Main等函数调用应该是后面写进去的,为啥一生成就有?
然后是代码的编译问题,我直接编译这个工程,keil5会报错,找不到main_1.o。
我怀疑是keil5的cpp支持没有开,加了这样一句,未果。
问题的截图我附在这一楼,还望大佬指点

commented

Which software i should use ?

Code and firmware of servo driver board has been uploaded.

感谢分享~上面提到I2C卡死的问题,应该是STM32F4主设备的for循环里忘了加1ms的延时?如果指令发送不间断频率过高的话可能会引起卡死

commented

@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没反应啊 ,请问这可能是啥问题呀?

先单独测试每个模块没问题(屏幕显示和USB通信用Test文件夹里的工程、舵机都单独测试好了),然后需要接上所有6个舵机才行;先连接机器人,再打开studio,三档开关打到模型优先就可以动了,是实时同步的

大佬!在lowlevel设置角度没问题,打开release的unity没反应啊 ,请问这可能是啥问题呀?

image
用unity打开工程可以了!好像少个字体,是不是release的有点问题呀

字体在LargeFiles文件夹里面

ok!

请问一下,如果可以用STLINK Utility烧写程序 是不是就说明驱动板没有问题了?
但是我用手头的f103调试却不能动可能是什么原因呢?

请问一下,如果可以用STLINK Utility烧写程序 是不是就说明驱动板没有问题了? 但是我用手头的f103调试却不能动可能是什么原因呢?

舵机默认是失能状态,需要先发送命令使能舵机,然后才能控制转动,你可以先用示波器或逻辑分析仪看一下i2c总线上能不能在0x00节点叫到舵机

请问一下,如果可以用STLINK Utility烧写程序 是不是就说明驱动板没有问题了? 但是我用手头的f103调试却不能动可能是什么原因呢?

舵机默认是失能状态,需要先发送命令使能舵机,然后才能控制转动,你可以先用示波器或逻辑分析仪看一下i2c总线上能不能在0x00节点叫到舵机

好的好的 十分感谢

commented

Hello 我用QT做了一个舵机调试工具,自己用了还可以。给有需要的朋友试试看好不好用。
前提:
1.USB驱动是OK的。
2.主控刷入我提供的舵机设置固件
3.不要用广播地址给多个舵机通讯。
资料和视频放到 最上面去了, 有一个压缩包。 后面我合入仓库里去。视频10M限制,压缩的比较厉害。
软件简单介绍

很棒,可以提交到Software/Tools里面。(最好在同目录下加上README使用说明哈)

commented

很棒,可以提交到Software/Tools里面。(最好在同目录下加上README使用说明哈)

好嘞,我整下一起提交

很棒,可以提交到Software/Tools里面。(最好在同目录下加上README使用说明哈)

好嘞,我整下一起提交

另外提个建议,可以把舵机最大最小值的标定也加上(也就是ADC和机械角度的关系)

commented

很棒,可以提交到Software/Tools里面。(最好在同目录下加上README使用说明哈)

好嘞,我整下一起提交

另外提个建议,可以把舵机最大最小值的标定也加上(也就是ADC和机械角度的关系)

是哦,现在舵机这块还不够细腻。 我到时候把舵机固件也加几个接口,还有舵机的 自动负反馈功能也可以一起弄下。

Hello 我用QT做了一个舵机调试工具,自己用了还可以。给有需要的朋友试试看好不好用。 前提: 1.USB驱动是OK的。 2.主控刷入我提供的舵机设置固件 3.不要用广播地址给多个舵机通讯。 资料放到 最上面去了, 有一个压缩包。 后面我合入仓库里去。 软件简单介绍

这个不错,学习 一下

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的不同,没有电位器,大佬你是如何改造的? 谢谢

commented

0138d8df512716aea06e4b9f6d0fb52
c3b536914f85f459ee65a4df8778ee6
@wenFrankieeee 差不多的。 黄色的这个就是电位器。

大佬,软件一直是disconnect连接不上为什么啊

我们这边得问题是, Unity 上位机 无法操作舵机(unity所有功能均失效),用SDK 调用舵机角度设置也失效,但是单独调试舵机,包括6机联调 (90度往复旋转)可以6舵机同步往复运动。

042芯片可以刷030的驱动吗?

commented

我们这边得问题是, Unity 上位机 无法操作舵机(unity所有功能均失效),用SDK 调用舵机角度设置也失效,但是单独调试舵机,包括6机联调 (90度往复旋转)可以6舵机同步往复运动。

还没解决么。。。

commented

042芯片可以刷030的驱动吗?

不行哦。

commented

大佬,软件一直是disconnect连接不上为什么啊

你仔细检查以下看看是哪个步骤有点问题哈。 已经有群友正常连接在使用了。

软件连接上要确保以下几点:

  1. 主控USB硬件和驱动正常,比如能正常运行 Test 下的屏幕显示DEMO。
  2. 然后 主控需要刷入 舵机测试专门的固件,在Tools对应的文件夹下。
  3. 先链接板子,再开启软件。 软件在启动时尝试连接,0.0版本没有断开重连机制。

大佬,软件一直是disconnect连接不上为什么啊

你仔细检查以下看看是哪个步骤有点问题哈。 已经有群友正常连接在使用了。

软件连接上要确保以下几点:

  1. 主控USB硬件和驱动正常,比如能正常运行 Test 下的屏幕显示DEMO。
  2. 然后 主控需要刷入 舵机测试专门的固件,在Tools对应的文件夹下。
  3. 先链接板子,再开启软件。 软件在启动时尝试连接,0.0版本没有断开重连机制。

test可以显示表情,舵机测试的代码可以往复运行,设置地址-断电-主控刷入调试固件-连上舵机-上电-打开软件,但是连不上,难受

大佬你好,请问9g舵机的参数多少合适呢?我把扭矩限制改为0.8,kp=500,kv=ki=0,kd,50,得把齿轮箱的外壳拆掉才能转,感觉总是力度不够,kp调到3000也不行

commented

大佬你好,请问9g舵机的参数多少合适呢?我把扭矩限制改为0.8,kp=500,kv=ki=0,kd,50,得把齿轮箱的外壳拆掉才能转,感觉总是力度不够,kp调到3000也不行

感觉不对劲哦。 我的 9g 舵机就是图上这款。 kp = 20, torque_max = 0.95,其他的没变,基本正常反馈控制。

机测试的代码可以往复运行,设置地址-断电-主控刷入调试固件-连上舵机-上电-打开软件,但是连不上,难受

我跟你一样的问题,,USB驱动正常,显示屏测试也能显示图案了,就是更新这个固件,打开工具一直都是disconnect

大佬,软件一直是disconnect连接不上为什么啊

你仔细检查以下看看是哪个步骤有点问题哈。 已经有群友正常连接在使用了。

软件连接上要确保以下几点:

  1. 主控USB硬件和驱动正常,比如能正常运行 Test 下的屏幕显示DEMO。
  2. 然后 主控需要刷入 舵机测试专门的固件,在Tools对应的文件夹下。
  3. 先链接板子,再开启软件。 软件在启动时尝试连接,0.0版本没有断开重连机制。

这几个步骤都检查过了 ,但是呢 还是未链接上这个工具,额

大佬,软件一直是disconnect连接不上为什么啊

你仔细检查以下看看是哪个步骤有点问题哈。 已经有群友正常连接在使用了。
软件连接上要确保以下几点:

  1. 主控USB硬件和驱动正常,比如能正常运行 Test 下的屏幕显示DEMO。
  2. 然后 主控需要刷入 舵机测试专门的固件,在Tools对应的文件夹下。
  3. 先链接板子,再开启软件。 软件在启动时尝试连接,0.0版本没有断开重连机制。

这几个步骤都检查过了 ,但是呢 还是未链接上这个工具,额

我这边打开软件之后会显示Connect,然后没几秒就显示Disconnect,但是舵机可以控制,只是读舵机角度显示0。不知道为啥
image

commented

看样子是USB接收数据没有收到,所以才会显示disconnect。
然而USB发送的数据又能发过去,所以能控制舵机。 这就有点奇怪了。
我在想是不是驱动适配的问题,电脑是什么系统。 WIN几多少位。
【现在的问题是USB能单向传输数据到板子,但PC收不到板子传来的USB消息】
我得抽空看看能不能复现这个问题,才可能解决。
@mcu666
@miaoyizi

各位大佬们,我的电机需要大一些的负重,按照基础的PID和torquelimt不负重可以正常控制,但是负重之后力度明显不足,继续调大torquelimt可能会导致电机突然死掉无法再控制。我想请问一下关于PIVD的数值是哪些值关于力度设置的,或者PIVD分别代表什么?

软件调整突破不了硬件限制啊,3g舵机就那么点力矩,调再大也没用的,建议更换舵机吧。可以选同尺寸减速比更大的,或者直接改结构选大点的舵机。

看样子是USB接收数据没有收到,所以才会显示disconnect。 然而USB发送的数据又能发过去,所以能控制舵机。 这就有点奇怪了。 我在想是不是驱动适配的问题,电脑是什么系统。 WIN几多少位。 【现在的问题是USB能单向传输数据到板子,但PC收不到板子传来的USB消息】 我得抽空看看能不能复现这个问题,才可能解决。 @mcu666 @miaoyizi

我WIN10 LTSC,64位。image

看样子是USB接收数据没有收到,所以才会显示disconnect。 然而USB发送的数据又能发过去,所以能控制舵机。 这就有点奇怪了。 我在想是不是驱动适配的问题,电脑是什么系统。 WIN几多少位。 【现在的问题是USB能单向传输数据到板子,但PC收不到板子传来的USB消息】 我得抽空看看能不能复现这个问题,才可能解决。 @mcu666 @miaoyizi

我的电脑是win11 专业版的 用舵机调试工具也是disconnected 你这个工具是在哪个版本的系统下使用的

看样子是USB接收数据没有收到,所以才会显示disconnect。 然而USB发送的数据又能发过去,所以能控制舵机。 这就有点奇怪了。 我在想是不是驱动适配的问题,电脑是什么系统。 WIN几多少位。 【现在的问题是USB能单向传输数据到板子,但PC收不到板子传来的USB消息】 我得抽空看看能不能复现这个问题,才可能解决。 @mcu666 @miaoyizi

我的电脑是win11 专业版的 用舵机调试工具也是disconnected 你这个工具是在哪个版本的系统下使用的

初步推测是数据线的原因,一开始我连unity也经常断连,后来我换了手机原装数据线,就基本没问题了。

左右手臂推杆、头部舵机用舵机调试工具测试正常,连上位机的时候即使空载也只是会微微震动一下,这是什么情况呢?群里也有人遇到了同样的问题。

各位大佬,我想到一个点。现在舵机用的是电位器,定位。旋转的范围限制在一圈以内。有没有办法,加一个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
因為在台灣想找到洗這個板子的廠商比較不容易

commented
commented
commented

魔改电机烧录小机器

【稚晖君ElectronBot魔改电机烧录固件不用焊接线烧录小技巧】 https://www.bilibili.com/video/BV15w411v76z/?share_source=copy_web&vd_source=5b2a5bc63fd7e101e5f5de39eec5eab5

commented