04. 认识实验平台并完成 CAN 接线
上一课认识了 CAN 总线、节点以及 CAN-ID、DLC、DATA。现在把这些概念落到桌面上的实物:ESP32-C3 从哪里产生 CAN 报文,为什么中间还要经过 TJA1050,CANH 和 CANL 最后怎样接到电机。
这一篇会完成接线和断电电阻测量,但不烧录 CAN 程序,也不让电机运动。
先把器材放在桌面上
本次实验使用:
| 器材 | 用途 |
|---|---|
| ESP32-C3 控制板 | 运行 ESP-IDF 程序 |
| 带 TJA1050 的底板 | 把 ESP32-C3 接入 CANH/CANL |
| IG35EC020 电机 | 总线上的另一个 CAN 节点 |
| 12V 直流电源 | 给底板和电机供电 |
| CAN 线和电机线束 | 连接两个节点 |
| USB 数据线 | 烧录程序并查看日志 |
| 数字万用表 | 上电前测量终端电阻 |
报文离开 ESP32-C3 后经过哪里
一个 CAN 节点通常包含 CAN 控制器和 CAN 收发器。两者不是同一个部件:
应用程序
-> CAN 控制器:生成和解析 CAN 报文
-> CAN 收发器:转换总线电气信号
-> CANH / CANL:连接其他节点
在本实验中,这条路径是:
ESP-IDF 程序
-> ESP32-C3 内部 TWAI 控制器
-> GPIO19(TX)/ GPIO18(RX)
-> 底板上的 TJA1050 收发器
-> CANH / CANL
-> IG35EC020 电机
TWAI 是 Espressif 对片内 Classical CAN 兼容控制器外设使用的名称。它负责 CAN 报文、仲裁、校验和错误状态。TJA1050 是底板上的外部收发器,负责在 TX/RX 数字信号与 CANH/CANL 差分信号之间转换。
因此 GPIO19、GPIO18 连接 TJA1050 的 TXD、RXD,不能直接接到电机 CANH、CANL。
手里的资料分别用在哪里
本篇会用到下列原始资料。这些 PDF 由配套资料包单独提供,不存放在本站文档仓库中:
| 文件 | 本篇从中查什么 |
|---|---|
canopen_connect_board(esp32c3).pdf | GPIO、TJA1050、终端电阻和 J3 端子 |
IG35EC020.pdf | 电机型号、外形和主要规格 |
IG35EC硬件手册.pdf 第 4 页 | 电机 CAN 接口的位置 |
IG35EC硬件手册.pdf 第 7 页 | 12 芯插头的引脚和线色 |
IG35EC硬件手册.pdf 第 8 页 | CAN 接线、波特率、节点地址和终端说明 |
IG35EC硬件手册.pdf 第 9 页 | 完整线束和 LED 状态 |
这些资料解决“应该怎样接”。现场是否真的接对,还要靠实物核对和万用表测量。
CANH 和 CANL 为什么要成对连接
CAN 使用差分信号。接收器主要观察 CANH 与 CANL 之间的电压差,而不是只观察某一根线相对 GND 的电压。
可以先用典型值建立直觉:
| 总线状态 | CANH | CANL | 两者电压差 |
|---|---|---|---|
| 隐性 Recessive | 约 2.5V | 约 2.5V | 接近 0V |
| 显性 Dominant | 约 3.5V | 约 1.5V | 约 2V |
这些是帮助理解的典型值,不是用普通万用表逐帧验收的固定数字。CAN 信号变化很快,需要观察波形时应使用合适的示波器和探头。
CANH 与 CANL 应尽量使用双绞线。差分传输可以提高抗干扰能力,但不表示两根线可以交换:CANH 必须接 CANH,CANL 必须接 CANL。
主干和两端终端电阻
CAN 网络应该有一条清楚的主干,并且有两个物理末端:
120Ω 120Ω
| |
+================ CANH / CANL 主干 =========================+
| | |
节点 A 节点 B 节点 C
节点通过较短支线接入主干。不要把每个节点都接成长支线汇聚到中心,也不是每个节点都安装终端电阻。终端只放在主干的两个物理末端。
两只 120Ω 都跨接在 CANH 与 CANL 之间。系统断电后从总线上测量,它们相当于并联:
R = (120Ω x 120Ω) / (120Ω + 120Ω)
= 60Ω
因此,接线完成且所有设备断电时,CANH 与 CANL 之间通常应测得接近 60Ω。
差分通信仍然需要共地
CAN 收发器可以容忍一定的地电位差,但范围不是无限的。当前是短距离桌面实验,底板和电机使用同一个 12V 电源,因此两者需要共地:
12V 正极 ----> 底板 VIN
+--> 电机 V+
12V 负极 ----> 底板 GND
+--> 电机 GND
长距离、隔离式或存在大地环流风险的系统需要另外设计隔离和接地方式,不能直接照搬本实验接法。
从底板原理图找到 J3
打开 canopen_connect_board(esp32c3).pdf,沿上半部分绿色连线从左向右看:

图源:canopen_connect_board(esp32c3).pdf,第 1 页。
图中可以读出:
发送:GPIO19 -> CAN_TXD -> TJA1050 TXD
接收:GPIO18 <- CAN_RXD <- TJA1050 RXD
总线:TJA1050 CANH/CANL <-> H/L <-> J3
终端:R3 120Ω 跨接 H 与 L
模式:TJA1050 S 脚接地
J3 四个位置为:
| J3 引脚 | 网络名 | 本次连接 |
|---|---|---|
| 1 | VIN | 12V 电源正极 |
| 2 | L | 电机 CANL |
| 3 | H | 电机 CANH |
| 4 | GND | 12V 电源负极和电机 GND |
原理图里的 H 就是 CANH,L 就是 CANL。真正插线前还要核对 PCB 上 J3 旁边的丝印,因为从端子正面和背面观察时,左右方向可能相反。
从电机手册找到 CAN 插头和四根线
先看 IG35EC硬件手册.pdf 第 4 页,找到电机正面的 CAN 接口:

图源:IG35EC硬件手册.pdf,PDF 第 4 页。
再看第 7 页的 12 芯连接器引脚表:

图源:IG35EC硬件手册.pdf,PDF 第 7 页。
本次使用四根线:
| 电机引脚 | 线色 | 功能 |
|---|---|---|
| 1 | 红 | V+,电源正极 |
| 2 | 黑 | GND,电源负极 |
| 11 | 粉 | CANL |
| 12 | 透明 | CANH |
厂家手册给出的电机工作电压范围是 9-36V,本实验使用 12V。透明线容易与白线混淆,除了看颜色,还要核对插头方向和引脚序号。完整线束结构可以查看手册第 9 页。
断电完成连接
确认 12V 电源已经断开,再按下面关系接线:
12V 电源正极 --------+--------> 底板 J3 VIN
+--------> 电机 1 号红线 V+
12V 电源负极 --------+--------> 底板 J3 GND
+--------> 电机 2 号黑线 GND
底板 J3 H / CANH --------------> 电机 12 号透明线 CANH
底板 J3 L / CANL --------------> 电机 11 号粉线 CANL
底板上的 R3 是一只固定 120Ω 终端。当前硬件背景说明总线另一端也已经处理终端匹配,但仍要通过下面的断电测量确认。
用万用表检查终端
连接完成后仍然不要上电:
- 万用表调到电阻档。
- 一支表笔接 CANH,另一支接 CANL。
- 等待读数稳定。
- 记录实际阻值。
测量位置:CANH 与 CANL 之间
预期结果:接近 60Ω
实际结果:
根据读数处理:
| 断电读数 | 下一步 |
|---|---|
| 接近 60Ω | 终端数量大致正确,继续上电前检查 |
| 接近 120Ω | 查找缺少的另一端终端 |
| 接近 40Ω | 检查是否错误接入了三只终端 |
| 接近 0Ω | 保持断电,排查短路和端子 |
| 开路或很大 | 检查线缆、端子和终端是否接入 |
这个读数只能说明静态终端关系大致正确,不能证明波特率正确,也不能证明电机已经能够收发 CAN 报文。
上电前最后看一遍
- 底板 H 接电机 CANH,底板 L 接电机 CANL。
- 底板 GND、电机 GND 和 12V 电源负极相连。
- 12V 正负极没有接反。
- 没有用 ESP32-C3 GPIO 直接连接 CANH/CANL。
- 断电测得 CANH 与 CANL 之间接近 60Ω。
- 接线端没有松散铜丝造成相邻端子短路。
- 电机已经固定,输出轴周围没有手指、线材和工具。
任何一项不确定,都先不要上电。