汽车电子技术的不断发展大大提高了汽车性能,同时也给汽车制造安装以及系统可靠性等带方面来了一系列问题。汽车网络的诞生使汽车电子迈入了一个新的台阶,汽车网络用总线进行信息通讯,不仅解决了现代汽车电子化中出现的线路复杂和线束增加等问题,同时也是汽车通信和控制的一个重要基础。CAN 总线和LIN 总线作为汽车总线的主流形式,在汽车领域已逐日得到广泛应用。
1 CAN/LIN 总线技术简介[1]
CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。CAN 通信协议描述了在设备之间信息如何传递。CAN 以两种形式存在:一种是具有11 位ID 标示符的标准CAN,另一种是29 位ID 标示符的扩展CAN。LIN,全称为“Local Interconnect Network”,是一种低成本的串行通讯网络。LIN 的目
标是为现有汽车网络(如CAN 总线)提供辅助功能,在不需要CAN 总线的带宽和多功能的场合,使用LIN 总线可大大节省成本。
CAN 总线以及LIN 总线的主要特征如表1 所示。
2 MC68HC908GZ32 简介[2]
MC68HC908GZ32 是Freescale 公司生产的8 位微控制器。其内部具有8 位的中央处理单元、时钟发生模块、8 通道的定时器模块、8 位的键盘中断模块、增强型串行通信模块、时基模块以及CAN 通信模块等。其容量达32KB 的片内Flash 存储器与1536B RAM 能满足多数用户的各种应用要求。不仅有传统的串行通信接口,而且还有串行外围接口,使得芯片与外部设备、芯片与外围扩展芯片的通信和连接变得简便,具有53 个通用I/O 引脚。
MC68HC908GZ32 的上述众多功能特点,使其既可以进行CAN 网络通信,又可以进行LIN 网络通信,因此可以将其作为CAN/LIN 网关。
3 GZ32 在CAN/LIN 网关中的应用
以汽车车身网络为例,说明GZ32 在CAN/LIN 网络中的应用。车身网络属于中低速网络,既可以用CAN 总线进行通信和控制,也可以用LIN 总线进行通信和控制。从节约成本的角度考虑,可以使用LIN 总线。但LIN 总线使用主从结构,而车身电器部分又很多,包括车灯、车门、后视镜以及雨刮等等,因此,为减少系统模块以及使系统更为简单系统化,可使用GZ32 作为CAN/LIN 网关,既可以接收CAN 总线报文,又可以对CAN 报文进行解读,发送给LIN 总线。车身网络系统构建图如图1 所示。
3.1 网关的作用
网关的作用就是为在不同的通信协议和不同的传输速度的计算机或模块之间进行通信时,建立连接和信息解码,重新编译,并将数据传输给其他系统。为了使采用不同协议及速度的数据总线间实现无差错数据传输,必须要用一种特殊功能的计算机,这种计算机就是网关。
GZ32 具有MSCAN08 模块,可以接收/发送CAN 报文;同时又具有ESCI 模块,可以接收/发送LIN 报文。因此,本设计中使用GZ32 作为CAN/LIN 网关。
当使用 MSCAN 模块时,应作如下初始化[3]:
CONFIG1=0x09;
CONFIG2=0x1C; // CAN 模块使能
CBTR0=0x00;
CBTR1=0xD8; //设置波特率为125K
3.2 CAN 报文的接收和发送
一个完整的汽车网络系统可分为车身网络系统和动力网络系统,要有高低速CAN 网关。本设计中的CAN/LIN 网关的主要功能是,接收高低速CAN 网关发送来的CAN 报文帧,通过TJA1050 CAN 收发器实现。对于车灯模块(包括转向灯、示宽灯、远/近光灯、雾灯等),可以使用CAN 报文通过I/O 口进行控制。同时网关还对接收到的CAN 报文进行解析,发送给LIN 总线。由于CAN 和LIN 是全双工的总线,因此GZ32 CAN/LIN 网关还可以向CAN总线发送CAN 报文帧,也可以接收来自LIN 总线的LIN 报文帧。如图2 所示[4]。
以接收 CAN 报文帧为例说明一下GZ32 CAN/LIN 网关工作流程:
DDRC_DDRC1=0; //CAN RX 使能
DDRC_DDRC0=1; //CAN TX 使能
re_id0=REC_IDR0;
re_id1=REC_IDR1; //读ID 标识符寄存器
temp0=REC_DSR0;
temp1=REC_DSR1;
temp2=REC_DSR2; //读数据段寄存器
… …
re_dlr=REC_DLR; //读数据长度寄存器
当 GZ32 CAN/LIN网关接收到CAN报文帧后,根据所接收到的标识符及数据段寄存器,就可以对左前组合灯以及后组合灯模块进行正确控制。同时,网关还可以将各灯的状态等信息发送给CAN 总线。
3.3 LIN 报文的接收和发送
当 GZ32 CAN/LIN 网关接收到CAN 报文并对其进行正确解析后,将通过增强型串行通信ESCI 模块向LIN 总线发送LIN 报文帧,本设计使用TJA1020 LIN 收发器加以实现。这样LIN 总线上的各从机模块,如车门模块(包括门锁电机、雨刮电机、后视镜等)、后组合灯模块,通过ID 识别可以正确的接收LIN 报文并加以控制。同理,各模块亦可将各自的状态等信息反馈给LIN 总线,并通过TJA1020 反馈给CAN/LIN 网关,如图3 所示。
以发送LIN 报文帧为例说明一下GZ32 CAN/LIN 网关工作流程:
DDRE_DDRE0=1; //TXD 使能
DDRE_DDRE1=0; //RXD 使能
SCBR=0xC0; //LINT 和LINR 使能
SCPSC=0xB0; //设置波特率为9.6K
SCC1=0x40; //ESCI 使能
SCC2=0x0C; //TE 和RE 使能
SCC3=0x00;
transmit_data[0]=0x55;
transmit_data[1]=ID;
transmit_data[2]=REC_DSR0;
transmit_data[3]=REC_DSR1;
… … //发送LIN 数据场及校验和场
4 调试过程及结论
本文针对 MC68HC908GZ32 微控制器在汽车CAN/LIN 网关中的应用,给出了具体的硬件设计方案及控制软件,并最终加以了调试。在调试过程中遇到一些问题,并最终得到解决。比较典型的问题及解决方法如下:
(1)网关无法正确接收CAN 报文:网关若想正确收发CAN 报文,波特率配置与高低速CAN 网关之差一定要在CAN 协议允许的范围之内。同理,网关发送LIN 报文的波特率与LIN 从节点的波特率也要符合LIN 协议规定,否则容易产生无法接收报文或接收到错误报文的现象。
(2)网关能发送LIN 报文但总线上无信号:LIN 收发器TJA1020 的NSLP 引脚为高电平时,方可启动发送器,因此须将PTE2 引脚置为输出脚,且端口置为隐性状态。本文作者创新点:以Freescale公司8位微处理器MC68HC908GZ32为主芯片,对其在汽车CAN/LIN网络中的应用加以了设计。给出了车身网络结构图、CAN/LIN网关电路设计图、报文收发流程以及调试过程中对所遇到的问题的解决方法等。经调试结果表明该GZ32 CAN/LIN网关具有结构简单、性能稳定、实用性强等特点。