一、注意CAN_H与CAN_L线序

C620电调按图中线序右侧(红色)为CAN_H,左侧为CAN_L

当我们使用大疆c型开发板(后面简称“c”板)控制大疆m3508电机时,CAN引脚线序如图

要注意CAN_H对CAN_H,CAN_L对CAN_L才能正常通信

二、多电机控制

1.降频处理

经实际测试,[1]在电调不降频(1kHZ)的情况下,一路CAN总线最多控制6~7个电机。如果想控制更多电机,一种常见方法就是对电调进行降频处理(如500HZ).至于降频后最多可以控制多少电机请自行实测。

下面简单介绍降频方法

首先,下载RM Assistant

RM Assistanthttps://www.robomaster.com/zh-CN/products/components/assistant然后,准备好USB转TTL,USB端插入电脑,TTL接杜邦线后与电调的串口端相连

最后,打开软件进行降频处理

(如果仍不理解,请参考  RoboMaster C620无刷电机调速器使用说明(中英日)V1.01.pdf

2.终端电阻设置

C620电调侧边可以选择终端电阻是否接入。总线电阻在30~120欧姆之间都是能够通信的,不过40以下且总线负载较高时就已经会出现丢包现象了,建议保持在60欧姆。

三、3路FDCAN避坑

我使用了8个3508电机和1个海泰电机。我的C620电调频率都设置为1kHZ时,接收的数据量还是比较大的,因此使用3路FDCAN.

我的FDCAN1和FDCAN2的配置是完全一致的,

FDCAN3更改了RAM偏移量,改为0x406.

四、can反馈数据不更新问题的一种情况

在watch窗口观察motor_chassis[]反馈值时,发现电机数据只有一遍,不能持续更新。

解决方案:在发送函数后加上2ms延迟。

AI给出的解释是:

基于 CAN 控制大疆 M3508 电机时,在发送函数所在循环中添加 2ms 延时才能正常接收数据,主要有以下原因:

  • CAN 总线的半双工特性:CAN 通信是半双工通信,发送与接收不能同时进行。如果发送函数所在循环没有延时,一直持续发送数据,那么 CAN 总线会一直被发送操作占用,无法切换到接收状态,从而导致无法接收到电机返回的数据。添加 2ms 延时,能够为 CAN 通信提供接收数据的时间窗口。
  • 波特率与传输延时:CAN 总线的波特率决定了数据传输速度。如果波特率较高,位时间较短,信号的传播延时和 CAN 控制器、收发器等硬件的延时就相对更重要。例如在 1Mbps 波特率下,一帧标准数据帧传输时间约为 0.111ms,若发送循环过于频繁,可能会导致数据传输重叠或采样错误。2ms 的延时可以确保在发送下一帧数据之前,总线上的信号已经稳定,接收端能够正确采样和接收数据。
  • 硬件延时的影响:CAN 通信系统中的硬件设备,如 CAN 控制器、收发器、隔离器件等,都会引入一定的延时。这些延时包括信号传播延时、收发器循环延时等,可能会导致发送和接收节点间的信息时间差。添加 2ms 延时可以补偿这些硬件延时,保证数据的正确传输和接收。
  • 软件处理机制与任务调度:如果 CAN 接收采用中断方式,而发送函数所在循环的优先级较高,可能会抢占 CAN 接收中断的处理时间,导致接收数据丢失或不及时。添加 2ms 延时可以降低发送函数的执行频率,避免对接收中断处理的干扰,确保接收数据能够被正确处理。
  • 电机通信协议的要求:大疆 M3508 电机配套的 C620 电调以 1KHz 的频率上报电机数据,每帧数据包含电机的位置、转速等信息。发送函数循环中添加 2ms 延时,可能是为了与电调的数据上报周期相匹配,确保能够准确接收到电调发送的每帧数据。

五、声明

出于作者水平限制,本文章不是特别严谨,一些地方是出于实践经验而非专业研究,内容仅供参考,希望能够给大家一些灵感与启发。上述文章如有不严谨、不合理、错误的地方,欢迎指正。

六、致谢

感谢西南石油大学-铁人战队技术分享。

七、参考文献

[1]【RM2025-西南石油大学-铁人】CAN负载计算器和提高CAN总线利用率技巧分享

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐