差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
whatiscan [2023/06/28 16:10]
gongyu [3. 总线仲裁及信令]
whatiscan [2023/06/28 18:38] (当前版本)
gongyu
行 1: 行 1:
 ## CAN总线 ## CAN总线
 ### 1. 什么是CAN总线? ### 1. 什么是CAN总线?
-CAN - 英文Controller Area Network的缩写,是一种串行通信总线,它专为比较恶劣的环境下还能够保持可靠且灵活的性能而设计,比较适合于工业和汽车领域。+CAN - 英文Controller Area Network(控制器局域网)的缩写,是一种串行的车辆总线标准旨在允许微控制器和设备在没有主机的情况下与彼此的应用程序进行通信。它专为比较恶劣的环境下还能够保持可靠且灵活的性能而设计,比较适合于工业和汽车领域。
  
 CAN总线最早是由Bosch发明,后成了标准ISO11898-1,它定义了开放系统互联模型(OSI)中的数据链路和物理层,为高速车内通信提供了一种底层的网络方案。值得一提的是,CAN被设计为减少电缆的连线,因此车内不同的电气控制单元(ECUs)可以通过只有一对电缆进行通信。 CAN总线最早是由Bosch发明,后成了标准ISO11898-1,它定义了开放系统互联模型(OSI)中的数据链路和物理层,为高速车内通信提供了一种底层的网络方案。值得一提的是,CAN被设计为减少电缆的连线,因此车内不同的电气控制单元(ECUs)可以通过只有一对电缆进行通信。
-{{ ::can1.png?800 |}}+{{ ::can-subnetwork.png |}}
  
 车载诊断 (OBD) 是车辆的诊断和报告系统,帮助技术人员通过诊断故障代码 (DTC) 排除问题。 当“检查发动机”灯亮起时,技术人员通常会使用手持设备读取车辆的发动机代码。 在最低层,该数据通过信令协议传输,大多数情况下是使用CAN总线。 车载诊断 (OBD) 是车辆的诊断和报告系统,帮助技术人员通过诊断故障代码 (DTC) 排除问题。 当“检查发动机”灯亮起时,技术人员通常会使用手持设备读取车辆的发动机代码。 在最低层,该数据通过信令协议传输,大多数情况下是使用CAN总线。
  
 DeviceNet是工业应用中使用的高级网络协议。 它大大减少了控制系统和I/​O设备之间所需的接线。 设备可以通过四线连接器连接在一起并连接到 PLC 上的网络扫描仪,而不是将每个设备连接到 PLC I/O 模块上的单独输入/​输出。 在最低层,我们发现CAN在DeviceNet协议中发挥着其魔力。 图 2 显示了PLC扫描通过DeviceNet进行通信的工业设备网络。 DeviceNet是工业应用中使用的高级网络协议。 它大大减少了控制系统和I/​O设备之间所需的接线。 设备可以通过四线连接器连接在一起并连接到 PLC 上的网络扫描仪,而不是将每个设备连接到 PLC I/O 模块上的单独输入/​输出。 在最低层,我们发现CAN在DeviceNet协议中发挥着其魔力。 图 2 显示了PLC扫描通过DeviceNet进行通信的工业设备网络。
-{{ ::can2.png?600 |}}+{{ ::can11.png?800 |}} 
 +{{ :​f31de3f79dde8fa51181c78b18d77c04.jpg |}} 
 +CAN总线采用双绞线提供抗共模干扰能力强的差分信号传输,线的两端分别接有120欧的电阻,每个模块都有两个脚分别连在这两根线上,对于每个模块的内部,都包含一个CAN收发器。 
 +CAN总线一般分为低速和高速,低速CAN传输速率<​125kbps,​ 高速CAN传输速率<​1Mbps,目前还有一种CAN FD可以视为CAN的升级版,传输速率<​5Mbps。 
 +{{ ::​can10.png?​800 |}} 
 +{{ ::​can13.png?​800 ​|}}
  
 ### 2. CAN消息帧 ### 2. CAN消息帧
 那么CAN消息实际上是什么样子的呢? 最初的ISO标准制定了所谓的标准CAN。 标准CAN对不同的报文使用11位标识符,总共有211个,即2048个不同的报文ID。 CAN后来做了修改,标识符扩展为29位,得到229个标识符。 这称为扩展 CAN。 CAN使用多主总线,所有消息都在整个网络上广播。 标识符提供仲裁的消息优先级。 那么CAN消息实际上是什么样子的呢? 最初的ISO标准制定了所谓的标准CAN。 标准CAN对不同的报文使用11位标识符,总共有211个,即2048个不同的报文ID。 CAN后来做了修改,标识符扩展为29位,得到229个标识符。 这称为扩展 CAN。 CAN使用多主总线,所有消息都在整个网络上广播。 标识符提供仲裁的消息优先级。
 +{{ :​can_packetstructureframes_1.png |}}
  
 CAN使用具有两种逻辑状态的差分信号,称为隐性和主导。 隐性状态表示差分电压小于最小阈值电压。 主导状态指示差分电压大于此最小阈值。 有趣的是,主导状态是通过将逻辑“0”驱动到总线上来实现的,而隐性状态是通过逻辑“1”来实现的。 这与大多数系统中使用的传统高和低相反。 重要的是,在仲裁过程中,主导状态优先于隐性状态。 CAN使用具有两种逻辑状态的差分信号,称为隐性和主导。 隐性状态表示差分电压小于最小阈值电压。 主导状态指示差分电压大于此最小阈值。 有趣的是,主导状态是通过将逻辑“0”驱动到总线上来实现的,而隐性状态是通过逻辑“1”来实现的。 这与大多数系统中使用的传统高和低相反。 重要的是,在仲裁过程中,主导状态优先于隐性状态。
行 31: 行 37:
 扩展CAN使用29位标识符以及一些附加位。 扩展消息在11位标识符后面有一个替代远程请求 (SRR) 位,它充当占位符以保持与标准CAN相同的结构。 这次标识符扩展(IDE)应该是隐性的,表示后面跟着扩展标识符。 RTR 位位于 18 位 ID 之后,后面是第二个保留位 r1。 消息的其余部分保持不变。 扩展CAN使用29位标识符以及一些附加位。 扩展消息在11位标识符后面有一个替代远程请求 (SRR) 位,它充当占位符以保持与标准CAN相同的结构。 这次标识符扩展(IDE)应该是隐性的,表示后面跟着扩展标识符。 RTR 位位于 18 位 ID 之后,后面是第二个保留位 r1。 消息的其余部分保持不变。
 {{ ::​can4.png?​800 |}} {{ ::​can4.png?​800 |}}
 +
 +FlexCAN是一种CAN总线的扩展,它是一种嵌入式网络架构,由凯特林大学的胡安·皮门特尔博士设计的,它的灵感来自于FlexRay以及通过CAN网络提供更具确定性行为的需求。 其重点是硬件级别的冗余以及协议级别基于时间的优先通信。
 +
 +关于FlexCAN参见文章FlexCAN: ​
 +[[https://​paws.kettering.edu/​~jpimente/​flexcan/​FlexCAN-architecture.pdf|A Flexible Architecture for Highly Dependable Embedded Application]]
  
 #### CAN消息类型 #### CAN消息类型
行 51: 行 62:
  
 发送的下一位是“0”。 CANH 得到其补码,CANL 再次得到 CANH 的补码。 请注意,这次 CANH 和 CANL 电压并不接近。 因此,差分电压(VDIFF)较大。 这是 CAN 主导状态。 我们说逻辑是颠倒的,因为“1”使总线处于低电平,而“0”则使总线处于高电平。 输入接收器以类似的方式工作。 发送的下一位是“0”。 CANH 得到其补码,CANL 再次得到 CANH 的补码。 请注意,这次 CANH 和 CANL 电压并不接近。 因此,差分电压(VDIFF)较大。 这是 CAN 主导状态。 我们说逻辑是颠倒的,因为“1”使总线处于低电平,而“0”则使总线处于高电平。 输入接收器以类似的方式工作。
-{{ ::can6.png?800 |}}+{{ ::can6.png?500 |}}
  
-### 5. 优先级仲裁+###优先级仲裁
 正如前面提到的,11 位标识符越小,消息的优先级就越高。 节点传输的每一位都会受到监控。 这就是节点检测总线上正在放置更高优先级消息的方式。 当节点发送隐性位但在总线上检测到显性位时,它就会后退。 这称为非破坏性仲裁,因为胜出的消息将继续传输,没有任何问题。 请注意,隐性逻辑“1”输给了显性逻辑“0”。 这是有道理的,因为较低的标识符值代表较高的优先级。 为了更好地了解这意味着什么,请查看图 7,其中显示了 CAN 总线上尝试控制的三个节点。 请务必记住,每次显示隐性位时,控制器都会发送“1”,而显性位对应于发送“0”。 正如前面提到的,11 位标识符越小,消息的优先级就越高。 节点传输的每一位都会受到监控。 这就是节点检测总线上正在放置更高优先级消息的方式。 当节点发送隐性位但在总线上检测到显性位时,它就会后退。 这称为非破坏性仲裁,因为胜出的消息将继续传输,没有任何问题。 请注意,隐性逻辑“1”输给了显性逻辑“0”。 这是有道理的,因为较低的标识符值代表较高的优先级。 为了更好地了解这意味着什么,请查看图 7,其中显示了 CAN 总线上尝试控制的三个节点。 请务必记住,每次显示隐性位时,控制器都会发送“1”,而显性位对应于发送“0”。
  
行 61: 行 72:
 {{ ::​can7.png?​800 |}} {{ ::​can7.png?​800 |}}
  
-### 6. 总 +### 4CAN线控制器和收发器 
-本文介绍了控制器局域网(CAN)。 CAN 是一种强大的串行通信总线,主要用于汽车和工业环境。 ​CAN 使用差分信号,这使其具有更强的抗噪声能力,并采用优先仲裁方案来实现无损消息传输。 CAN 非常适合处于危险环境或存在大量电磁干扰的区域的嵌入式应用。 ​无论您是建造一艘遥控潜艇、建立一个带有泵和传感器的小型啤酒厂,还是只是侵入您汽车的计算机,CAN 都是进一步加深您的嵌入式知识并同时加强您的下一个设计项目的好方法。+#### CAN控制器 
 +CAN控制器用于将欲收发的消息报文),转换为符合CAN规范的CAN帧,通过CAN收发器,在CAN-bus上交换信息。 
 +CAN控制器芯片分为两类: 
 +  * 独立的控制器芯片,如SJA1000 
 +  * CAN控制器集成在微控制器中,如NXP半导体公司的Cortex-M0内核LPC11Cxx系列微控制器、LPC2000系列32位ARM微控制器。 
 + 
 +CAN控制器工作原理图 
 +  - 接口管理逻辑: 用于连接外部主控制器,解释来自主控制器的命令,控制CAN控制器寄存器的寻址,并向主控制器提供中断信息和状态信息。 
 +  - CAN核心模块:收到一个报文时,CAN核心模块根据CAN规范将串行位流转换成用于接收的并行数据,发送一个报文时则相反。 
 +  - 发送缓冲器:用于存储一个完整的报文,当CAN控制器发送初始化时,接口管理逻辑会使CAN核心模块从发送缓冲器读CAN报文。 
 +  - 验收滤波器:可以根据用户的编程设置,过滤掉无须接收的报文。 
 +  - 接收FIFO:是验收滤波器和主控制器之间的接口,用于存储从CAN 总线上接收的所有报文。 
 +  - 工作模式:CAN控制器可以有两种工作模式(BasicCAN和PeliCAN)。BasicCAN仅支持标准模式,PeliCAN支持CAN2.0B的标准模式和扩展模式 
 + 
 +#### CAN收发器 
 +CAN收发器是CAN控制器和物理总线之间的接口,将CAN控制器的逻辑电平转换为CAN总线的差分电平,在两条有差分电压的总线电缆上传输数据。 
 + 
 +CAN收发器的类型 
 +汽车车载网络CAN收发器也分为独立型与组合型两大类。由于前者应用灵活,可以与多种CAN控制器进行连接使用,故应用最广泛。后者通常与CAN控制器组合在一起,形成一个具有CAN收发功能的CAN控制器组件。 
 + 
 + 
 +### 5. 总结 
 +CAN是一种强大的串行通信总线,主要用于汽车和工业环境。 ​使用差分信号,具有更强的抗噪声能力,并采用优先仲裁方案来实现无损消息传输。 CAN非常适合处于危险环境或存在大量电磁干扰的区域的嵌入式应用。 
 + 
 +{{ ::​can8.png?​800 |}} 
 +{{ ::​can9.png?​800 |}} 
 +{{ ::​can12.png?​800 |}} 
 +{{ ::​can14.png?​800 |}} 
 +