引言
日益严格的法规以及对安全与舒适性的更高要求使得电子设备在汽车上的应用越来越广泛,线束也逐渐增多,不仅使车内可利用的空间变小、车身质量增加,而且由于线路复杂,故障率上升,还会给维修带来很大的不便。而使用车用现场总线技术建立车身控制局域网,对这些电器设备进行管理和控制,实现分布式多路传输,可以大大简化汽车的线束,减轻线束的质量,从而提高系统工作的可靠性。CAN总线技术正是顺应了这一趋势,以其硬件连接简单,可靠性好,实时性和性价比高等优势,渐渐被众多的半导体厂家以及汽车企业所接受,并广泛应用在汽车领域。而LIN总线成本低,在不需要CAN总线的带宽和多功能的场合(诸如车灯、车窗与组合开关之间的通信),使用LIN总线可大大降低成本。
目前,众多半导体厂商(例如Freescale、Infineon、Philips、Fujitsu等)都纷纷推出了各自的具有CANLIN功能的微控制器芯片。本设计使用的是内部集成CAN控制器和ESCI模块的Freescale公司HC08系列MC68HC908GZ32微控制器。
1 CANLIN总线技术简介
CAN(Controller Area Network)即控制器局域网[1],是德国Bosch公司为解决现代车辆中众多的控制和数据交换问题而开发的一种现场总线通信结构。其最高速率可达1 Mbps(40 m内),以多主方式工作。与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性,是目前使用最广泛的一种汽车网络。CAN总线具有以下技术特性:
① CAN总线遵从ISO/OSI模型,采用了其中的物理层、数据链路层与应用层。采用双绞线,通信速率最高可达到1 Mbps(40 m内),直接传输距离最远可达10 km(5 kbps)。同一段总线内最多可接110个设备。
② CAN总线的信号传输采用短帧结构,每一帧有效字节数为8个。因而传输时间短,受干扰的概率低。当节点发生严重错误时,具有自动关闭的功能,切断该节点与总线的联系,使总线上其他节点不受影响,具有很强的抗干扰能力。
③ CAN总线支持多主工作方式,网络上任一节点均可在任何时候主动向其他节点发送信息,支持点对点、一对多点和全局广播方式接收/发送数据,而优先级低的节点则主动停止发送,从而避免了总线冲突。
LIN(Local Interconnect Network,本地互连网络)协议是一种建立在通用的SCI/UART硬件接口上,并将分布在车辆不同位置的智能传感器和执行器连接到车内主体网络的单总线,局部互连的串行通信协议。它采用总线型拓扑结构,单主多从介质访问方式,是一种面向底层的控制协议。LIN网络的实现比较简单,只要具有SCI的单片机都可以用作LIN网络的从节点。除此之外,LIN网络中必须有一个主节点将该网络连接到主网上,比如CAN网络。LIN网络提高了汽车分层多路复用网络的性能,降低了汽车电子控制装置的开发、生产及诊断的服务成本。
2 MC68HC908GZ32的芯片介绍
MC68HC908GZ32微控制器是Freescale公司HC08系列8位单片机中的一种。其内部结构主要由单片机基本部分和CAN功能块部分组成,包括: 1个msCAN08 (Motorola 可升级的CAN)控制器模块、1个串行外围接口(SPI)模块、1个增强型串行通信接口(ESCI)模块、49个通用I/O口(驱动电流达10mA)、2个双通道16位定时接口模块(TIM)、8 MHz内部总线频率、32 KB Flash,1 536 字节RAM。
msCAN是Freescale Scaleable CAN的缩写,而msCAN08模块则是msCAN在HC08系列MCU上的具体实现,其结构如图1所示。msCAN08遵循CAN2.0A/B协议,集成了除收发器外CAN总线控制器的所有功能;还采用先进的缓冲器布置改善了实时性能,简化了应用软件的设计。CAN报文发送时,CPU将数据送入发送缓冲区,然后通过设置寄存器发出命令,数据组装成报文后通过发送引擎送到TxCAN,再经过外部收发器送到总线。报文接收时,收发引擎通过外部收发器将总线上的数据位流引入RxCAN,经过解码、错误检查、校验和报文过滤后送到接收缓冲区,并通过中断或标志通知CPU。

图1 msCAN08 内部结构图
3 某微型汽车网络设计
某微型汽车的电控单元主要有主控制器、发动机控制系统、悬架控制系统、制动防抱死控制系统(ABS)、自动变速系统、ASR控制系统、仪表管理系统、故障诊断系统、中央门锁系统、车窗升降系统、车灯控制系统等。
所有这些电控单元在整个控制系统中对响应的实时性要求有所不同,而且汽车在实际运行过程中,众多节点之间需要进行大量的实时数据交换。若整个汽车的所有节点都挂在一个CAN网络上,众多节点通过一条CAN总线进行通信,那么信息管理配置稍有不当,就很容易出现总线负荷过大,导致系统实时响应速度下降的情况,这在实时系统中是不允许的。因此根据不同的要求可将汽车网络分为高速CAN网络、低速CAN网络和LIN网络三个速率等级的网络。高速CAN网络由ABS、AMT、电喷等节点组成;这些电控单元个数少,实时性和稳定性的要求高,设计组成传输速率为500 kbps的高速CAN网络。低速网络,即低速CAN网络和LIN网络,由众多的车身电机和车灯节点组成;这些电控单元数量众多,传输的数据纷繁复杂,对于准确性、稳定性的要求高于实时性,设计组成传输速率为125 kbps的中低速CAN网或速率为20 kbps LIN网络进行控制。
不同速率的网络之间的通信必须有相应的网关进行数据的过滤以及速率的转换,以实现不同速率网络节点之间的数据通信。CANLIN网关的设计采用MC68HC908GZ32实现。
整车(某微型车)CANLIN通信及控制网络拓扑图如图2所示。

图2 CANLIN通信及控制网络拓扑图
3.1 CANLIN网关节点硬件电路设计
本设计选用64脚QFP封装的MC68HC908GZ32芯片,CAN总线网关硬件如图3所示。

图3 CANLIN网关硬件框图
MC68HC908GZ32芯片内部集成了CAN控制器和ESCI模块,硬件设计简单、方便。CAN控制器CANRX与CANTX引脚分别接CAN收发器(TJA1050)的RXD和TXD,经过收发器CANL和CANH引脚出来的就是具有差分信号的CAN信号。ESCI模块的TXD、RXD引脚分别接LIN的收发器(TJA1020)的TXD、RXD引脚,经过收发器LIN引脚出来的信号就是+12 V的LIN信号了。这就构成了基本的网关电路。MC68HC908GZ32其他的大部分引脚都可以作I/O口使用,满足车身上电子器件的连接需要,而且其驱动电流可达10 mA,这里选用PTA口作为输出口,通过三极管放大驱动固态继电器实现对电动后视镜的驱动控制。
3.2 CANLIN网关软件设计
这里的CANLIN网关主要有三个基本任务:接收CAN网的信息,把需要转发的信息发送给LIN从节点;从LIN从节点获取信息并转发到CAN网络;作为基本的CAN节点实现节点控制功能。
在设计的车身网络中,CAN节点接收CAN网信息并响应执行相应的操作,故在程序中采用中断接收CAN信息,程序流程如图4所示。主程序根据接收到的信息,判断是否需要发送而启动LIN发送子程序,然后根据控制信息实现节点的控制功能。在中断服务程序中,只负责保存控制信息到缓冲区,然后使能CAN接收控制器。这样的程序设计能够保证在CPU实现CAN节点基本功能的同时,CAN模块或ESCI模块可以后台收发信息,从而使网络传输和节点控制的延时达到最小。

图4 CANLIN网关程序流程
本设计中CAN总线的速度为125 kbps,LIN总线的速度为9 615 bps,在CAN报文转换成LIN报文时存在速度不匹配可能导致数据丢失的问题。但是本设计中转换的CAN报文是由拨码开关的触发来发送的,一次只发送1帧CAN报文,每两帧CAN报文相隔时间也超过LIN报文1帧发送时间,故不需要额外添加缓冲区来存放CAN报文数据,直接使用CAN的接收缓冲区即可。但是在LIN报文发送时,由于采用的是串口,一次只能发送1个字节,故如果1帧LIN报文字节数超过1,就必须设置缓冲区,缓冲区的大小可为1帧LIN报文的字节数(本设计中是2字节)。LIN报文转换成CAN报文实现起来非常简单,只需要在CAN发送缓冲区里将发送寄存器设置成LIN报文里的相应值即可,即将发送ID设置成LIN报文ID,数据域设置成LIN报文的数据场的相应字节。
4 CANLIN网络通信测试
拨动与高低速CAN网关相连的各个开关,可发送不同的CANLIN报文;通过报文监测的方式,可对车身网络的运行情况进行测试。其中一个报文监测内容如图5所示。测试结果表明,发送报文的内容与监测到的报文内容、用电器的动作情况是一致的。

图5 CAN报文监测数据
结语
本文给出了一个具有高低速CAN网络的汽车车身控制的网络设计方案,介绍了Freescale公司的8位单片机MC68HC908GZ32在该CAN网络中作为CANLIN网关的软硬件设计,并给出了上位机对其报文进行监测显示的结果。用此芯片设计的网关电路结构简单,易于升级,且成本低。该网络方案已经在某微型汽车车身上试验成功,控制网络及电路运行稳定,证明方案可行。采用CANLIN网络来控制汽车车身电器具有结构简单、实时性好、可靠性高的优点,具有良好的应用前景。