http://xuxiaozhao163.blog.163.com/blog/static/3793592200802784146452/

CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO11898)。是国际上应用最广泛的现场总线之一。到目前为止,世界上已经拥有20多家CAN总线控制器芯片生产商,110多种CAN总线协议控制器芯片和集成CAN总线协议控制器的微处理器芯片。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。
CAN 是什么?

  CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO*1 国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。

  现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

应该从哪几个方面来构造协议?
  CAN协议的基本要素是ID、周期和信号与消息的映射关系。因此构造协议的主要任务是ID分配、定义消息周期、确定信号与消息的映射关系。这三个方面的设计都同等重要,设计要考虑的主要因素有数据传输的实时性要求(即所谓的时序)、数据的相对重要程度、与数据相关的应用控制算法对数据的时间要求。

  协议设计实质上是非常复杂的工作,对于国内来说,由于我们缺乏相应的经验,国外又对我们进行技术封锁,因此到目前为止这还是阻碍中国技术发展的主要障碍。

  国际上也存在一些现有的标准,如CANopen、SAE J1939.SAE J1939这是一个有汽车工程师协议牵头制定的应用与卡车电控网络的协议。不过它主要是应用与卡车的电控系统,不能直接照搬到轿车控制系统中。

  但是随着汽车电子的发展,汽车电子设计分工也越来越细,这部分工作也有厂商提供工具实现协议的计算机辅助设计。比如Mentor Graphics公司的VNA就是是一款自动化的协议设计软件,了解它的设计技术有助于你理解协议构造的方方面面。详细信息欢迎进一步交流咨询。

还有实现通讯协议的程序代码结构是什么样的?
  首先CAN通讯功能包括物理层、数据链路层和应用层。物理层、数据链路层已经由硬件实现,目前都已经标准化,有现成的部件(CAN控制器和收发器)选择。因此在单片机上加上CAN控制器、收发器,软件实现相应的驱动程序就基本实现了CAN的通讯功能。

  但是这对于汽车电子上的应用还是远远不够的,因为数据链路层有很多功能没有定义如具有逻辑关系的消息之间的功能实现、网络管理等等。因此通讯协议的程序代码的结构应该是底层驱动+应用代码(通讯功能的应用代码)。
 
  如果考虑目前汽车电子嵌入式软件的技术发展,未来的结构应该是底层驱动+应用代码+抽象层。汽车电子软件开放式体系标准AUTOSAR也基本是这样的思路。目前也有很多软件厂商提供现成的解决方案,ECU软件开发只需要在该解决方案提供的基于数据读写的接口之上实现控制算法。这样做的好处在于软件设计人员可以把专长用于集中设计控制算法、保证其可靠性。这样的产品如Mentor Graphics的嵌入式软件(VTP + 网络管理 + 诊断。。。)就是这样的应用例子。

1、目前存在多种汽车网络协议

  CAN总线技术属于现场总线范畴,CAN是控制局域网络(Control Area Network)的简称,最早由德国BOSCH公司推出,用于汽车内部测量与执行部件之间的数据通信,其纵向规范现已被ISO国际标准组织制订为国际标准,由于得到了Philip、Siemence、Motorola、Intel、Fusitu等公司的支持,它已成为国际上应用最广泛的现场总线。它有效支持分布式控制及实时控制,并采用了带优先级的CSMA/CD协议对总线进行仲裁。因此,CAN总线允许多站点同时发送,这样,既保证了信息处理的实时性,又使得CAN总线网络可以构成多主结构的系统,保证了系统的可靠性。另外,CAN采用短帧结构,且每帧信息都有校验及其他检错措施,保证了数据的实时性、低传输出错率。其传输介质可以使用双绞线、同轴电缆或光纤。

2、汽车仪表的发展及趋势

  按汽车仪表在工作原理上取得的重大技术创新来分,可以划分为4个阶段,或称为经过4代。第1代汽车仪表是基于机械作用力而工作的机械式仪表,人们习惯称这类仪表为机械机心表;第2代汽车仪表的工作原理基于电测原理,即通过各类传感器将被测的非电量变换成电信号加以测量,通常称这类仪表为电气式仪表;第3代为模拟电路电子式;第4代为步进电动机式全数字汽车仪表。

  随着计算机技术、电子技术、网络技术以及液晶现实技术的发展,汽车仪表的发展趋势将更加体现这些高新技术的结合。如仪表的功能由软件和硬件共同来完成仪表的功能由软件和硬件共同实现,而且主要是通过软件实现。这对于量大且对成本极为敏感的汽车仪表有特殊意义,因为软件的开发费用分摊到每个仪表上是非常少的。与仅由电子线路硬件组成的汽车仪表相比,带有ECU的汽车仪表,其功能的实现手段更加灵活多样。产品的“柔性”更好,即在推出新款产品时,能最大限度地利用以前产品的硬、软件设计成果仅做少量修改便可,这在产品更新换代很快的今天和未来特别重要。

3、基于CAN总线的汽车仪表设计方案

3.1 设计思想
  本文利用车辆网络的优势,从CAN总线上采集汽车仪表面板所需要的数据,如车速、水温、燃油、里程等,经处理器处理后进行各种实时控制和显示。不是像传统的仪表面板那样,本设计用液晶显示屏动态显示所采集并用软件处理的数据。这样可以随时根据需要,由软件实现仪表面板的扩充。整体网络具有自诊断功能,降低系统的故障率,同时使用CAN总线方式使得整体系统工作更加及时、准确,提高了安全性、可靠性,更具有智能化和人性化。

  由于本设计只是实验性研究以及各汽车总线数据编码的多样性,本设计自行开发了简单的ECU,用于采集车速、燃油、水温、里程等数据。然后由CAN总线通过CAN-PC接口卡接入PC机,再由软件编程来完成从CAN总线采集到的数据动态显示。这里用Visual Basic编程。系统共享娱乐系统、导航系统所用的计算机。作为实验性研究,可由笔记本电脑代替PC机。然后进行各项实验验证,如抗干扰、准确度、工作稳定性、振动的影响、温度的影响等。

3.2 系统硬件结构及所用器件
  该测试系统由液晶显示器、PC-CAN接口卡、单片机、CAN控制器(SJA1000)、CAN总线发送/接收驱动器(PCA82C250)、和各数据采集系统组成。

  专用液晶显示屏用来显示转速、机油压力、水温、燃油消耗等;PC机用来处理CAN总线上的数据并通过软件显示于显示屏上;PC-CAN接口卡完成PC机与CAN之间的通信;自行设计的ECU完成从各传感器采集数据,通过CAN收发器连于CAN总线上。其中的PC-CAN接口卡通过RS232接口或UAB与PC机相连,PC-CAN接口卡再通过总线与自行设计的ECU相连。在实际中PC-CAN接口卡与车辆CAN总线相连,可采集大量数据信息,从而随时可通过软件编程把这些信息在显示屏上动态显示出来。

3.3 系统的硬件设计
  PC-CAN接口卡选用CAN232智能CAN接口卡,它适合CAN-bus的小流量数据传输应用,最高可达500帧/秒的数据传输速率,提供广泛和强大的软件支持。支持在VC++、C++Builder、Delphi和VB等开发环境下进行设计。该接口卡为用户提供了编程需要的三个文件:CAN232dll.DLL,CAN232dll.LIB,ExportHead.H。
  CAN协议控制器选用SJA1000,它是Philips公司生产的适合汽车环境的独立CAN控制器,支持CAN2.0B协议。CAN发送/接收驱动器选用Philip公司的PCA82C250,它是CAN控制器和物理传输线路之间的接口,它可以用高达1Mbits/s的位速率在两条有差动电压的总线电缆上传输数据。

3.4 系统软件设计
  CAN2.0的分层结构是按ISO/OSI模型对CAN结构的描述。数据链路层又分为逻辑链路层(LLC,Logical Link Control)和媒体访问控制(MAC,Medium Access Control)两个层。LLC层完成下列功能:为数据发送以及以及远层数据请求传送服务;判断是否接受接收到的数据;提供恢复管理和超载处理。

  MAC层主要定义了传输协议,包括信息帧格式、仲裁方式、应答信号、错误检测、错误信令和故障限制等。

  物理层实现节点间的物理信号的传送,主要定义网络的电气特性。CAN网络中可以采用多种不同的物理层协议。

  本研究用VC编程语言实现汽车仪表数据的显示。PC—CAN接口卡自带三个文件CAN232dll.DLL,CAN232dll.LIB,ExportHead.H,其中ExportHead.H描述了动态链接库CAN232dll.DLL所定义的外部函数。如下所示,

void OpenSerialPort(int nPort,unsigned int Baud);
void CAN232Send(unsigned char*sdata,size_t Len);
void CAN232Setting(unsigned char*sdata,size_t Len);
char CAN232Receive(unsigned char*CANReceive);

  将接口卡所带的三个文件拷贝在VC目录下,在VC菜单的PROJECT->SETTING中的LINK项下,填入CAN232dll.LIB。然后在程序的头文件中加入“#include ExportHead.H”。

4、结论

  本研究只有一个CAN节点,所以显示器所显示的数据只有转速、机油压力、水温、燃油消耗,但是在实际的汽车网络中,通过编程我们可以动态获得CAN总线上的所有信息,并能够以友好的人机界面显示,使车辆信息对驾驶员或乘客透明化。所以基于CAN总线的汽车仪表软件实现是汽车仪表设计的一个新的尝试。


posted on 2014-04-03 10:38  醉依危栏听松涛  阅读(835)  评论(0编辑  收藏  举报