1. PIC32与CAN通信工程导论

在嵌入式网络里,CAN(Controller Area Network)总线长期占据着“可靠、实时、抗干扰”的生态位。它采用差分信号传输、非破坏性逐位仲裁和基于报文标识符的优先级机制,使多个节点可以在同一对双绞线上共享带宽,同时保证高优先级报文在冲突时优先发送。PIC32 系列微控制器把 CAN 控制器集成在片内,配合外部 CAN 收发器即可构成一个完整的 CAN 节点。本章不急于写代码,而是先建立三件事:选哪颗 PIC32、CAN 在系统中扮演什么角色、以及本课程最终要做出什么。

1.1 PIC32 系列选型:先看 CAN 模块,再看资源

PIC32 家族庞大,但并非所有型号都带 CAN。选型时第一步是确认目标器件是否集成 CAN 控制器,以及集成的是哪一代模块。常见情况如下:

  • PIC32MX 系列:多数中高引脚型号带 1~2 个 CAN 模块,例如 PIC32MX795F512L 带 2 个 CAN,适合需要双通道网关或冗余的场合;PIC32MX370F512L 等带 1 个 CAN,适合普通节点。
  • PIC32MZ 系列:如 PIC32MZ2048EFH144 等型号带 CAN 模块,主频更高、RAM 更大,适合协议栈较重的应用。
  • PIC32MK 系列:面向电机控制与工业,部分型号带 CAN,适合与电机驱动、功率级共存的场景。

确认 CAN 之后,再按以下顺序核对资源:CAN 报文 RAM(邮箱/FIFO 数量)、系统主频、Flash/RAM 容量、引脚复用与外设冲突、封装与工作温度。一个实用的判断是:如果应用需要同时处理多路 CAN 报文并运行上层协议,优先选择带多个 CAN 模块、RAM 较大的型号;如果只是单节点采集与上报,单 CAN 模块加中等 RAM 即可。

选型时不要只看“有没有 CAN”,还要看 CAN 模块的报文缓冲能力。邮箱/FIFO 数量不足时,高负载下容易丢帧,后期只能靠提高主频或改硬件弥补。

1.2 CAN 在嵌入式网络中的角色

CAN 是总线型网络,所有节点挂在同一对 CAN_H/CAN_L 上,两端各接一个 120 Ω 终端电阻。节点通过收发器把控制器的逻辑电平转换为差分信号。CAN 控制器负责位定时、位填充、CRC 校验、应答和仲裁;收发器负责电气驱动与隔离保护。二者分工明确,缺一不可。

CAN 的报文不携带源地址和目的地址,而是用标识符(ID)表达“这是什么内容”。接收节点通过验收滤波器决定是否接收。这种“面向内容”的通信方式使网络扩展时不必修改已有节点的地址表,但也要求系统设计者提前规划 ID 分配。标准帧为 11 位 ID,扩展帧为 29 位 ID。仲裁阶段,ID 数值越小优先级越高,因此安全相关报文通常分配较小的 ID。

与 UART、SPI、I²C 相比,CAN 的优势在于多主、差分、带仲裁和错误管理。它不保证“一定送达”,但保证“要么正确送达,要么被标记为错误”,并通过错误计数器与总线关闭机制隔离故障节点。理解这一点,是后续调试 CAN 通信的基础。

PIC32 CAN 节点结构与总线拓扑 PIC32 节点 A CAN 控制器 + 报文 RAM CAN 收发器(差分驱动) PIC32 节点 B CAN 控制器 + 报文 RAM CAN 收发器(差分驱动) PIC32 节点 C CAN 控制器 + 报文 RAM CAN 收发器(差分驱动) CAN_H / CAN_L 差分双绞线 120Ω 120Ω CAN 报文:ID 决定优先级与内容,验收滤波器决定是否接收 仲裁段 → 控制段 → 数据段 → CRC → 应答 → 帧结束

1.3 典型车载与工业应用场景

在车载领域,CAN 常见于动力总成、车身控制、诊断接口。典型场景包括:发动机转速与温度上报、车门与车灯状态控制、OBD-II 诊断。车载环境对温度范围、EMC 和振动有较高要求,通常选用带 CAN 的 PIC32 工业级或汽车级型号,并在收发器侧加共模电感与 TVS 保护。

在工业领域,CAN 常用于 PLC 扩展 I/O、传感器网络、电机驱动器通信、储能 BMS。工业现场节点分散、线缆较长,需要关注波特率与线长的匹配。一个常用的经验关系是:在标准 CAN 中,波特率与最大总线长度大致成反比,例如 1 Mbps 对应约 40 m,500 kbps 对应约 100 m,125 kbps 对应约 500 m。实际设计还要考虑节点数、线缆电容和终端匹配。

场景典型波特率关注重点
车载动力/诊断500 kbps / 1 Mbps实时性、EMC、诊断协议
车身控制125 kbps / 250 kbps节点数量、低成本
工业 I/O 扩展250 kbps / 500 kbps线长、隔离、抗干扰
储能 BMS250 kbps / 500 kbps多节点、数据一致性

1.4 课程实战项目总览

本课程以一个可运行的 CAN 节点为主线,逐步完成从选型到通信验证的完整闭环。项目目标可以概括为:用一颗带 CAN 的 PIC32,构建一个能周期性发送状态报文、能接收并解析上位机命令、能通过串口输出调试信息的节点。围绕这个目标,课程会依次覆盖:

  1. 硬件连接:PIC32 的 CANTX/CANRX 引脚、收发器、终端电阻与供电。
  2. 位定时配置:根据主频和波特率计算 BRP、TQ、相位段与传播段。
  3. 报文对象配置:验收滤波器、屏蔽寄存器、发送优先级与 FIFO。
  4. 发送与接收:中断或轮询方式处理报文,处理溢出与错误状态。
  5. 调试与验证:用 CAN 分析仪或第二个节点观察报文,判断通信是否正常。

为了让后续章节有统一的参照,这里先约定一个示例参数集(属于教学示例,不是实测结果):系统主频 80 MHz,目标波特率 500 kbps,采样点约 75%,使用标准帧,节点 ID 规划为 0x100 发送状态、0x200 接收命令。后续章节会基于这组参数展开位定时计算和寄存器配置。

学习建议:每学完一个配置环节,都在同一块开发板上验证一次。CAN 的问题往往不是“代码写错”,而是位定时、终端电阻或收发器接线不匹配。尽早建立“配置—观察—判断”的循环,比一次性写完所有代码更有效。

本章建立了三个基本认知:PIC32 选型要先确认 CAN 模块与报文缓冲能力;CAN 以差分总线、ID 仲裁和错误管理构成可靠通信基础;课程项目将围绕一个真实节点完成发送、接收与调试闭环。接下来进入硬件与引脚层面的具体设计。