控制器局域网总线——CAN什么是CAN?CAN全称为ControllerAreaNetwork即控制器局域网,是国际上应用最广泛的现场总线之一;最初CAN被设计作为汽车环境中的微控制器通讯在车载各电子控制装置ECU之间交换信息形成汽车电子控制网络比如发动机管理系统变速箱控制器仪表装备电子主干系统中均嵌入CAN控制装置;一个由CAN总线构成的单一网络中理论上可以挂接无数个节点,实际应用中节点数目受网络硬件的电气特性所限制。例如当使用PhilipsP82C250作为CAN收发器时同一网络中允许挂接110个节点;CAN可提供高达1Mbit/s的数据传输速率这使实时控制变得非常容易,另外硬件的错误检定特性也增强了CAN的抗电磁干扰能力。CAN是怎样发展起来的?CAN最初出现在80年代末的汽车工业中,由德国Bosch公司最先提出。当时,由于消费者对于汽车功能的要求越来越多,而这些功能的实现大多是基于电子操作的,这就使得电子装置之间的通讯越来越复杂,同时意味着需要更多的连接信号线。提出CAN总线的最初动机就是为了解决现代汽车中庞大的电子控制装置之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。1993年,CAN已成为国际标准ISO11898(高速应用)和ISO11519(低速应用)。CAN是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达到10Km时,CAN仍可提供高达50Kbit/s的数据传输速率。由于CAN总线具有很高的实时性能,因此,CAN已经在汽车工业、航空工业、工业控制、安全防护等领域中得到了广泛应用。CAN总线的主要特点它是一种多主总线,通信介质可以是双绞线、同轴电缆和光纤,通信距离最远可达10km(5kb/s),最高速率可达1Mb/s(40m).CAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。采用这种方法的优点可使网络内的节点个数在理论上不受限制,数据块的标识码可由11位或29位二进制数组成,因此可以定义211或229个不同的数据块,让各节点通过滤波的方法分别接收指定标识码的数据。这种按数据块编码的方式,还可使不同的节点同时接收到相同的数据,这一点在分布式控制系统中非常有用。CAN总线的特点数据段长度最多为8个字节,可满足通常工业领域中控制命令、工作状态及测试数据的一般要求。同时,8个字节不会占用总线时间过长,从而保证了通信的实时性。在每帧中都有CRC校验及其它检错措施,保证了数据通信的可靠性。CAN总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。CAN总线上任意节点可在任意时刻主动地向网络上其它节点发送信息而不分主次,因此可在各节点之间实现自由通信。网络上的节点可以定义成不同的优先级,利用接口电路中线与功能,巧妙地实现无破坏性的基于优先权的仲裁网络上的节点在错误严重的情况下,具有自动关闭总线的功能CAN是怎样工作的?CAN通讯协议主要描述设备之间的信息传递方式,CAN层的定义与开放系统互连模型OSI一致。每一层与另一设备上相同的那一层通讯实际的通讯发生在每一设备上相邻的两层,而设备只通过模型物理层的物理介质互连。CAN的规范定义了模型的最下面两层:数据链路层和物理层。应用层协议可以由CAN用户定义成适合特别工业领域的任何方案。已在工业控制和制造业领域得到广泛应用的标准是DeviceNet,这是为PLC和智能传感器设计的;在汽车工业许多制造商都应用他们自己的标准。CAN的工作原理当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当几个站同时竞争总线读取时,这种配置十分重要。CAN总线的报文发送和接收。当一个站要向其它站发送数据时,该站的CPU将要发送的数据和自己的标识符传送给本站的CAN芯片,并处于准备状态;当它收到总线分配时,转为发送报文状态。CAN芯片将数据根据协议组织成一定的报文格式发出,这时网上的其它站处于接收状态。每个处于接收状态的站对接收到的报文进行检测,判断这些报文是否是发给自己的,以确定是否接收它。由于CAN总线是一种面向内容的编址方案,因此很容易建立高水准的控制系统并灵活地进行配置。我们可以很容易地在CAN总线中加进一些新站而无需在硬件或软件上进行修改。当所提供的新站是纯数据接收设备时,数据传输协议不要求独立的部分有物理目的地址。它允许分布过程同步化,即总线上控制器需要测量数据时,可由网上获得,而无须每个控制器都有自己独立的传感器。CAN的一些基本概念报文总线上的信息以不同的固定报文格式发送,但长度受限。当总线空闲时任何连接的单元都可以开始发送新的报文。信息路由在CAN系统里,节点不使用任何关于系统配置的信息(比如站地址)。以下是几个重要的概念:◎系统灵活性:不需要改变任何节点的应用层及相关的软件或硬件,就可以在CAN网络中直接添加节点。◎报文路由:报文的内容由识别符命名。识别符不指出报文的目的地,但解释数据的含义。因此网络上所有节点都可以通过报文滤波确定是否应对该数据做出反应。◎多播:由于引入了报文滤波的概念,任何数目的节点都可以接受报文,并同时对此报文做出反应。◎数据连贯性:在CAN网络内,可以确保报文同时被所有的节点接受(或同时不接受)。因此系统的连贯性是通过多播和错误处理的原理实现的。报文总线上的信息以不同的固定报文格式发送,但长度受限。当总线空闲时任何连接的单元都可以开始发送新的报文。位速率:不同的系统,CAN的速度不同。可是在一个给定系统中,位速率是唯一的,并且是固定的。优先权:在总线访问期间,识别符定义一个静态的报文优先权。远程数据请求:通过发送远程帧,需要数据的节点可以请求另一节点发送相应的数据帧。数据帧和相应的远程帧是由相同的标识符命名的。多主机:总线空闲时,任何单元都可以开始传送报文。具有较高优先权报文的单元可以获得总线访问权。仲裁:只要总线空闲,任何单元都可以开始发送报文。如果2个或2个以上的单元同时开始传送报文,那么就会有总线访问冲突。通过使用识别符的位形式仲裁就可以解决冲突。仲裁的机制确保信息和时间均不会损失。当具有相同识别符的数据帧和远程帧同时初始化时,数据帧优先于远程帧。仲裁期间,每一个发送器都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是“隐性”电平而监控到“显性”电平(见总线值),那么该单元就失去了仲裁,必须退出发射状态。安全性:为了获得最安全的数据发送,CAN的每一个节点均采取了很强的措施进行错误检测、错误标定及错误自检。错误检测:为了检测错误,必须采取以下的措施:◎监视(发送器对发送位的电平与被监控的总线电平进行比较)◎循环冗余检查◎位填充◎报文格式检查错误检测的执行:错误检测的机制要具有以下的属性:◎检测到所有的全局错误◎检测到发送器所有的局部错误◎可以检测到报文里多达5个的任意分布错误◎检测到一个报文长度低于15位的突发性错误◎检测到一个报文里奇数个的错误对于没有被检测到的错误报文,其残余错误可能性概率低于报文错误率4.7×10-11。错误标定和恢复时间:任何检测到错误的节点会标志出已损坏的报文。此报文会失效并自动开始重新传输。如果不再出现新错误的话,从检测到错误到下一报文的传送开始为止,恢复时间最多为29个位的时间。故障界定:CAN节点能够把永久故障和短暂扰动区分开,永久故障的节点会被关闭。连接:CAN串行通讯链路是可以连接许多单元的总线。理论上,可连接无数多的单元。但由于实际上受延迟时间或总线线路上电气负载的影响,连接单元的数量是有限的。单通道:总线是由单一进行双向位信号传送的通道组成。通过此通道可以获得数据的再同步信息。要使此通道实现通讯,有许多方法可以采用,如使用单芯线(加上接地)、2条差分线、光缆等。这本技术规范不限制这些实现方法的使用,即未定义物理层。总线值:总线可以具有两种互补的逻辑值之一:“显性”位和“隐性”位同时传送时,总线的结果值为“显性”。比如,在执行总线的“线与”时,逻辑0代表显性等级,逻辑1代表隐性等级。本技术规范不给出这些逻辑电平的物理状态(如电压和光)。应答:所有的接收器检查报文的连贯性。对于连贯的报文,连接器应答;对于不连贯的报文,接收器做出标志。睡眠模式/唤醒:为了减少系统电源的功率消耗。可以将CAN器件设为睡眠模式以便停止内部活动及断开与总线驱动器的连接。CAN器件可由总线激活,或系统内部状态而被唤醒。唤醒时,虽然传输层要等待一段时间使系统振荡器稳定,然后还要等待一段时间直到与总线活动同步(通过检查11个连续的隐性的位),但在总线驱动器被重新设置为“总线在线”之前,内部运行已重新开始。为了唤醒系统上正处于睡眠模式的其他节点,可以使一特殊的唤醒报文,此报文具有专门的、最低等级的识别符。(rrrrrrdrrrr;r=“隐性”d=“显性”)CAN具有以下的属性报文的优先权保证延迟时间设置灵活时间同步的多点接收系统宽数据的连贯性多主机错误检测和标定只要总线一处于空闲就自动将破坏的报文重新传输将节点的暂时性错误和永久性错误区分开来并且可以自动关闭错误的节点CAN总线的网络结构CAN总线也是建立在ISO参考模型基础上的,不过只采用了其中最关键的两层,即物理层和数据链路层.物理层的主要内容是规定通信介质的机械、电气、功能和规程特性数据链路层的主要功能是将要发送的数据进行包装,即加上差错校验位、数据链路协议的控制信息、头尾标记等附加信息组成数据帧,从物理信道上发送出去,在接收道数据帧后,再把附加信息去掉,得到通信数据—媒体访问控制子层MAC:传输规则—逻辑控制子层LLC:报文的滤波和报文的处理CAN总线的物理层和数据链路层的功能在CAN控制器中完成CAN--bus规范CAN-bus规范(Version2.0)CAN2.0A:CAN标准报文格式CAN2.0B:CAN标准报文格式和扩展报文格式CAN-bus技术规范技术规范的目的定义数据链路层定义CAN协议在周围各层中所发挥的作用帧格式二种不同的CAN帧CAN规范2.0B中引入第二种报文格式标准帧和扩展帧具有11位标识符的CAN帧称为:标准帧具有29位标识符的CAN帧称为:扩展帧规定CAN控制器必须有一个11位的标志符,同时在2.0B版本中规定CAN控制器的标志符长度可以是11位或29位。遵循CAN2.0B协议的CAN控制器可以发送和接收11位标识符的标准格式报文或29位标识符的扩展格式报文。如果禁止CAN2.0B,则CAN控制器只能发送和接收11位标识符的标准格式报文,而忽略扩展格式的报文结构但不会出现错误帧类型报文传输由以下4个不同的帧类型所表示和控制:数据帧:数据帧携带数据从发送器至接收器。远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。错误帧:任何单元检测到一总线错误就发送错误帧。过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一个附加的延时。数据帧(或远程帧)通过帧间空间与前述各帧分开。1、数据帧数据帧由7个不同的位场组成:帧起始仲裁场控制场数据场CRC场应答场帧结尾数据场的长度可以为0。数据帧结构扩展帧格式标准帧格式:具有11位标识符扩展帧格式:具有29位标识符两种帧格式的区别通过“控制场”(ControlField)中的“识别符扩展”位(IDEbit)来实现两种帧格式可出现