概述
大二萌新刚上手哨兵机器人,花老半天弄好keil5的编译环境,第一步驱动电机就出现了问题,记录一下解决问题的过程。
问题表现为:按照官方程序使用can通讯驱动电机,电机无响应。通过debug在线调试发现can的数据包是发送成功了的,但是电机不能收到,读取电机的反馈信息也失败。
目录
问题一:ID
问题二:终端电阻
问题三:线序问题
问题一:ID
调节电机的ID号和标识符与程序上的一致(以官方例程),一定要看电调或者电机的说明书,以GM6020电机(电调电机一体的电机,即带有电调功能的电机)为例子,以下为GM6020电机的ID为5—7的协议
下图为C620的ID为5—7的协议
可以看到,两者的ID一样,但是标识符是不一样的,GM6020为0x2FF,C620为0x1FF,然而官方例程都是用使用用户最广版本的电调来编写的,例如C620(有很多电调的用法都和C620一样),如果使用GM6020的话,就要对例程中的标识符进行修改,(或者使ID号改变,下面再提)如果再阅读说明书,就会发现相同ID的在不同电调上的反馈报文标识符也不一样,C620系列ID 1—4为0x201-0x204
而GM6020的为0x205—0x208
所以需要相应的枚举值改成对应的值(6020的ID为6时)
/* CAN send and receive ID */
typedef enum
{
CAN_CHASSIS_ALL_ID = 0x200,
CAN_3508_M1_ID = 0x201,
CAN_3508_M2_ID = 0x202,
CAN_3508_M3_ID = 0x203,
CAN_3508_M4_ID = 0x204,
CAN_YAW_MOTOR_ID = 0x205,
CAN_PIT_MOTOR_ID = 0x20A,//0x206
CAN_TRIGGER_MOTOR_ID = 0x207,
CAN_GIMBAL_ALL_ID = 0x2FF,//0x1FF
} can_msg_id_e;
还有的是,如果拨动GM6020的ID为2的时候
与C620的ID为6的时候,他们的两个标识符都是一样的
这个时候就能使用官方的代码来驱动6020电机了,如果说你已经有ID为2的电机了,这个也不会冲突,因为电调的ID(每秒闪烁的次数)只是个代号,最主要的还是ID后面的两个标识符相同不相同
问题二:终端电阻
can协议的终端电阻没接上,要想用can通讯控制电调来驱动电机,终端电阻是必不可少的,robomaster官网买的电机不外乎用两种方式控制:CAN和PWM,用can通讯的话,就需要把电机上面提供的终端电阻拨码给拨上。
问题三:线序
can通讯是两根线,can_h,和can_l,即can高和can低,对于电调的接线,是指定了哪一个口是接can_h(红色),哪一个是接can_l(黑色),所以线序很重要,电调说明书上都标明了该电调使用的线序,例C620电调
稍微一对照实体的线,很容易就搞懂。
值得一提的是,开发版上的线序也是固定了的,can_h和can_l都只能接相应的口
例如C版
线序一定要对应。
最后贴下官方源码(当时我找了好久才找到),GitHub上官方开源下载的
开源网站:robomaster开源网站GitHub
百度网盘下载:链接:https://pan.baidu.com/s/1vlqwfSVAtYbQR90QPRTcyw?pwd=pw4g
提取码:pw4g
最后
以上就是过时小松鼠为你收集整理的robomaster用can通讯连接电调驱动电机失败,能发送can包给电调但是电机无响应问题一:ID问题二:终端电阻问题三:线序的全部内容,希望文章能够帮你解决robomaster用can通讯连接电调驱动电机失败,能发送can包给电调但是电机无响应问题一:ID问题二:终端电阻问题三:线序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复