李小龙,宋 欣,徐 强,宋占伟
(1.吉林大学电子科学与工程学院,长春130012;2.吉林省启明软件园企业孵化有限公司结构部,长春130117)
随着汽车电子应用的不断发展,电控单元的增多导致布线越来越复杂。Bosch公司为解决车载电控单元之间布线困难和保证数据实时交互,在20世纪80年代提出了CAN(Controller Area Networks)总线,这是一种多主串行总线,具有实时性强,传输率高,抗干扰性强等性能。CAN总线作为现场结构总线[1]广泛应用于航天工业,汽车电子,工业自动化等方面。为解决车线束过多导致的布线困难,实现电控单元之间信息快速交换,增强车载电控单元的安全性和可靠性,利用CAN总线连接车载电控单元的技术得到了很大的发展。
目前,在汽车车载CAN总线以单总线结构为主,恶劣环境或猛烈冲撞导致的汽车CAN总线线束的松动或断裂,不能保证汽车内部各节点之间稳定实时的通信。故笔者采用CAN总线冗余的思想[2],并移植了μC/OS-Ⅱ[3]实时操作系统,确保在CAN总线网络能实时通信的基础上为主CAN总线备用一个辅助的CAN总线,保证车载CAN网络系统实时、稳定、可靠的通信。
由于汽车内部各电控单元节点(ECU:Electronic Control Unit)对通信的实时性要求不同,所以不同节点的信息传输速率也不完全相同。汽车内部的CAN总线网络主要分为动力系统、舒适系统及车身系统。动力系统连接实时性较高的电控单元,如发动机控制、变速器控制和防抱死控制等,一般波特率为500 kbits/s;车身及舒适系统连接实时性要求不太强的电控单元,如安全控制、空调控制和娱乐终端等,一般波特率为250 kbit/s或125 kbit/s。
常用的汽车内部CAN总线网关控制器可根据电控单元节点对实时性的要求分出高低两种速度CAN总线,此时网关能作为一个中继器的作用,保证高低速CAN总线上每个节点之间都能进行点对点或广播通信。常用CAN总线网关控制器原理框图如图1所示。
图1 常用网关控制器原理图Fig.1 General CAN bus gateway controller principle diagram
总线冗余可分为全部冗余和部分冗余。CAN总线网络主要由CAN总线线束、微处理器、CAN控制器和CAN收发器4部分组成。全部冗余就是对4个部分备份一套CAN网络;部分冗余只备份其中某个部分。根据每个部分的工作状态,冗余也可以分为热冗余和冷冗余。如CAN控制器的热冗余,有主辅CAN控制器之分,系统正常工作时,主辅CAN控制器同时工作则为热冗余,此时并不需要在主CAN控制器故障时进行数据重发,因为他们同时工作,数据是同步的;如果此时系统正常运行,主CAN控制器工作,辅CAN控制器处于睡眠或不工作状态,则为冷冗余,数据此时并没有传到辅助的CAN控制器,因此需要对辅助的CAN控制器进行数据重发保证数据同步,显然这无疑会增加软件设计的难度。如果在汽车CAN总线网络中采用完全冗余的设计方案,会造成汽车制造成本的增加和汽车内部空间的浪费。
随着汽车技术快速发展及汽车车载CAN节点微处理器的功能不断强化和完善,目前汽车关键的CAN节点(如发动机控制ECU)都有自制功能。因此,基于以上因素的考虑和总线冗余的可靠性分析[4],本设计采用部分冗余中的总线冗余网关控制器设计,即为高/低速CAN总线节点备份一个辅助的高/低速CAN总线,并采用热冗余的方式。当系统正常工作时,主高/低CAN总线处于正常的工作状态,辅助的高/低CAN总线处于监听状态,在主高/低速CAN总线出现故障时,网关控制器可以及时检测到故障,并确认主总线是否脱离CAN网络,及时切换到辅助的高/低速CAN总线。本系统网关控制器硬件框图如图2所示,为便于实验室组网测试系统性能,LPC2294作为网关控制器的中控节点,各高/低速节点采用51单片机CAN板,其硬件框图如图3所示。其中51单片机CAN板包括模拟量、开关量、数字量的输入,电机驱动和LCD显示的输出。51单片机CAN板的CAN模块部分,由STC89C52作为微处理器,SJA1000作为CAN总线控制器,PCA82C250作为CAN总线收发器。中控节点和各普通节点一起构成CAN总线网络,模拟汽车内部各个ECU节点之间的相互通信,用于组网测试本系统的性能。
图2 系统网关控制器硬件框图Fig.2 Gateway controller hardware system block diagram
图3 高/低速CAN节点硬件框图Fig.3 High/low speed CAN node hardware block diagram
CAN总线网关控制器模块选用Philips公司的ARM7核LPC2294作为处理器[5],外围扩展SRAM和NORFLASH作为数据和程序存储器,EEPROM和SD卡供处理器在掉电情况的数据存储,RS232便于连接PC烧写程序,按键作为输入控制,LCD作为网关处理器的数据和状态显示。CAN接口方面选用PCA82C250作为CAN总线的收发器。
1.2.1 网关控制器LPC2294
LPC2294是基于支持实时仿真和跟踪的32位ARM7TDMI-STM CPU,内置4路CAN端口(CAN0~CAN3)并带有先进的CAN验收滤波器的查找表机制,以及宽范围的串行通信接口,它们非常适合于通信网关、协议[6]。用LPC2294作为网关控制器,用于高低速CAN总线节点间通信的中继转发,用LPC2294的CAN0~CAN34路CAN接口监听4路CAN总线运行状态并检测总线故障和总线切换,并对CAN总线的各个节点进行广播或点对点通信。笔者利用CAN1端口作为主高速CAN总线接口,CAN2端口作为主低速CAN总线接口,CAN0端口作为辅高速CAN总线接口,CAN3端口作为辅低速CAN总线接口。
1.2.2 CAN收发器PCA82C250
CAN收发器PCA82C250主要提供CAN协议控制器与物理总线之间的接口,具有对CAN总线的差动发送和接收能力,收发器完全兼容CAN2.0B和ISO 11898-1规范,具有抗干扰及保护总线的能力,并有高速,斜率控制和待机3种工作方式可选[7]。
1.2.3 LCD显示和按键
用SMG240128A液晶显示屏作为整个CAN网络中控状态显示。SMG240128A内嵌T6963C液晶控制驱动器,能工作在字符、图形、字符和图形组合模式,能很好地实现液晶屏的控制和显示。利用SMG240128A和按键组成人机交互的图形界面,方便在显示器上显示4路总线的运行状态。
汽车内部CAN总线网络有的电控单元对实时性要求很高,选用实时性的嵌入式μC/OS-Ⅱ操作系统,并裁剪移植到ARM7芯片LPC2294上。此操作系统是网关控制器进行高低速节点间信息中继转发、主辅总线运行状态切换和对CAN总线的各个节点进行广播或点对点通信的运行平台。
首先,进行网关控制器系统初始化,由μC/OS-Ⅱ操作系统的初始化,微处理器和外部扩展存储器初始化、LCD等设备初始化[7]组成,为执行网关控制器的程序做准备。
然后CAN总线初始化[8],由系统硬件模块的初始化和设置验收过滤寄存器的初始化两部分构成。系统初始化流程图如图4所示。
图4 系统初始化流程图Fig.4 Flowchart of system initialization
最后在μC/OS-Ⅱ操作系统平台上加载CAN总线网关控制器的3个任务调度,以及按检测按键的输入和在LCD液晶上显示CAN总线网络运行状态。本设计主要是针对网关控制器的设计,其关键点在于网关控制器的3个主要任务:对高低速CAN总线节点信息中继转发、监听4个CAN总线故障状态并进行总线切换、同时对CAN总线的各个节点进行广播或点对点通信。其中对于网关控制器本身相当于CAN总线网络上的一个中控节点,以响应中断的方式收发数据,在CAN节点的收发程序正常运行时,能保证总线上其他节点的广播和点对点通信,在此不再详述。
汽车网关控制器中有两个不同通信速率的网段,一路波特率设为500 kbit/s的高速CAN主辅网络,另一路为波特率设为125 kbit/s的低速CAN主辅网络。当电控单元中的高速网络节点需要访问低速网络节点或低速网络节点需要访问高速网络节点时,需把信息发送到网关控制器判别是否进行信息中继转发。因网关控制器需要监控总线的状态,LPC2294内置的CAN控制器对于CAN总线上信息可通过查表进行验收过滤[9],相比传统的SJA1000对信息验收过滤,其验收过滤的效率更高,能减轻CAN总线的负载。该设计中,对低速CAN总线节点和高速CAN总线节点ID进行有规律的设置,方便LPC2294判别是否对接收到的CAN信息进行中继转发。中继转发的软件流程图如图5所示。高速CAN总线节点(假如有20个节点)的ID设为0x01-0x14,低速CAN总线节点(假如有30个节点)ID设为0x20-0x3d。在程序设计时可对比接收信息的目的地址和源地址是否处于同一ID段,以此判别网关控制器是否需要进行信息转发。
图5 网关控制器中继转发软件流程图Fig.5 Flowchart of gateway relay forwarding
在网关控制器的总线故障切换的设计中,由于采用总线热冗余方式,为主高/低速CAN总线备用一个辅助的高/低速CAN总线,以保证CAN总线网络通信的稳定性和可靠性。主要工作任务是CAN总线故障检测以及主辅间及时自动切换。在判别主高/低总线故障时,主要检测LPC2294内置CAN控制器中是否错误警告寄存器的状态以及总线关闭状态。当CAN总线网络正常工作时,主高速CAN1和主低速CAN2正常运行,辅高速CAN0和辅低速CAN3处于监听状态。当主高速CAN总线CAN1或主低速CAN2总线故障导致LPC2294内置CAN控制器错误警告寄存器产生错误报警中断时,先判断总线此时是否关闭,若关闭,则切换程序启动辅助的CAN总线CAN0和CAN3,以完成原有主CAN总线的通信任务,并且对故障总线进行处理。此时主CAN总线如果有数据的发送或接收,为确保数据不丢失,辅助的高/低总线CAN0/CAN3的数据帧要重新接收或发送[10]。如果主CAN总线没有关闭,只是错误警告寄存器处于积极错误状态时,没有达到CAN控制器错误警告寄存器设置的最大错误计数阈值(一般设为96),通过周立功fullcan函数库里软件程序语句CanBufOffLinePrg(CanNum)使LPC2294的主高CAN1或主低CAN2端口与发生故障的CAN总线脱离,用软件复位语句SoftRstCAN(CanNum)复位该路CAN总线端口,最后重新初始化该路CAN总线,使其继续完成原有数据通信。总线故障切换流程图如图6所示。
图6 总线故障切换流程图Fig.6 Flowchart of gateway bus fault switching
为验证设计系统的性能,该设计将PC和USBCANII(双CAN接口)一起接入本CAN总线网络,分析整个系统CAN总线通信状态。用USBCANII的ch1和ch2通道检测主高速CAN1和主低速CAN2端口收发数据正常(见图7a);网关控制器的中继转发功能:CAN1转发CAN2收到的数据或CAN2转发CAN1收到的数据工作正常(见图7b)。用USBCANII的ch1和ch2通道接到LPC2294的CAN1(CAN2)端口和CAN0(CAN3)端口检测高(低)速总线切换,总线故障切换都基本工作正常。其中高速总线切换如图7c所示,主高速CAN1(ch1通道)在第6、7帧故障,总线切换到辅高速CAN0(ch2通道)工作。
图7 USBCANII检测Fig.7 USBCANII detecting
该设计中的汽车车载CAN总线网关控制器相比以往的网关控制器,采用总线冗余思想,避免了因汽车内部总线松动或断裂导致的CAN总线网络通信异常。采用低功耗、低成本的LPC2294芯片,在不处理复杂协议的情况下,一个CAN口吞吐达最高负荷5 000帧/s时,速度完全能胜任4个CAN通道,提高本网关处理数据的性能;移植了实时性的操作系统μC/OS-Ⅱ,对网关控制器的任务进行实时调度,能避免程序陷入无限死循环。为主高/低CAN总线备份辅助的CAN总线,能在主CAN总线出现故障时,及时切换到辅助的CAN总线,使CAN总线仍然稳定可靠通信,很适用于汽车内部CAN总线网络。
[1]来清民.手把手教你学CAN总线[M].北京:北京航空航天大学出版社,2010.LAI Qingmin.Teach You How to Learn CAN Bus[M].Beijing:Beihang University Press,2010.
[2]苏虎平,沈三民,刘文怡,等.基于冗余CAN总线的实时通信系统的设计[J].总线与网络,2013,34(1):26-29.SU Huping,SHEN Sanmin,LIU Wenyi,et al.Real-Time Communication System Based on Redundancy CAN Bus [J].Automation & Instrumentation,2013,34(1):26-29.
[3]邵贝贝.嵌入式系统中的双核技术[M].北京:北京航空航天大学出版社,2008.SHAO Beibei.Dual Core Technology of the Embedded System[M].Beijing:Beihang University Press,2008.
[4]郑晓芸.车载雷达伺服系统中冗余CAN总线技术和研究[D].南京:南京理工大学南京电子技术研究所,2012.ZHENG Xiaoyun.Research on Redundant CAN Bus Technology Applied to Servo System of Vehicle-Borne Radar [D].Nanjing:Nanjing Institute of Electronic Technology,Nanjing University of Science and Technology,2012.
[5]周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005.ZHOU Ligong.Foundation Course of ARM Embedded System[M].Beijing:Beihang University Press,2005.
[6]PHLIPS Semiconductors.LPC2119/2129/2194/2292/2294 USER MANUAL [EB/OL]. [2004-02-14].http://www.zlgmcu.com.
[7]张庆祥,宋占伟,夏茂盛.基于短距通信的嵌入式CAN网络测试系统设计[J].吉林大学学报:信息科学版,2012,30(3):240-244.ZHANG Qingxiang,SONG Zhanwei,XIA Maosheng.Embedded Test System of CAN-BusBased on Wireless Communication[J].Journal of Jilin University:Information Science Edition,2012,30(3):240-244.
[8]周立功.ARM嵌入式系统实验教程(三)[M].北京:北京航空航天大学出版社,2005.ZHOU Ligong.Experimentation Course of ARM Embedded System(3)[M].Beijing:Beihang University Press,2005.
[9]LPC2000系列 32 位 ARM 微控制器的 CAN 接收过滤设置 [EB/OL].(2004-06-08).[2014-04-23].http://www.zlgmcu.com.The CAN Receiving and Filtering Settings of LPC2000 Series 32-bit ARM Microcontroller[EB/OL].(2004-06-08). [2014-04-23].http://www.zlgmcu.com.
[10]卢玉传,杜志歧,樊江滨,等.车载双路CAN总线冗余网关的设计[J].车辆与动力技术,2012,125(1):45-50.LU Yuchuan,DU Zhiqi,FAN Jiangbin,et al.Design of Dual CAN Bus Redundancy Gateway on Vehicle [J].Vehicle &Power Technology,2012,125(1):45-50.