控制器局域网(英语:Controller Area Network,简称CAN或者CAN bus)是一种功能丰富的车用总线英语Vehicle bus标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。 它基于消息传递协议,设计之初在车辆上采用复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。

CAN建立在基于信息导向传输协定的广播机制(Broadcast Communication Mechanism)上。其根据信息的内容,利用信息标志符(Message Identifier,每个标志符在整个网络中独一无二)来定义内容和消息的优先顺序进行传递,而并非指派特定站点位址(Station Address)的方式。

因此,CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性。

历史

罗伯特·博世公司于1983年开发了控制器局域网(CAN bus)。[1]该协议于1986年美国密歇根州底特律市举行的国际汽车工程师学会(SAE)会议上正式发表。第一个CAN控制芯片,由英特尔飞利浦生产,并且于1987年发布。 世界上第一台装载了基于CAN的多重线系统的汽车是1991年推出的梅赛德斯-宾士 W140[2][3]

博世公司发表了关于CAN规范的几个版本,最新的CAN 2.0于1991年发布。该规范被分为两部分;A部分适用于使用11位标识符的标准格式,B部分适用于使用29位标志符的拓展格式。使用11位标识符的CAN装置一般被称作CAN 2.0A,而使用29位识别码的CAN装置通常称为CAN 2.0B。博世公司免费提供标准、规范和白皮书[4]

1993年,国际标准化组织(ISO)公布了CAN标准ISO11898。后来CAN标准被重新编译分成两个部分:ISO11898-1涵盖了数据链路层;ISO11898-2涵盖了高速CAN总线的物理层; ISO11898-3于晚些时候公布并且涵盖了低速CAN总线的物理层和CAN总线容错规范。 物理层标准ISO11898-2和ISO11898-3并不包含在博世CAN2.0规范中,它们可以单独从ISO购买。

之后,博世公司仍然积极地拓展CAN标准。2012年,博世公布CAN FD 1.0或称作可变数据速率的CAN。这个规范使用不同的架构,允许在仲裁之后,切换至更快的比特率,传输不同的数据的长度。CAN FD兼容现有的CAN 2.0网络,所以新的CAN FD装置能够与现有CAN装置共存于同一控制网络。

CAN总线是五个使用在车载诊断 (OBD)-II标准的协议的其中一个。1996年以后,所有在美国销售的汽车及轻型卡车被强制要求符合OBD-II标准。在欧盟,自2001年后销售的汽油载具及2004年后销售的柴油载具都强制规定需要符合EOBD标准。[5]

应用

CAN总线通常应用于如下领域

  • 乘用车、卡车、公共汽车(汽油车及电动车)
  • 航空、航海电子仪器
  • 工业自动化及机械控制
  • 电梯、扶梯
  • 建筑自动化
  • 医疗仪器及设备

汽车

现代的汽车可能为其子系统配备多达70个电子控制器(ECU)。[6]最常见的控制器为发动机控制器。除此以外,变速器安全气囊防锁死煞车系统/ABS、定速巡航动力方向盘、音响系统、动力车窗英语Power window、车门、后视镜调整、电池和混合动力电动汽车的充电系统等等均使用电子控制器。这其中,有的是独立的子系统,有些需要跟其他子系统进行通信,控制驱动器或接收传感器的反馈信息。为此设计了控制器局域网络,将汽车的不同系统相互连接在一起。传统的“电缆直连”成本高,布线复杂,而控制器局域网络仅需软件就可实现,不仅安全、经济还十分便利。

  • 自动启动/停止:车辆各处的各种传感器(速度传感器、转向角、空调关闭,发动机温度)所发出的各种信号可由CAN总线收集并用于决定是否可以在停车时关闭发动机,进而改善燃油效率和尾气排放。
  • 电子驻车制动系统:"斜坡驻车"的功能需要车辆的倾斜传感器(同时用于防盗报警器)和道路的速度传感器(同时用于防锁死制动、发动机控制和牵引力控制)通过CAN总线传输采样信号并决定车辆是否停在斜坡上。同样,安全带的传感器(安全气囊的一部分)通过CAN总线传输信号,以确定安全带是否扣上,然后泊车的刹车会自动在移动时关闭。
  • 驻车辅助系统英语Automatic parking:当司机切换至倒档,变速器控制单元可以通过CAN总线发送信号,激活停车传感器系统和车门控制模块,使副驾驶侧的后视镜向下倾斜显示路涯。 CAN总线也可以从雨水传感器获取信号,在倒车时自动触发后挡风玻璃雨刮。
  • 车道偏离警示/防撞系统英语Collision avoidance:车道偏离警示/驻车传感器的信号也可通过CAN总线用于驾驶辅助系统判断附近物体,比如车道偏离警示。最近,这些信号可以通过CAN总线触发防撞系统中的电子刹车系统。
  • 汽车刹车清扫:雨水传感器(主要用于自动挡风玻璃雨刷)通过CAN总线将信号送达防抱死制动系统模块中,在行驶中轻微触发一次人体不会察觉的刹车来清除刹车片上的液体。奥迪宝马的某些高性能型号搭配有这一功能。

近些年又开发出了LIN(区域互联网络)标准,用在非关键系统中的应用,例如空调和信息娱乐系统等数据传输速度和可靠性不是很重要的系统中。

其他

  • CAN总线协议自2009年后被用于禧玛诺DI2的公路自行车电子变速系统上。同样的,Ansmann和BionX英语BionX在它们的直驱电机中使用CAN协议。
  • 由于CAN控制器和处理器价格低廉,CAN总线同样可应用于普通自动化环境的现场总线中。
  • 包括NISMO英语Nismo在内的开发商致力于使用CAN总线数据在GT赛车6中利用游戏内的GPS数据,重建真实的赛车视觉动态模糊,玩家将获得真实的赛车动态模糊效果。[7]
  • 约翰·霍普金斯大学应用物理学实验室的模块化假肢(MPL)使用局域CAN总线使假肢上的伺服电机和控制器的沟通更容易。

架构

CAN是一个用于连接电子控制单元(ECU)的多主机英语Multi-master bus串行总线标准。电子控制单元有时也被称作节点。CAN网络上需要至少两个节点才可进行通信。节点的复杂程度可以只是简单的输入输出装置,也可以是包含有CAN交互器并搭载了软件的嵌入式元件。节点还可能是一个网关,允许普通计算机通过USB或以太网端口与CAN网络上的装置通信。

所有节点通过两根平行的总线连接在一起。两条电线组成一条双绞线,并且接有120Ω的特性阻抗。

ISO 11898-2,也称为高速度CAN。它在总线的两端均接有120Ω电阻。

Thumb
高速CAN网络。ISO 11898-2

高速CAN总线在传输显性(0)信号时,会将CAN_H端抬向5V高电平,将CAN_L拉向0V低电平。当传输隐性(1)信号时,并不会驱动CAN_H或者CAN_L端。 显性信号CAN_H和CAN_L两端差分标称电压为2V。 终端电阻在没有驱动时,将差分标称电压降回0V。显性信号(0)的共模电压需要在1.5V到3.5V之间。隐性信号(1)的共模电压需要在+/-12V。

Thumb
高速CAN信令。ISO 11898-2

ISO 11898-3,也被称作低速或者容错CAN。它使用线性主线,星形主线或者连接到一个线性主线上的多星结构主线著称。每个节点都有终端电阻作为全局终端电阻的一部分。全局终端电阻不应低于100 Ω。

Thumb
低速容错CAN网络。ISO 11898-3

低速/容错CAN信号在传输显性信号(0)时,驱动CANH端抬向5V,将CANL端降向0V。在传输隐性信号(1)时并不驱动CAN 总线的任何一端。在电源电压Vcc为5V时,显性信号差分电压需要大于2.3V,隐性信号的差分电压需要小于0.6V。CAN总线两端未被驱动时,终端电阻使CANL端回归到RTH电压(当电源电压Vcc为5V时,RTH电压至少为Vcc-0.3V=4.7V),同时使CANH端回归至RTL电压(RTL电压最大为0.3V)。两根线需要能够承受-27V至40V的电压而不被损坏。

Thumb
低速CAN信令。ISO 11898-3

在高速和低速CAN中,从隐性信号向显性信号过渡的速度更快,因为此时CAN线缆被主动积极地驱动。显性向隐性的过渡速度主要取决于CAN网络的长度和导线的电容。

高速CAN通常被用于汽车和工业应用,在这些应用环境中,总线通常从一端横跨至另一端。容错CAN总线则经常被用在需要连接在一起的一组节点。

ISO规格只要求总线共模电压必须保持在最小和最大范围内,但不定义如何将总线电压保持在这个范围。

CAN总线必须使用终端电阻。终端电阻可以用来抑制信号反射英语Signal reflection,同时可以使总线电压回到隐性状态或者闲置状态。

高速CAN在总线两端使用120Ω电阻。低速CAN在每个节点均使用电阻。也有其他类型的终端,例如ISO 11783英语ISO 11783中定义了终端偏压电路。 [8]

终端偏压电路使用由4条导线组成的线缆,除了CAN信号线以外还有电源线和地线。这在每段总线两端提供自动偏压终端功能。ISO11783网络是专为热拔插总线段和电子控制单元设计的。

Thumb
CAN总线节点

每个节点需要:

  • 中央处理器、微处理器或主处理器
    • 处理主机决定收到的信息的意思以及想要传输的信息。
    • 传感器、驱动器和控制装置可以与主处理器连接。
  • CAN控制器;通常是集成单片机的一部分
    • 接收:CAN控制器将从总线上接收的串位字节存储直到整个消息可用,之后主处理器可以获取这个消息(通常由于CAN控制器触发一个中断)。
    • 发送:主处理器发送传递信息到CAN控制器,之后当总线空闲时将串位信息传递至总线。
  • 收发器;由ISO11898-2/3介质访问单元(MAU)标准定义
    • 接收:把数据流从CAN总线层转换成CAN控制器可以使用的标准。 CAN控制器通常配有保护电路。
    • 传输:把来自CAN控制器的数据流转换至CAN总线层。

每个节点能够发送和接收信息,但不是同时进行的。 一个消息或主要包括标识符(ID),它表示信息的优先级,最多八个数据字节。CRC、ACK和其他帧部分也是消息的一部分。改进了的CAN FD将每个帧拓展至最多64字节。 消息采用不归零(NRZ)格式串联传送到主线并可被所有节点接收。

被CAN网络连接的装置通常是传感器驱动器和其他控制设备。 这些装置通过一个中央处理器、一个CAN控制器,和一个CAN接收器连接至总线。

数据传输

CAN数据传输如果出现争执,将会使用无损位仲裁解决办法。该仲裁法要求CAN网络上的所有节点同步,对每一位的采样都在同一时间。这就是为什么有人称之为CAN同步。然而,同步这个术语在此并不精确,因为数据以非同步格式传输而不包含时钟信号。

CAN规范中使用术语"显性"位和"隐性"位来表示逻辑高低。显性是逻辑0(由发信器积极驱动通过电压)而隐性是逻辑1(被动地通过电阻返回到一个电压)。 闲置状态代表隐性的水平,也就是逻辑1。如果一个节点发送了显性位而另一个节点发送一个隐性位,那么总线上就有冲突,最终结果是显性位“获胜”。这意味着,更高优先级的信息没有延迟。较低优先级的节点信息自动在显性位传输结束,6个时钟位之后尝试重新传输。这使得CAN适合成为一个实时优先通讯系统。

逻辑0或1的确切电压取决于所使用的物理层,但CAN的基本原则要求每个节点监听CAN网络上的数据,包括发信节点本身。如果所有节点都在同时发送逻辑1,所有节点都会看到这个逻辑1信号,包括发信节点个接受节点。如果所有发信节点同时发送逻辑0信号,那么所有节点都会看到这个逻辑0信号。当一个或多个发信节点发送逻辑0信号,但是有一个或多个发信节点发送了逻辑1信号,所有节点包括发送逻辑1信号的节点也会看到逻辑0信号。当一个节点发送逻辑1信号但是看到一个逻辑0信号,它会意识到线上有争执并退出发射。通过这个过程,任何传送逻辑1的节点在其他节点传送逻辑0时退出或者失去仲裁。失去仲裁的节点会在稍后把信息重新加入队列,CAN帧的比特流保持没有故障继续进行直到只剩下一个发信节点。这意味着传送第一个逻辑1的节点丧失仲裁。由于所有节点在开始CAN帧时传输11位(或CAN 2.0B中是29位)标识符,拥有最低标识符的发信节点在起始处拥有更多0。那个节点赢得仲裁并且拥有最高优先级。

例如,一个11位标识符的CAN网络,有两个节点,他们的ID分别为15(二进制表示为00000001111)和16(二进制表示为00000010000)。如果这两个节点同时传输,每个都会优先传输它们标识符中的前6个0而不触发仲裁。

More information 起始位, ID位 ...
起始位 ID位 帧剩下的部分
10 9 8 7 6 5 4 3 2 1 0
节点15 0 0 0 0 0 0 0 0 1 1 1 1
节点16 0 0 0 0 0 0 0 1 停止传输
CAN数据 0 0 0 0 0 0 0 0 1 1 1 1
Close

当ID中的第7位传输时,节点16为其ID发送1(隐性),而节点15为其ID发送0(显性)。当这种情况发生时,该节点16知道自己发送了1,但在总线上看到了0,意识到有冲突发生并且自己失去仲裁。节点16停止传送而节点15继续传输自己的ID,没有丢失任何数据。拥有最低ID的节点总是赢得仲裁,因此具有最高优先级。

长度小于40m的网络最高支持的比特率高达1百万比特/秒。降低比特率可以允许使用更长的网络距离(例如,125千比特/秒支持最大500米)。改进的CAN FD标准允许仲裁后升高比特率,可以将数据区段速度增加至仲裁位速率的八倍。

ID分配

信息ID在单条CAN总线上必须是唯一的,否则两个节点将在仲裁位(ID)传送结束后继续传输,造成错误。

1990年代早期,为信息选择标志符(ID)的准则仅仅基于数据的种类和发信节点。但是,当标志符同样代表着信息的优先级时,这会带来不好的实时响应。在这种情况下,通常要求CAN总线只能使用大概30%才能保证信息可以在截止时间之前到达。然而,如果信息的标志符根据信息的优先级决定,更低标志符的信息获得更高优先级,那么在不损失数据的前提下,总线的使用率可以达到70%到80%。

位时序

CAN网络上的所有节点必须运行在相同的标称比特率下,但噪音、相移、振荡频率容差和振荡频率漂移导致实际的比特率可能与标称比特率不同。[9]由于没有使用一个单独的时钟信号,需要一个同步节点方法。同步在仲裁机制中十分重要,因为仲裁中的节点需要能够同时看到它们传输数据的数据和其他节点的传输数据。 同步在确保节点间震荡时间不同时不发生错误上十分重要。

总线闲置一段时间后,在第一个隐性信号向显性信号转换时(起始位) 进行硬同步。再次同步发生在传输帧期间的每次从隐性向显性转换时。CAN控制器期望在标称位时间内发生多次转换。如果并没有在期望的确定时间发生,控制器将根据这调整标称位时间。

调整是通过将每一位划分成多个称为量子的时间段,并分配一定数量的量子到位中的四个阶段完成的。这四个阶段分别为:同步、传播、相位段1和相位段2。

Thumb
每位10个量子的CAN位时序的例子。

位被分成的量子数量会因控制器的不同而不同,每一个阶段分配的量子数会因比特率和网络状况的不同而改变。

在预期时刻之前或之后发生的过渡会促使控制器计算时间差,并根据计算所得的时间差延长相位段1或者缩短相位段2。这有效地改变接收器到发信器的时序,将它们同步在一起。这个重新同步过程不断地在每次隐性向显性过渡时进行已确保发信器和接收器保持同步。不断地重新同步降低了噪声产生的错误,让同步至已经失去仲裁的节点的接收节点重新同步到赢得仲裁的节点。

层级

CAN协议与很多网络协议相似,可以被分解为下列抽象层

应用层
对象层
  • 信息过滤
  • 消息和状态处理
传输层

大多数CAN标准应用在传输层。传输层从物理层接收消息并将这些信息传递给对象层。传输层负责特定时序、同步、信息位构架、仲裁、确认、错误检测及发信和故障约束。它的职责为:

  • 故障约束
  • 错误监测
  • 消息验证
  • 信息确认
  • 仲裁
  • 信息帧
  • 传输速率和时间
  • 路由信息
物理层
Thumb
CAN总线包含终端电阻的电气连接样例。

CAN总线(ISO11898-1:2003)最初指定的链路层协议仅包括对物理层的抽象需求。 物理层关于电气方面的(电压,电流,数量导体)规定来自于ISO11898-2:2003,该协议目前被广泛接受。但是,物理层关于机械方面的(接头种类和数量、颜色、标签、标准输出)尚未被正式指定。因此,汽车的电子控制单元(ECU)通常会有定制的接口和各种线缆组成CAN总线。尽管如此,领域中已经出现若干机械方面的标准,最常见的是使用9个引脚的D-sub型插头,拥有以下引脚分布:

  • 引脚2:CAN-Low (CAN−)
  • 引脚3:GND (地线)
  • 引脚7:CAN-High (CAN+)
  • 引脚9:CAN V+ (供电)
Thumb
DB-9连接器(插头)

这个CAN的机械标准可以用于D-sub接口的插头和插座。总线电流从插座流向插头。这遵循了电源在插座处截止的电气工程惯例。采用本标准避免了为将节点连接到同一个D接口而制作定制分离器。非标准(自定义)线束(分离器),在线缆上分离CAN分支,减少总线的可靠性、消除电缆可交换性、减少线束的兼容性并且增加成本。


完整的物理层规范的缺失(电气和机械方面)减少了CAN总线的限制,降低了实现功能时物理层面的复杂度。但它让CAN总线在交互时因为机械原因不兼容。为了提高互用性,许多汽车制造商制定了描述可兼容使用的CAN接收器的一套参数规范。最大寄生电容包括电容本身以及静电保护(ESD)(静电保护[10]在ISO 7637-3中定义)。除了寄生电容、12V和24V系统因为最大电压不同有不同的标准。事实上,在助推启动(jump start)时,轻型车辆的先电压可以达到24V,而卡车系统可以达到36V。新的解决方案,允许同样的元件使用于CAN和CAN FD(详见[11])即将投入市场。

ISO11898-2:2003中的噪声免疫是通过在总线两端使用低电阻值(120欧姆)维持总线两条线间的差分阻抗实现的。然而,当处于休眠状态时,例如CAN总线的低阻值总线会比其他基于电压的信号总线消耗更多电流。在CAN总线系统中,当一条信号线中的电流于另一条反方向电流值一样时,该平衡传输线为接收器提供稳定的0V参考电压。最好的做法是在已经有很嘈杂的射频干扰的汽车内,对CAN总线使用带屏蔽层的双绞线,以尽量减少射频信号的发射,降低干扰的敏感性。

ISO11898-2在发信器和接收器之间提供一定的共模电压免疫。通过一个0V的通路保持节点间的电压关联。此外,在上述的现有机械结构里,包含一个将电力分配到各个节点的收发器的供电轨通道。该设计为所有收发器提供了一个共用的电源。总线上应用的实际电压由使用的收发器决定,并没有统一规范。常见设计是,通过CAN总线为每个与自身节点电气隔离的收发器提供电压驱动5V变压器。这通常提供足够多的冗余度来保证节点间的互用性。 这种网络的典型供电电压在7V到30V之间。但是,通用标准的缺失导致系统的设计者要为供电轨道的兼容性负责。

ISO 11898-2 中描述的电气实施方法构建了一个在总线两端使用终端电阻组成的多站单端平衡线路布局。在这个结构中,显性状态由一个或多个传输器将CAN_L切换至0V,同时将CAN_H切换至5V总线电压来形成通过终端电阻的电流通路。终端电阻在这种信号系统中起到限制高频反射波形的核心作用。

在隐性状态时,信号线和电阻相对于高低轨道保持在高阻抗状态。CAN_H和CAN_L轨道的电压趋向于中立。隐性状态仅在总线上没有任何传输器宣布显性状态时出现。

在显性状态时,信号线和电阻相对于高低轨道变为低阻抗状态,因此电流能够流过电阻。CAN_H电压趋向于5V,同时CAN_L趋向于0V。

不管总线上信号是什么状态,信号线在线缆两端因为电阻的存在,相互之间总是保持低阻抗。

这个信号策略与例如RS-422/3和RS-485等等的其他平衡线路传输技术由显著的不同。RS-422/3和RS-485拥有差分线缆驱动但是差分模式下电压为一正一负。在这样的系统多路通信通常依靠在时域中支持三种状态(高电平有效、低电平有效和不活动三种状态)的介质。在CAN总线上进行多路通信只需要系统的电逻辑支持两个状态,在概念上与“由线缆构成的与门(wired AND)”网络相似。

CAN网络可以配置为使用两种不同的消息(或“帧”)格式:标准或基本帧格式(在CAN 2.0 A和CAN 2.0 B中描述)和扩展帧格式(仅由CAN 2.0 B描述)。两种格式之间的唯一区别是,“CAN基本帧”支持标识符长度为11位,“CAN扩展帧”支持标识符长度为29位,由11位标识符(“基本标识符”)和一个18位扩展(“标识符扩展”)组成。CAN基本帧格式和CAN扩展帧格式之间的是通过使用IDE位进行区分的,该位在传输显性时为11位帧,而在传输隐性时使用29位帧。支持扩展帧格式消息的CAN控制器也能够发送和接收CAN基本帧格式信息。所有的帧都以开始位(SOF)作为信息传输的起始。

CAN有4种帧类型:

  • 数据帧:包含用于传输的节点数据的帧
  • 远程帧:请求传输特定标识符的帧
  • 错误帧:由任何检测到错误的节点发送的帧
  • 过载帧:在数据帧或远程帧之间插入延迟的帧

数据帧

数据帧是唯一用于实际数据传输的帧。它有两种信息结构:

  • 基本帧格式:有11个标识符位
  • 扩展帧格式:有29个标识符位

CAN标准要求必须接受基本帧格式并可能接受扩展帧格式,但必须能承受扩展帧格式。

侦错机制

确认槽(ACK)

帧间内容

位填充

CAN低层标准

基于CAN的高层协议

CANopen电梯

安全性

开发工具

许可

参见

参考文献

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.