CAN FD 通信
本教程介绍如何准备 Aotenjo One 板用于 CAN FD 通信并运行闭环角度控制。
如果 CAN 网络中的任何板卡是 Aotenjo One v1.x 或 Aotenjo Master v1.x,则无法使用 CAN FD 通信。请改用 CAN 总线通信教程。
什么是 CAN FD?
CAN FD(Controller Area Network Flexible Data-Rate) 是传统 CAN 协议的扩展,支持更高的数据传输速率,并允许每帧携带更多数据。
与经典 CAN 不同,CAN FD 允许:
- 消息数据阶段更高的比特率
- 单个帧中最多 64 字节的有效负载
这使得 CAN FD 非常适合需要高更新率、低延迟和更复杂的数据结构的应用,例如电机控制、机器人和高性能工业系统。
CAN 与 CAN FD 的比较
| 对比项 | CAN总线 | CAN FD |
|---|---|---|
| 最大数据速率 | 高达 1 Mbps | 高达 8 Mbps(数据阶段) |
| 数据有效负载大小 | 最多 8 个字节 | 最多 64 字节 |
| 帧格式 | 标准(11 位)和扩展(29 位) | 标准和扩展 |
| 错误检测 | CRC(循环冗余校验) | 增强型 CRC 和位填充 |
| RTR 支持 | 支持 | 不支持 |
| 应用场景 | 汽车、工业 | 汽车、工业、高速控制 |
为什么 CAN FD 对于电机控制很重要
CAN FD 不仅仅是更高的带宽。
通过允许每帧更大的有效负载,CAN FD 显著减少了由以下原因引起的协议开销:
- 仲裁
- 帧头
- 帧间距
这意味着每条消息传输更多有用的数据,从而提高整体总线效率。
例子
使用经典 CAN:
- 电机位置数据可能需要分割到多个帧中
- 这会增加总线负载并限制控制环路频率
使用 CAN FD:
- 位置、速度、电流和状态数据可以打包到单个帧中
- 每个控制周期需要更少的帧
- 有助于提高控制环路频率,并使控制时序更稳定
因此,CAN FD 能够:
- 更 高的更新率
- 更低的延迟
- 更平滑、更灵敏的电机控制
准备工作
本教程使用以下硬件:
- Aotenjo One 控制板 单片机:STM32G431CBU6 版本:Aotenjo One V2.0
- 沿直径方向充磁的圆片磁铁(Aotenjo One 附带)
- ST-LINK V2 克隆版
- BlackPill STM32 板
- BE4108 75T云台电机
- 电源(12V)
- 焊接套件
您需要 ST-LINK V2 克隆版来将固件上传到开发板。您可以以低于 5 美元的价格购买廉价的 ST-LINK V2 克隆版。
CAN总线连接
CAN FD 与经典 CAN 使用相同的总线接线和终端配置。请按照 CAN 总线连接说明连接控制板,并在总线的两个物理末端启用终端电阻。完成后,返回本页继续设置 CAN FD 固件。
配置开发环境
VSCode 与 PlatformIO
您可以从 VSCode 扩展市场安装 PlatformIO。
STM32CubeProgrammer
您需要它来将固件烧录到开发板。
克隆代码仓库
git clone https://github.com/aotenjo-xyz/one.git
cd one
快速入门
- 将磁铁放在电机轴上。

-
将 Aotenjo One 板连接到 ST-LINK V2 编程器。
ST-LINK V2 <-> Aotenjo One3.3V <---> 3.3VGND <---> GNDSWDIO <---> SWDIOSWCLK <---> SWCLKRST <---> NRST信息
与 BlackPill 不同,STM32G4 系列还需要将控制板的 NRST 引脚连接到 ST-LINK V2 编程器。
或者,您可以在上传过程中按住Aotenjo One板上的NRST按钮来达到相同的效果。
:::
3. 将 ST-LINK V2 编程器连接到计算机。
4. 在 VSCode 中打开项目文件夹。
5. 单击左侧栏上的 PlatformIO 选项卡,然后单击 Upload 按钮将固件上传到开发板。
现在您已准备好使用 CAN 总线通信来控制电机!
后续步骤请参考 Aotenjo Master CAN FD 教程。