基于CAN总线的汽车组合仪表盘的设计
扫描二维码
随时随地手机看文章
1. 概述
控制器局域网(Controller Area Network, 简称CAN) 是一种支持分布式和实时控制的串行通信网络,其主要特点是采用多主方式工作, 基于报文ID 并采用非破坏总线仲裁技术进行优先权仲裁,串行通信,事件触发型,大大减少线束的数量。CAN总线协议最初是由德国BOSCH公司于20世纪80年代提出并用于汽车的,1993年形成国际标准ISO 11898-1。由于其高性能、高可靠性及独特的设计,CAN越来越受到人们的重视,已经广泛应用于汽车电子控制,目前已经成为整车网络中的主要通信方式。
在为某公司开发的汽车仪表盘控制系统中,由于整车网络信息化的需要,希望采用总线方式,将仪表盘挂接在通信网络上,通过需求分析,本系统采用NEC的专用汽车仪表控制器UPD780822芯片,UPD780822是NEC公司的专门为汽车仪表开发的一款8位微控制器。它具有以下一些主要特点:4通道大电流输出的步进电机控制器,并可用于驱动十字交叉线圈;支持34×4 LCD驱动,可以显示总里程、小计里程,还可显示档位及时钟等信号;同UPD780822有一个CAN通道,支持CAN2.0A及CAN2.0B;还可以在出错时自动重发,响应远程帧自动传送;支持多报文,16个报文缓冲,可以弹性配置接收滤波;拥有8通道10位 A/D、3个串行口以及低电压保护等功能。以上这些特点在汽车仪表中都有实际的运用。系统框图如图1所示:
图1
CAN 总线收发器选用英飞凌公司的TLE7259G,是英飞凌公司专门为车载网络设计的CAN总线收发器,该器件具有极低电磁辐射,高抵抗共模干扰的差动接受电路,断电时不影响总线状态, 针对汽车环境的总线插件保护, 过热保护,对地及电源短路保护功能。
2.车载CAN总线仪表系统需求分析和设计
基于CAN总线的车用仪表系统主要要求完成以下两项功能:(1)通过CAN总线接受各类汽车实时数据,如车速数据、发动机转速数据、冷却水水温、燃油液位、各类报警灯状态等;[!--empirenews.page--]
(2)将CAN总线接收的数据,进行处理,及时驱动步进电机,点亮或关闭相关LED灯,驱动LCD显示里程数据等。UPD780822集成的CAN控制器支持4种帧,①数据帧;②远程帧;③错误帧;④超载帧。本文只用到了①和②帧格式,其中①用于接收来自节点的信息,②用于请求某个节点发送数据,其示意图如图2所示
图2
基于CAN总线的车用仪表系统的拓扑结构如图3所示,仪表盘所需要的数据来自多个节点,在车载CAN网络中分为高速CAN和低速CAN,由于汽车仪表显示系统的实时性不是很高,因而将仪表盘的节点放在低速CAN网络中,它同高速CAN网络的通信通过高低速CAN网关来实现。
图3
对于节点消息设计在本应用中,通信协议是由OEM厂商提供,所以本CAN通信主要是根据协议进行消息报文的分配,UPD780822支持16路接收缓冲和2路发送缓冲,每路的数据最多可达8位,报文的分配如图所示:
3.软件设计
本系统的软件全部采用C语言来实现,UPD780822拥有2K内部RAM,90KB的Flash,开发环境是NEC集成的IDE,它包括PM Plus 编译器,QB780822仿真环境,QB780822支持软件和硬件仿真,我们采用硬件在线仿真,仿真器是NEC的IEQUB78082.。[!--empirenews.page--]
3.1 程序流程图如下
3.2 CAN接收程序
为了便于程序的移植和修改,本接收程序定义了一个结构,部分代码如下:
unsigned char InputCAN( unsigned char msg_num )
{unsigned char p;p=0;RUN = 0x01; /*开始接收*/
if(Receive_message[1].DSTAT.DN==1){p |= 1;
Buf_Speed=((int)Receive_message[1].DATA[0]<<8)|Receive_message[1].DATA[1];//接收车速数据Buf_Speed
Receive_message[1].DSTAT.DN=0;Receive_message[1].DSTAT.MUC=0;}
RUN = 0x01; /*开始接收*/
if(Receive_message[2].DSTAT.DN==1){p|=2;
Buf_Rpm=((int)Receive_message[2].DATA[0]<<8)|Receive_message[2].DATA[1];//接收转速数据Buf_Rpm
Receive_message[2].DSTAT.DN=0;Receive_message[2].DSTAT.MUC=0;}
RUN = 0x01; /*开始接收*/
if(Receive_message[3].DSTAT.DN==1){p |= 4;
Buf_Fuel=((int)Receive_message[3].DATA[0]<<8)|Receive_message[3].DATA[1];//燃油数据Buf_Fuel
Receive_message[3].DSTAT.DN=0;Receive_message[3].DSTAT.MUC=0;}
RUN = 0x01; /*开始接收*/
if(Receive_message[4].DSTAT.DN==1){p |= 8;
Buf_Winker=((int)Receive_message[4].DATA[0]<<8)|Receive_message[4].DATA[1];//水温数据Buf_Water
Receive_message[4].DSTAT.DN=0;Receive_message[4].DSTAT.MUC=0;}
RUN = 0x01; /*开始接收*/
if(Receive_message[5].DSTAT.DN==1){p |= 16;
Buf_Winker=((int)Receive_message[5].DATA[0]<<8)|Receive_message[5].DATA[1];//接收报警灯和指示信号Buf_Winker
Receive_message[5].DSTAT.DN=0;Receive_message[5].DSTAT.MUC=0;}
RUN = 0x01; /*开始接收*/
if(Receive_message[6].DSTAT.DN==1){p |= 32;
Buf_CanData=((int)Receive_message[6].DATA[0]<<|Receive_message[6].DATA[1];//接收其他数据Buf_CanData
Receive_message[6].DSTAT.DN=0;Receive_message[6].DSTAT.MUC=0;}
RUN = 0x01;/*开始接收*/
return p;//1:车速信号,2:转速数据;4:燃油数据 8:水温数据 16:报警灯指示数据 32:其他数据 其他:接收数据无效
}
4.结束语
由于本仪表系统中采用了CAN 总线, 大大减少了仪表板与车载其它电子设备间通信用电缆的数量和接插件的数量和种类,提高了系统的鲁棒性,同时系统通过充分利用车载网络的优势,实现数据共享,降低了系统成本,提供汽车仪表的控制精度,本CAN通信软件已经通过验证,可以满足汽车仪表的通信要求,鉴于CAN 的应用优势和发展前景,并考虑到它在国外尚未定型,在国内也有很多应用空白,我国汽车业可以在引进、消化、吸收的基础上,配合CAN的推广工作抓紧制定符合国情的CAN技术标准,形成自主产权的汽车控制网络系统。