Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
jinsonli opened this issue Apr 5, 2022 · 74 comments
Open

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

jinsonli opened this issue Apr 5, 2022 · 74 comments

Comments

@jinsonli
Copy link
Contributor

jinsonli commented Apr 5, 2022

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

电机接法
电位器接法

@peng-zhihui
Copy link
Owner

感谢反馈,如果能够把舵机调试流程封装成工具或者代码,可以提交pr我帮你合入仓库~

@peng-zhihui peng-zhihui pinned this issue Apr 5, 2022
@jinsonli
Copy link
Contributor Author

jinsonli commented Apr 5, 2022

好的。 我有空弄一下。

@peng-zhihui
Copy link
Owner

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

@FrankXu626522
Copy link

想请教一下,ServoDrive-fw文件夹中的代码是怎么运行的?
1).ioc文件应该只配置了芯片,用CubeMX生成的代码中不存在关于i2c和pid的代码,烧入芯片的时候这部分代码怎么处理?
2)有关i2c和pid等的代码在UserApp中,这一部分代码用cmake编译之后还要烧入芯片吗?两份代码会不会冲突?
本科和硕士都是做上位机开发的,对单片机编程不够了解,如果能描述一下ServoDrive-fw的处理过程那就太感谢了,还望赐教一下

@peng-zhihui
Copy link
Owner

所有代码都需要的,你用CubeMX生成的如果是keil工程那需要自己把其余代码文件添加进去,CubeMX是不知道你自己的代码在哪里的

@wenFrankieeee
Copy link

你好,也就是说,需要一个个在舵机源码里先定义配置地址,再烧录进舵机控制MCU里吗

@FrankXu626522
Copy link

所有代码都需要的,你用CubeMX生成的如果是keil工程那需要自己把其余代码文件添加进去,CubeMX是不知道你自己的代码在哪里的

谢谢指点,现在发现问题主要是之前手欠cubemx保存了一次工程,没找到Main()的调用。。。所以我就纳闷我以为cubemx的main和Main都是运行入口来着

@jinsonli
Copy link
Contributor Author

jinsonli commented Apr 6, 2022

你好,也就是说,需要一个个在舵机源码里先定义配置地址,再烧录进舵机控制MCU里吗

两种方式:
1)是你说的可以单独给每个舵机板子定义一个地址(在代码里默认写好)
2)是舵机的代码是统一的。上电后默认I2C地址是12(或者随机一个),然后由主控通过 SetID函数来改变舵机控制板的I2C地址(掉电会存储这个地址)。
方式(1)烧写麻烦,舵机多了容易糊涂。方式(2)的好处是每个舵机烧写固件一样。

@Peegandourado7
Copy link

Dude . Make a channel and me/us how to code ?
Your are soo cool man i relay like your project 😍😍😍😍

@Peegandourado7
Copy link

And how do you know which controller/prosser to use ?

@Peegandourado7
Copy link

Which software i should use ?

@wenFrankieeee
Copy link

你好,也就是说,需要一个个在舵机源码里先定义配置地址,再烧录进舵机控制MCU里吗

两种方式: 1)是你说的可以单独给每个舵机板子定义一个地址(在代码里默认写好) 2)是舵机的代码是统一的。上电后默认I2C地址是12(或者随机一个),然后由主控通过 SetID函数来改变舵机控制板的I2C地址(掉电会存储这个地址)。 方式(1)烧写麻烦,舵机多了容易糊涂。方式(2)的好处是每个舵机烧写固件一样。

兄弟,谢谢回复, 我在主程main里 调用 setid( joint[0].id=12,0x02)重新设置舵机ID,但舵机依旧不动,可否把你得具体调试流程知会一下,谢谢

@wenFrankieeee
Copy link

舵机ID

@jinsonli
Copy link
Contributor Author

jinsonli commented Apr 7, 2022

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

1 广播测试舵机运动

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

main.zip

@mcu666
Copy link

mcu666 commented Apr 7, 2022

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

@alloyo
Copy link

alloyo commented Apr 7, 2022

介绍下怎么刷fw?

@jinsonli
Copy link
Contributor Author

jinsonli commented Apr 7, 2022

介绍下怎么刷fw?

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

@jinsonli
Copy link
Contributor Author

jinsonli commented Apr 7, 2022

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

@FrankXu626522
Copy link

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

@jinsonli
Copy link
Contributor Author

jinsonli commented Apr 7, 2022

Which software i should use ?

Code and firmware of servo driver board has been uploaded.

@peng-zhihui
Copy link
Owner

peng-zhihui commented Apr 7, 2022

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

@FrankXu626522
Copy link

1
2
3

@jinsonli
Copy link
Contributor Author

jinsonli commented Apr 7, 2022

@FrankXu626522
你参考一下我上传的两个 MDK工程。 MDK工程用CUBE 生成后没法直接编译的, 需要将UserAPP/ 和 Ctrl 下的代码加入, 并且添加 目录,还可能需要解决一下编译环境造成的编译错误。
如果对MDK不熟悉的话, 建议使用 SW4STM32,稚晖君已经写好的 Cmake直接就可以编译。

@FrankXu626522
Copy link

@FrankXu626522 你参考一下我上传的两个 MDK工程。 MDK工程用CUBE 生成后没法直接编译的, 需要将UserAPP/ 和 Ctrl 下的代码加入, 并且添加 目录,还可能需要解决一下编译环境造成的编译错误。 如果对MDK不熟悉的话, 建议使用 SW4STM32,稚晖君已经写好的 Cmake直接就可以编译。

好的,我研究一下,谢谢TAT

@txp666
Copy link

txp666 commented Apr 8, 2022

单个舵机已经调试完成,这时候直接打开release的上位机就能连上了吗?

@wenFrankieeee
Copy link

@FrankXu626522 你参考一下我上传的两个 MDK工程。 MDK工程用CUBE 生成后没法直接编译的, 需要将UserAPP/ 和 Ctrl 下的代码加入, 并且添加 目录,还可能需要解决一下编译环境造成的编译错误。 如果对MDK不熟悉的话, 建议使用 SW4STM32,稚晖君已经写好的 Cmake直接就可以编译。

看了一下你的MDK,用HAL库写的?

单个舵机已经调试完成,这时候直接打开release的上位机就能连上了吗?

不行,我试过

@txp666
Copy link

txp666 commented Apr 8, 2022

那release的上位机要怎么连接呢?

@wenFrankieeee
Copy link

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

大佬,有一个小问题,您做得STUDIO 怎么使用呢,我舵机调好了几个,连上sensorboard,烧录好固件,启动您的studio,做好动作序列,点play舵机一点反应没有呢。是不是我少做了几步?谢谢

@peng-zhihui
Copy link
Owner

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

@jinsonli jinsonli reopened this Apr 15, 2022
@jinsonli
Copy link
Contributor Author

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

@energykidchen
Copy link

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

@wenFrankieeee
Copy link

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

@ssc7618
Copy link

ssc7618 commented Apr 16, 2022

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

@jinsonli
Copy link
Contributor Author

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

还没解决么。。。

@jinsonli
Copy link
Contributor Author

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

不行哦。

@jinsonli
Copy link
Contributor Author

jinsonli commented Apr 16, 2022

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

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

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

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

@energykidchen
Copy link

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

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

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

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

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

@mcu666
Copy link

mcu666 commented Apr 26, 2022

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

@jinsonli
Copy link
Contributor Author

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

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

@miaoyizi
Copy link

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

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

@miaoyizi
Copy link

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

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

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

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

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

@mcu666
Copy link

mcu666 commented Apr 28, 2022

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

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

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

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

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

@jinsonli
Copy link
Contributor Author

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

@Xietutu22
Copy link

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

@peng-zhihui
Copy link
Owner

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

@mcu666
Copy link

mcu666 commented Apr 29, 2022

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

我WIN10 LTSC,64位。image

@GreenShadeZhang
Copy link

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

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

@mcu666
Copy link

mcu666 commented May 12, 2022

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

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

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

@killadm
Copy link

killadm commented May 22, 2022

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

@minux1010
Copy link

各位大佬,我想到一个点。现在舵机用的是电位器,定位。旋转的范围限制在一圈以内。有没有办法,加一个360度的角度传感器,这样就可以,对旋转角度没有限制,可以一直连续旋转下去了,并且可以精确定位位置。有没有好的角度传感器推荐的?

@leazer
Copy link

leazer commented Jun 18, 2022

各位大佬,我想到一个点。现在舵机用的是电位器,定位。旋转的范围限制在一圈以内。有没有办法,加一个360度的角度传感器,这样就可以,对旋转角度没有限制,可以一直连续旋转下去了,并且可以精确定位位置。有没有好的角度传感器推荐的?

可以用线性霍尔,只是轴端还需要安装个磁铁,且相对位置还要满足要求,那么小的空间不好实现

@minux1010
Copy link

我尝试用便宜的stm32f030f4做舵机的控制芯片。stm32烧写没有问题。但I2C访问0设备地址,1,2,3寄存器地址,读4字节数据,返回都是ff。我试了platformio自己编译的bin,编译出来是10K。本页头上的编译好的bin,我也试了。I2C没有数据回来。不过我现在是用的PC直接CH341T,USB转I2C直接访问舵机调试的。上拉电阻加了,也没变化。有啥想法不?

@minux1010
Copy link

在stm32f030f4上调试ll版本的代码。F5跟了一下,发觉DMA1_Channel2_3_IRQHandler这个中断,就从来没有进去过。但诡异的是,断点设在I2C1_IRQHandler,的确看到I2C master发出来的设备地址,和寄存器地址,收到i2cDataRx这块区域了。但看代码结构,这块区域是DMA自己传到的。总感觉,I2C收数据这块和DMA间关系有点不理解。

@andyjon
Copy link

andyjon commented May 24, 2023

嗨,請問有人有調適好的控制板嘛,我想直接買
可以的話能加我微信嘛? daxiang6581
因為在台灣想找到洗這個板子的廠商比較不容易

@VendettaMask
Copy link

VendettaMask commented May 24, 2023 via email

1 similar comment
@VendettaMask
Copy link

VendettaMask commented Aug 16, 2023 via email

@longxiaoteng
Copy link

longxiaoteng commented Sep 24, 2023

魔改电机烧录小机器

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

@VendettaMask
Copy link

VendettaMask commented Sep 24, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests