CAN通信抗干扰硬件设计实战 - 第1节

1.1 CAN协议概述

控制器局域网(Controller Area Network,简称CAN)是一种由德国Bosch公司于1986年开发的串行通信协议,最初专为汽车环境中的电子控制单元(ECU)之间的可靠通信而设计。经过数十年的发展,CAN协议已成为工业自动化、医疗设备、航空航天及轨道交通等领域中应用最广泛的现场总线之一。

CAN协议的核心设计理念包括:

  • 多主总线结构:任何节点均可主动发起通信,无需主从仲裁。
  • 基于优先级的非破坏性仲裁:通过标识符(ID)决定总线访问权,高优先级报文优先发送。
  • 短帧结构:数据场最多8字节(CAN 2.0A/B),确保实时性与低延迟。
  • 强大的错误检测与处理机制:包括CRC校验、位填充、格式检查、应答确认等。
  • 差分信号传输:抗共模干扰能力强,适合恶劣电磁环境。
CAN协议主要版本对比
特性 CAN 2.0A(标准帧) CAN 2.0B(扩展帧) CAN FD(灵活数据速率)
标识符长度 11位 29位 11位或29位
最大数据场 8字节 8字节 64字节
最大波特率 1 Mbps 1 Mbps 8 Mbps(数据段)
帧类型 数据帧、远程帧 数据帧、远程帧 数据帧、远程帧、扩展数据帧
CAN 2.0A 标准数据帧结构 SOF 仲裁场 ID(11位) + RTR 控制场 IDE + DLC 数据场 0~8字节 CRC场 15位 + 定界符 ACK 2位 EOF ITM 1位

1.2 差分信号原理

CAN总线采用差分信号传输方式,这是其具备卓越抗干扰能力的根本原因。差分信号使用两条物理线路——CAN_H(高电平线)和CAN_L(低电平线)——来传输一路逻辑信号。接收端通过检测两条线之间的电压差(Vdiff = CAN_H - CAN_L)来判别总线状态。

差分信号相比单端信号具有以下显著优势:

  • 共模噪声抑制:外部电磁干扰在两条线上产生几乎相同的共模电压,差分接收器只响应差模分量,从而抵消共模噪声。
  • 电磁辐射降低:两条线中的电流方向相反,产生的磁场相互抵消,减少对外辐射。
  • 信号摆幅小:典型差分电压仅约1.5V~2.0V,功耗更低且开关速度更快。
  • 地电位偏移容忍:允许收发器之间存在高达±12V的共模电压差(视具体收发器型号而定)。
CAN总线显性与隐性电平定义(ISO 11898-2)
总线状态 逻辑值 CAN_H电压 CAN_L电压 差分电压 Vdiff
显性(Dominant) 0 3.5V 1.5V 2.0V(典型)
隐性(Recessive) 1 2.5V 2.5V 0V(近似)
差分信号原理与共模干扰抑制 V t CAN_H CAN_L Vdiff 共模 干扰 显性 (0) 隐性 (1) 显性 (0) 隐性 (1) 0V 2V

1.3 CAN总线物理层特性

CAN总线的物理层定义了信号传输的电气特性、位时序、同步机制以及总线拓扑结构。根据ISO 11898-2标准,高速CAN(High-Speed CAN)是最常用的物理层实现,其关键特性如下:

1.3.1 总线电平与终端匹配

CAN总线两端必须各连接一个120Ω的终端电阻,用于匹配传输线阻抗、抑制信号反射。终端电阻的典型连接方式为:CAN_H与CAN_L之间跨接120Ω电阻。在低速或容错CAN中,终端电阻的配置方式有所不同。

1.3.2 位时序与同步

CAN总线采用非归零(NRZ)编码方式,并通过位填充(Bit Stuffing)机制保证时钟同步的连续性。每一位被划分为四个段:

  • 同步段(Sync_Seg):用于同步总线上的各个节点,长度为1个时间量子(Tq)。
  • 传播段(Prop_Seg):补偿网络中的物理延迟,包括收发器延迟和总线传播延迟。
  • 相位缓冲段1(Phase_Seg1):用于补偿边沿相位误差,采样点位于此段末尾。
  • 相位缓冲段2(Phase_Seg2):用于补偿边沿相位误差,控制下一个位周期的开始。
典型CAN总线参数配置(125 kbps ~ 1 Mbps)
波特率 位时间 (Tbit) 时间量子 (Tq) Sync_Seg Prop_Seg Phase_Seg1 Phase_Seg2 采样点位置
1 Mbps 1 μs 125 ns 1 Tq 2 Tq 3 Tq 2 Tq 75%
500 kbps 2 μs 200 ns 1 Tq 3 Tq 3 Tq 3 Tq 70%
250 kbps 4 μs 250 ns 1 Tq 4 Tq 5 Tq 6 Tq 62.5%
125 kbps 8 μs 500 ns 1 Tq 5 Tq 5 Tq 5 Tq 68.75%

1.3.3 总线拓扑与节点结构

CAN总线采用线性总线拓扑结构,所有节点通过双绞线并联在总线上。每个CAN节点通常包含以下组成部分:

  • 微控制器(MCU):集成CAN控制器或通过SPI接口连接外部CAN控制器。
  • CAN控制器:实现协议层功能,包括帧封装、仲裁、错误检测等。
  • CAN收发器:将控制器的逻辑电平转换为总线差分信号,并提供电气隔离保护。
  • 隔离器件(可选):如光耦或磁耦,用于实现节点间的电气隔离。
  • 终端电阻:总线两端各一个120Ω电阻。
CAN总线物理层拓扑结构 CAN_H CAN_L R 120Ω R 120Ω 节点 1 ECU / 控制器 节点 2 传感器 / 执行器 节点 3 显示 / 人机界面 节点 4 网关 / 记录仪 节点内部结构 MCU → CAN控制器 → 收发器 → 隔离(可选)→ 总线接口

1.3.4 抗干扰设计要点

基于上述物理层特性,在实际硬件设计中需重点关注以下抗干扰措施:

  • 双绞线选择:使用特性阻抗为120Ω的屏蔽或非屏蔽双绞线,绞距应均匀,每英寸至少3~5绞。
  • 终端电阻精度:选用1%精度的120Ω电阻,功率不低于1/4W,确保阻抗匹配。
  • 共模扼流圈:在总线入口处串联共模扼流圈,抑制共模干扰进入节点。
  • ESD保护:在CAN_H和CAN_L对地之间放置TVS管,钳位电压选择±36V或±40V。
  • 隔离设计:对于长距离或高电位差场景,使用带隔离的CAN收发器(如ISO1050、ADM3053)。
  • 布线规则:总线走线远离高频开关电源、时钟线等强干扰源,避免90°直角拐弯。
/* CAN控制器初始化代码示例(基于STM32 HAL库) */
CAN_HandleTypeDef hcan1;

void MX_CAN1_Init(void)
{
    hcan1.Instance = CAN1;
    hcan1.Init.Prescaler = 6;               // 时间量子分频
    hcan1.Init.Mode = CAN_MODE_NORMAL;      // 正常模式
    hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ; // 同步跳转宽度
    hcan1.Init.TimeSeg1 = CAN_BS1_8TQ;      // 时间段1
    hcan1.Init.TimeSeg2 = CAN_BS2_3TQ;      // 时间段2
    hcan1.Init.TimeTriggeredMode = DISABLE;
    hcan1.Init.AutoBusOff = ENABLE;         // 自动离线恢复
    hcan1.Init.AutoWakeUp = DISABLE;
    hcan1.Init.AutoRetransmission = ENABLE;  // 自动重发
    hcan1.Init.ReceiveFifoLocked = DISABLE;
    hcan1.Init.TransmitFifoPriority = DISABLE;
    
    if (HAL_CAN_Init(&hcan1) != HAL_OK)
    {
        Error_Handler();
    }
}
专注课程资料整理