CAN总线协议详解
CAN,全称为Controller Area Network,即控制器局域网络,是一种用于实时应用的串行通讯协议,广泛应用于汽车、工业自动化、航空航天等领域。它是用Bosch公司研发的,并首次使用在奔驰上
一,Can总线图
图1 Can总线闭环网络
Can总线上有很多节点,其中收发器是TJA1040构成,TJA1040是汽车电子产品中广泛使用的一种高性能CAN收发器,具有高可靠性、低功耗等特点,能够有效地抵抗电磁干扰和静电放电对网络的影响。因此,它在汽车控制系统、车身电子、发动机控制等领域得到了广泛应用。简单地说TJA1040收发器可以把can 发出和接收的信号同过收发器转化变成0,1这种高低电平
二, Can总线上挂载120欧姆电阻的原因
它有助于吸收电信号的反射和回波,从而避免因阻抗不连续或阻抗匹配不良而对传输的信号产生干扰。在CAN总线上,信号的传输是通过差分电压进行的。当总线上的节点发送信号时,这些信号将在总线上进行传播。然而,如果总线上的某个位置的阻抗不连续或阻抗不匹配,信号可能会出现反射和回波,这将对总线的信号传输产生干扰。挂载120欧姆电阻可以有效地吸收这些反射和回波,从而确保信号的稳定传输
挂载120欧姆电阻可以提高CAN总线的抗干扰能力。CAN总线是一种高速通信总线,其传输速率通常在1Mbps以上。在这样的高速传输过程中,总线上任何一个微小的干扰都可能导致通信失败或数据错误。通过在总线的两端挂载120欧姆电阻,可以有效地减少这些干扰的影响,提高总线的抗干扰能力,从而确保通信的稳定性和可靠性。总而言之,挂载120欧姆的电阻可以减小信号的干扰,确保信号的稳定传输。
三,Can信号的高低电平
差分信号是由多组双绞线缠绕而成,差分信号又称为差模信号。
图2 双绞线作用
图3 双绞线实物图
与传统的RS232逻辑电平信号有很大的差异(-3~-15V表示逻辑1 ,3~15V表示逻辑0)。Can总线的逻辑1与逻辑0 是用两根差分电压差来表示,当处于逻辑1 ,Can_High 和Can_low的电压小于0.5V时,称为隐形电平;当处于逻辑0,Can_High与Can_low电压差0.9v,称为显性电平。
图 4 Can 逻辑电平信号图
图5 逻辑电平数值表
在 CAN 总线中,必须使它处于隐性电平 (逻辑 1) 或显性电平 (逻辑 0) 中的其中一个状态。假如有两个 CAN 通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似 I2C 总线的“线与”特性将使它处于显性电平状态,(线与就是两个为1才为1 ,有0则0)
四 Can的通信速率与通信方式
Can的通信速率分两个版本,一种是高速的ISO11898,传输速率高属于闭环总线,可达到1Mbps,但速率快带来的是传输距离短,传输距离<=40米;
图6 闭环通信
另一种的是低速ISO11519,属于开环总线,传输距离长可达到1000米以上,通信速率为10kbps~125kbps的通信标准 。
图7 开环总线
五,Can的波特率与位同步
1,位时序分解
SS段(同步段)
若通讯节点检测到总线上信号的跳变沿被包含在 SS 段的范围之内,则表示节点与总线的时序是同步的,当节点与总线同步时,采样点采集到的总线电平即可被确定为该位的电平。SS 段的大小固定为 1Tq。它主要用来采集通讯节点是否同步
PTS段(传播段)
补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍。PTS 段的大小可以为 1~8Tq。简单地说就是延时
PBS1 段 (PHASE SEG1 相位段1)
PBS1 译为相位缓冲段,主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。PBS1 段的初始大小可以为 1~8Tq。
PBS2 段 (PHASE SEG2 相位段2)
PBS2 这是另一个相位缓冲段,也是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短。PBS2 段的初始大小可以为 2~8Tq。
2,CAN波特率
由于Can的通信是异步半双工通信,每秒可传输的数据位即为波特率,假设1Tq=1us,有19个Tq组成,那么就有19个Tq ,每秒传输的数据位 :1*10^6/19=52631.6(1s=10^6us)
六 ,通信的整个过程
图8 通信整个过程
图9 帧的每段含义
帧的种类
数据帧和遥控帧有两种格式,分别是标准格式和扩展格式。标准格式有11位标识符,而扩展格式有29位标识符。
主控制寄存器 CAN_MCR
图10 Can主寄存器
(1) DBF 调试冻结功能
DBF(Debug freeze) 调试冻结,使用它可设置 CAN 处于工作状态或禁止收发的状态,禁止收发时仍可访问接收 FIFO 中的数据。这两种状态是当 STM32 芯片处于程序调试模式时才使用的,平时使用并不影响。
(2) TTCM 时间触发模式
TTCM(Time triggered communication mode) 时间触发模式,它用于配置 CAN 的时间触发通信模式,在此模式下,CAN 使用它内部定时器产生时间戳,并把它保存在CAN_RDTxR、CAN_TDTxR 寄存器中。内部定时器在每个 CAN 位时间累加,在接收和发送的帧起始位被采样,并生成时间戳。利用它可以实现 ISO 11898-4 CAN 标准的分时同步通信功能。
(3) ABOM 自动离线管理
ABOM (Automatic bus-off management) 自动离线管理,它用于设置是否使用自动离线管理功能。当节点检测到它发送错误或接收错误超过一定值时,会自动进入离线状态,在离线状态中, CAN 不能接收或发送报文。处于离线状态的时候,可以软件控制恢复或者直接使用这个自动离线管理功能,它会在适当的时候自动恢复。
(4) AWUM 自动唤醒
AWUM (Automatic bus-off management),自动唤醒功能,CAN 外设可以使用软件进入低功耗的睡眠模式,如果使能了这个自动唤醒功能,当 CAN 检测到总线活动的时候,会自动唤醒。
(5) NART 自动重传
NART(No automatic retransmission) 报文自动重传功能,设置这个功能后,当报文发送失败时会自动重传至成功为止。若不使用这个功能,无论发送结果如何,消息只发送一次。
(6) RFLM 锁定模式
RFLM(Receive FIFO locked mode)FIFO 锁定模式,该功能用于锁定接收 FIFO 。锁定后,当接收 FIFO 溢出时,会丢弃下一个接收的报文。若不锁定,则下一个接收到的报文会覆盖原报文。
(7) TXFP 报文发送优先级的判定方法
TXFP(Transmit FIFO priority) 报文发送优先级的判定方法,当 CAN 外设的发送邮箱中有多个待发送报文时,本功能可以控制它是根据报文的 ID 优先级还是报文存进邮箱的顺序来发送。
模式的选择
位31 SILM模式(Slient mode):静默模式
0:正常工作
1:静默模式
- 正常模式
正常模式下就是Can节点发送和接收数据
- 静默模式
当逻辑1的时候可以发送数据到总线(也就是可以对外传输数据),0的时候不能发送数据;但是它都能接收数据,输入端只能接收输出端的内容
位30 LBKM(Loop back mode):回环模式
0:禁止环回模式
1:使能环回模式
- 回环模式
使用回环模式可以自检,接收不到总线的数据,但能发送数据到总线上
- 回环静默模式
回环静默模式=回环+静默,只能发送1的数据到总线上,接收不了总线上的数据,输入端只能接收到发送端的内容。
以上说的各个模式,是不需要修改硬件接线的。