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 即可。
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 通信的基础。
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 | 线长、隔离、抗干扰 |
| 储能 BMS | 250 kbps / 500 kbps | 多节点、数据一致性 |
1.4 课程实战项目总览
本课程以一个可运行的 CAN 节点为主线,逐步完成从选型到通信验证的完整闭环。项目目标可以概括为:用一颗带 CAN 的 PIC32,构建一个能周期性发送状态报文、能接收并解析上位机命令、能通过串口输出调试信息的节点。围绕这个目标,课程会依次覆盖:
- 硬件连接:PIC32 的 CANTX/CANRX 引脚、收发器、终端电阻与供电。
- 位定时配置:根据主频和波特率计算 BRP、TQ、相位段与传播段。
- 报文对象配置:验收滤波器、屏蔽寄存器、发送优先级与 FIFO。
- 发送与接收:中断或轮询方式处理报文,处理溢出与错误状态。
- 调试与验证:用 CAN 分析仪或第二个节点观察报文,判断通信是否正常。
为了让后续章节有统一的参照,这里先约定一个示例参数集(属于教学示例,不是实测结果):系统主频 80 MHz,目标波特率 500 kbps,采样点约 75%,使用标准帧,节点 ID 规划为 0x100 发送状态、0x200 接收命令。后续章节会基于这组参数展开位定时计算和寄存器配置。
本章建立了三个基本认知:PIC32 选型要先确认 CAN 模块与报文缓冲能力;CAN 以差分总线、ID 仲裁和错误管理构成可靠通信基础;课程项目将围绕一个真实节点完成发送、接收与调试闭环。接下来进入硬件与引脚层面的具体设计。