《STM32从零开始学习历程》——CAN通讯协议物理层

《STM32从零开始学习历程》@EnzoReventon

CAN通讯协议物理层

相关链接:

《STM32从零开始学习历程》——CAN通讯协议协议层
CAN-bus规范 V2.0版本
CAN总线入门
周立功-CAN协议中文版

参考资料:
[野火EmbedFire]《STM32库开发实战指南——基于野火霸天虎开发板》
[正点原子]STM32F4开发指南-库函数版本_V1.2
[ST]《STM32F4xx中文参考手册》
CAN-bus规范 V2.0版本
CAN总线入门
周立功-CAN协议中文版

CAN协议简介

CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。

CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,它具有的高可靠性良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强振动大的工业环境。

RS485,Modbus为CAN协议的变种。

CAN物理层

与I2C、SPI等具有时钟信号的同步通讯方式不同,CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。

CAN物理层的形式主要分为闭环总线开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯

闭环总线网络

CAN闭环通讯网络是一种遵循ISO11898标准的高速、短距离网络,它的总线最大长度为40m,通信速度最高为1Mbps,总线的两端各要求有一个 “120欧” 的电阻。实践证明,闭环总线网络也可以超越40m的通讯长度,不过将随之牺牲其通讯速率。
《STM32从零开始学习历程》——CAN通讯协议物理层_第1张图片

开环总线网络

CAN开环总线网络是遵循ISO11519-2标准的低速、远距离网络,它的最大传输距离为1km最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻。
《STM32从零开始学习历程》——CAN通讯协议物理层_第2张图片

通讯节点

CAN总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。由于CAN通讯协议不对节点进行地址编码,而是对数据内容进行编码,所以网络中的节点个数理论上不受限制,只要总线的负载足够即可,可以通过中继器增强负载。

CAN通讯节点由一个CAN控制器CAN收发器组成,控制器与收发器之间通过CAN_TxCAN_Rx信号线相连,收发器与CAN总线之间使用CAN_High及CAN_Low信号线相连。其中CAN_Tx及CAN_Rx使用普通的类似TTL逻辑信号,而CAN_High及CAN_Low(同一个时刻只能表达同一个内容)是一对差分信号线,使用比较特别的差分信号。

当CAN节点需要发送数据时,控制器把要发送的二进制编码通过CAN_Tx线发送到收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号,通过差分线CAN_High和CAN_Low线输出到CAN总线网络。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的CAN_High及CAN_Low信号转化成普通的逻辑电平信号,通过CAN_Rx输出到控制器中。

差分信号

差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑0和逻辑1

《STM32从零开始学习历程》——CAN通讯协议物理层_第3张图片

  • 使用了V+与V-信号的差值表达出了图下方的信号。

相对于单信号线传输的方式,使用差分信号传输具有如下优点:

  • 抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上,而接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消。例如,CAN_HIGH正常通讯时为10V,CAN_LOW正常通讯时为5V,他们的电压差为5V,我们规定电压差大于1V时,表示逻辑1,小于1V表示逻辑0;某一时刻外界对信号线产生了-3V的强干扰,CAN_HIGH电压为7V,CAN_LOW为2V,而他们的差值仍为5V,还是输出逻辑1,其表示结果不受干扰影响。
  • 能有效抑制它对外部的电磁干扰,同样的道理,由于两根信号的极性相反,他们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。
  • 时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通单端信号依靠高低两个阈值电压判断,因而受工艺,温度的影响小,能降低时序上的误差,同时也更适合于低幅度信号的电路。
  • 由于差分信号线具有这些优点,所以在USB协议、485协议、以太网协议及CAN协议的物理层中,都使用了差分信号传输。

CAN协议中的差分信号

  • CAN协议中对它使用的CAN_High及CAN_Low表示的差分信号做了规定。
  • 以高速CAN协议为例,当表示逻辑1时(隐性电平),CAN_High和CAN_Low线上的电压均为2.5v,即它们的电压差VH-VL=0V
  • 而表示逻辑0时(显性电平),CAN_High的电平为3.5V,CAN_Low线的电平为1.5V,即它们的电压差为VH-VL=2V

《STM32从零开始学习历程》——CAN通讯协议物理层_第4张图片

《STM32从零开始学习历程》——CAN通讯协议物理层_第5张图片

  • 在CAN总线中,必须使它处于隐性电平(逻辑1)或显性电平(逻辑0)中的其中一个状态。假如有两个CAN通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似I2C总线的 “线与” 特性将使它处于显性电平状态,显性电平的名字就是这样来的,即可以认为显性具有优先的意味。

  • 由于CAN总线协议的物理层只有1对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说,CAN通讯是半双工的,收发数据需要分时进行。

  • 在CAN的通讯网络中,因为共用总线,在整个网络中同一时刻只能有一个通讯节点发送信号,其余的节点在该时刻都只能接收。。

你可能感兴趣的:(STM32,ARM,CAN通讯,can,stm32,arm)