robomaster用can通讯连接电调驱动电机失败,能发送can包给电调但是电机无响应

            大二萌新刚上手哨兵机器人,花老半天弄好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

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值