您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第10章 K60的CAN总线开发方法
第10章K60的CAN总线开发方法本章导读:CAN总线是一种应用广泛的串行通信协议之一,主要应用于对数据完整性有严格需求的汽车电子和工业控制领域。由于CAN总线具有差分接收与发送的特点,使其在抗干扰以及错误检测等方面的性能大大提高,成为了诸多工业测控领域中首选的现场总线。本章主要知识点有①CAN总线的通用知识;②CAN总线基本的硬件连接与技术特点;③Kinetis系列中K60的FlexCAN模块介绍与编程要点;④FlexCAN驱动构件设计与实现;⑤CAN驱动构件测试实例,包括回环测试和非回环测试。10.1CAN总线基础知识10.1.1CAN总线协议的历史概况控制器局域网(ControllerAreaNetwork,CAN),最早出现于20世纪80年代末,是德国Bosch公司为简化汽车电子中信号传输方式并减少日益增加的信号线而提出的。CAN总线是一个单一的网络总线,所有的外围器件都可以挂接在该总线上。1991年9月Bosch公司制定并发布了CAN技术规范Version2.0。该技术规范包括A和B两部分,A部分给出了曾在CAN技术规范Version1.2中定义的CAN报文格式,而B部分给出了标准的和扩展的两种报文格式。为促进CAN技术的发展,1992年在欧洲成立了CiA(CANinAutomation)。在CiA的努力推广下,CAN技术在汽车电子、电梯控制、安全监控、医疗仪器、船舶运输等方面均得到了广泛的应用,目前已经成为国际上应用最广泛的现场总线之一。在CAN技术未得到广泛应用之前,在测控领域的通信方式选择中,大多数设计者采用RS-485作为通信总线。但RS-485存在明显的缺点:一主多从、无冗余;数据通信为命令响应,传输率低;错误处理能力弱。而CAN总线技术可以克服这些缺点。CAN网络上的任何一个节点均可作为主节点主动地与其他节点交换数据;CAN网络节点的信息帧可以分出优先级,这为有实时性要求的控制提供了方便;CAN的物理层及数据链路层有独特的设计技术,使其在抗干扰以及错误检测等方面的性能大大提高。CAN的上述特点使其成为诸多工业测控领域中首选的现场总线。10.1.2CAN硬件系统的典型电路由于CAN控制器只是协议控制器,不能提供物理层驱动,所以在实际使用时每一个CAN节点物理上要通过一个收发器与CAN总线相连。每个CAN模块有发送CANTX和接收CANRX两个引脚。CANTX发送串行数据到CAN总线收发器,同时CANRX从CAN总线收发器接收串行数据。常用的CAN收发器有Philips公司的PCA82C250、TI公司的SN65HVD230等。1.最简明的CAN硬件连接方法最简明的CAN硬件连接方法如图10-1,把所有的CANTX线路经过快速二极管(如1N4148等)连接至数据线(以免输出引脚短路),CANRX输入直接连接到这条数据线,数据线由一个上拉电阻拉至+5V,以产生所需要的“1”电平。注意,该电路中各节点的地是接在一起的。这个电路最大线长限制在1m左右,主要用于在电磁干扰较弱环境下的近距离通信。图10-1无须CAN收发器芯片的电路连接进行CAN通信节点调试时,可以利用这个简单且易于实现的电路。另外,可以利用该电路理解CAN总线的通信机制。2.常用的CAN硬件系统的组成常用的CAN硬件系统的组成如图10-2所示。图10-2常用的CAN硬件系统组成注意:CAN通信节点上一般需要添加120Ω终端电阻。每个CAN总线只需要两个终端电阻,分别在主干线的两个端点,支线上的节点不必添加。下面给出图10-2的实际电路。3.带隔离的典型CAN硬件系统电路Philips公司的CAN总线收发器PCA82C250能对CAN总线提供差动发送功能并对CAN控制器提供差动接收功能。在实际应用过程中,为了提高系统的抗干扰能力,CAN控制器引脚CANTX、CANRX和收发器PCA82C250并不是直接相连的,而是通过由高速光耦合器6N137构成的隔离电路后再与PCA82C250相连的,这样可以很好地实现总线上各节点的电气隔离。一个带隔离的典型CAN硬件系统电路如图10-3所示。图10-3带隔离的典型CAN硬件系统电路该电路连接需要特别注意以下几个问题。(1)6N137部分的电路所采用的两个电源VCC1和VCC2需完全隔离,否则,光耦将达不到完全隔离的效果。可以采用带多个5V输出的开关电源模块实现。(2)PCA82C250的CANH和CANL引脚通过一个5Ω的限流电阻与CAN总线相连,保护PCA82C250免受过流的冲击。PCA82C250的电源管脚旁应有一个0.1μF的去耦电容。Rs引脚为斜率电阻输入引脚,用于选择PCA82C250的工作模式(高速/斜率控制/待机),脚上接有一个下拉电阻,电阻的大小可根据总线速率适当的调整,其值一般在16〜140kΩ之间,图10-3中选用47kΩ。关于电路相连的更多细节请参见6N137手册以及PCA82C250手册。4.不带隔离的典型CAN硬件系统电路在电磁干扰较弱的环境下,隔离电路可以省略,这样CAN控制器可直接与CAN收发器相连,如图10-4所示,图中所使用的CAN收发器为TI公司的SN65HVD230。图10-4不带隔离的典型CAN硬件系统电路10.1.3CAN总线的有关基本概念CAN通信协议主要描述设备之间的信息传递方式。CAN各层的定义与开放系统互连模型(0SI)—致,每一层与另一设备上相同的那一层通信。实际的通信发生在每一设备上相邻的两层,而设备只通过物理层的物理介质互连。在CAN规范的ISO参考模型中,定义了模型的最下面两层:数据链路层和物理层,它们是设计CAN应用系统的基本依据。规范主要是针对CAN控制器的设计者而言,对于大多数应用开发者来说,只需对CANV2.0版技术规范的基本结构、概念、规则有一般了解,知道一些基本参数和可访问的硬件即可。下面给出与CAN通信接口编程相关的部分术语。1.CAN总线上的数据表示CAN总线由单一通道(SingleChannel)组成,借助数据再同步实现信息传输。CAN技术规范中没有规定物理通道的具体实现方法,物理层可以是单线(加地线)、两条差分线、光纤等。实际上大多数使用双绞线,利用差分方法进行信号表达,它是一种半双工通信方式。CAN总线上用显性(Dominant)和隐性(Recessive)分别表示逻辑0和逻辑1。若不同控制器同时向总线发送逻辑0和逻辑1时,总线上出现逻辑0(相当于逻辑与的关系)。物理上,现行的CAN总线大多使用二线制作为物理传输介质,使用差分电压表达逻辑0和逻辑1。设两条信号线分别被称为CAN_H和CAN_L,如图10-5所示。在隐性状态(即逻辑1)时,VCAN_H和VCAN_L被固定在平均电压2.5V左右,电压差(Vdiff=VCAN_H-VCAN_L)近似于0。在显性状态(即逻辑0)时,VCAN_H比VCAN_L髙,此时通常VCAN_H=3.5V,VCAN_L=1.5V,电压差(Vdiff=VCAN_H-VCAN_L)在2V左右。在总线空闲或隐性位期间,发送隐性位。图10-5总线数据表示2.报文、信息路由、位速率、位填充报文(Message):是指在总线上传输的固定格式的信息,其长度是有限制的。当总线空闲时,总线上任何节点都可以发送新报文。报文被封装成帧(Frame)的形式在总线上传送,具体定义见10.1.4节。信息路由(InformationRouting):在CAN系统中,CAN不对通信节点分配地址,报文的寻址内容由报文的标识符ID指定。总线上所有节点可以通过报文过滤的方法来判断是否接收报文。位速率(BitRate):是指CAN总线的传输速率。在给定的CAN系统中,位速率是固定唯一的。CAN总线上任意两个节点之间的最大传输距离与位速率有关,表10-1列出了距离与位速率的对应关系,这里的最大距离是指在不使用中继器的情况下两个节点之间的距离。表10-1CAN总线上任意两节点最大距离及位速率对应表位填充(BitStuffing):是为防止突发错误而设定的功能。当同样的电平持续5位时,则添加一个位的反型数据,即连续出现5个“0”时,需要添加一个“1”。连续出现5个“1”时,需要添加一个“0”。3.多主机、标识符、优先权、仲栽多主机(Multimaster):CAN总线是一个多主机(Multimaster)系统,总线空闲时,总线上任何节点都可以开始向总线上传送报文,但只有最高优先权报文的节点可获得总线访问权。CAN通信链路是一条可连接多节点的总线。理论上,总线上节点数目是无限制的,实际上,节点数受限于延迟时间和总线的电气负载能力。例如,当使用PhilipsPCA82C250作为CAN收发器时,同一网络中一般最多允许挂接110个节点。标识符ID:CAN节点的唯一标识。在实际应用时,应该给CAN总线上的每个节点按照一定规则分配一个唯一的ID。每个节点发送数据时,发送的报文帧中含有发送节点的ID信息。在CAN通信网络中,CAN报文以广播方式在CAN网络上发送,所有节点都可以接收到报文,节点通过判断接收到的标识符ID决定是否接收该报文。报文标识符ID的分配规则一般在CAN应用层协议实现(比较著名的CAN应用层协议为CANopen协议、DeviceNet等)。由于ID决定报文发送的优先权,因此ID的分配规则在实际应用中必须给予重视。一般可以用标识符的某几位代表发送节点的地址。接收到报文的节点可以通过解析接收报文的标识符ID,来判断该报文来自哪个节点,属于何种类型的报文等。下面给出CANopen协议最小系统配置的一个ID分配方案,供实际应用时参考。该分配方案是一个面向设备的标识符分配方案,该方案通过4位功能代码区分16种不同类型的报文,有7位节点地址,可表达128个节点。但要注意:在CAN协议中,要求ID的高7位不能同时为1。报文标识符ID的分配方法应遵循以下原则:在同一系统中,必须保证节点地址唯一,这样每个报文的ID也就唯一了。优先权(Priorities):在总线访问期间,报文的标识符ID定义了一个静态的报文优先权。在CAN总线上发送的每一个报文都具有唯一的一个11位或29位的标识符ID,在总线仲裁时,显性位(逻辑0)的优先权高于隐性位(逻辑1),从而标识符越小,该报文拥有越高的优先权,因此一个拥有全0标识符的报文具有总线上的最高级优先权。当有两个节点同时进行发送时,必须通过“无损的逐位仲裁”方法来使得有最高优先权的报文优先发送。仲裁(Arbitration):总线空闲时,总线上任何节点都可以开始发送报文,若同时有两个或两个以上节点开始发送,总线访问冲突运用逐位仲裁规则,借助于标识符ID解决。仲裁期间,每一个发送器都对发送位电平与总线上检测到的电平进行比较,若相同,则该节点继续发送。当发送的是一个“1”而监视到的是一个“0”(见图10-1)时,该节点失去仲裁,退出发送状态。举例说明,若某一时刻有两个CAN节点A、B同时向总线发送报文,A发送报文的ID为0b00010000000,B发送报文的ID为0b01110000000。由于节点A、B的ID的第10位都为“0”,而CAN总线是逻辑与的,因此总线状态为“0”,此时两个节点检测到总线位和它们发送的位相同,因此两个节点都认为是发送成功,都继续发送下一位。发送第9位时,A发送一个“0”,而B发送一个“1”,此时总线状态为“0”。此时A检测到总线状态“0”与其发送位相同,因此A认为它发送成功,并开始发送下一位。但此时B检测到总线状态“0”与其发送位不同,它会退出发送状态并转为监听方式,且直到A发送完毕,总线再次空闲时,它才试图重发报文。4.远程数据请求、应答远程数据请求(RemoteDataRequest):当总线上某节点需要请求另一节点发送数据时,在这种情况下,在CAN总线协议术语中叫远程数据请求(RemoteDataRequest)。需要远程数据请求时,可通过发送远程帧实现,有关帧内容见10.1.4节。应答(Acknowledgment):所有接收器对接收到的报文进行一致性(Consistenc
本文标题:第10章 K60的CAN总线开发方法
链接地址:https://www.777doc.com/doc-4228470 .html