技术频道

基于CAN总线技术的汽车ECU设计

  1、引言
  控制器局域网(ControllerAreaNetwork,CAN)是Bosch公司于1986年在美国汽车工程师协会(SAE)大会上推出的一种新型串行总线,被广泛地用于汽车内部测量与执行部件之间的数据通信,其总线规范已被制订为国际标准,由于其高性能、高可靠性及独特的设计,CAN总线技术越来越受到人们的重视[1,2]。随着现代汽车技术的发展,电子设备在汽车中的比重越来越高,如电喷发动机、燃油高压共轨、制动防抱死系统(ABS)、自动变速器系统、注油控制以及电动门窗等[3],这些总成之间需要检测并交换大量数据,采用CAN总线技术不仅成本低,而且可靠性明显提高。从1992年起,Mercedes-Benz(奔驰)公司开始在高级客车中使用CAN总线技术,随后,Volvo、Saab、Volkswagen、BMW、Renault以及Fiat等汽车公司也分别在自己的汽车上使用CAN总线技术[4-6]。国内针对汽车的CAN总线技术研究还处于起步阶段,北京航空航天大学、中国计算机学会单片机公共实验室、清华大学以及中国汽车技术研究中心等单位都开展了汽车CAN总线技术的研究[7-9],但目前还不能构成系列产品,并没有真正组建汽车CAN总线网络。
  本文以某即将定型汽车为原型,设计基于CAN总线技术的汽车ECU系统,对于已有CAN接口的总成,可以直接依据协议读取CAN接口的数据,对于没有CAN接口的总成,利用AT90CAN128单片机设计汽车ECU,采集传感器信息,并通过CAN接口与其他总成交换数据,组建基于CAN总线的汽车网络,这样既有利于汽车本身的数据通信,又能方便配套的便携式诊断仪器读取汽车技术状态信息。
  2、CAN总线网络的组建
  CAN是一种串行数据通信总线,其通信速率能达到1Mbps,并已经成为一项国际标准,其最大特点是,任一节点所传送的数据信息并不包含传送节点或接收节点的地址,信息内容通过一个标识符(ID)作上标记,在整个网络中,该标识符是唯一的,网络上的其他节点接收到信息后,每一节点都对这一标识符进行测试,以判断信息内容是否与己有关,如果是相关信息,将其接收并进行处理,否则,即被忽略。这样,不同的节点可以接收到不同的数据,保证了通信的实时性。
  现代汽车广泛地采用了电子技术,而总控模块能随时接收到所需要的数据,实现汽车总成之间的数据交换使用CAN总线组成数据传输网络主要用途之一,如发动机系统、自动变速器系统、ABS系统、自动差速锁系统、中央充放气系统、动力转向系统以及电动门窗系统等总成之间的数据交换。利用CAN总线技术组建汽车信息传输网络的基本结构如图1所示。

  由于一些总成生产厂家在设计时已经考虑了信息交互的接口问题,在生产时已将CAN总线技术集成到总成上。对于这类总成(如高压共轨发动机、自动变速器以及ABS等系统),只需通过ECU读取其CAN总线协议即可完成数据信息交换。对于其他总成,通过设计汽车ECU,采集相应传感器的信息,并利用CAN接口向总线广播式发送数据,可完成信息交换。
  3、汽车ECU的设计
  为了设计带有CAN接口的汽车ECU,较为常见的方法是用单片机与CAN控制器相结合,如使用8051单片机与CAN控制器芯片SJA1000来组合使用[4][6]。由于CAN总线技术应用领域广泛,一些芯片生产厂家(如Motorola、Intel、Philip、Atmel、Microchip以及NEC等公司)纷纷在自己的芯片中集成了CAN接口模块,这样将大大提高CAN接口通信的可靠性。本文采用Atmel公司的一款内嵌CAN控制器的AVR型单片机AT90CAN128来实现CAN节点。
  AT90CAN128单片机具有以下特点:128K字节FLASH,4K字节EEPROM和4K字节的SRAM,带有硬件乘法器功能,53个通用的I/O口,32个通用工作寄存器,4个具有比较模式的定时器/计数器,2通道8位的PWM,6通道2到16位精度的PWM,2个USART和1个主从SPI串行口,1个两线(I2C)串行接口,一个8通道10位具有可选增益差分输入的A/D转换器,1个带内部振荡器的可编程看门狗定时器[10]。同时还集成了CAN控制器,与CAN标准帧2.0A和扩展帧2.0B完全兼容,具有15个独立的信息对象,能够处理所有的帧类型,具有8位静态分配的数据缓冲区,晶振频率8MHz时数据传送速率可达到1Mbps。
  3.1硬件设计
  在本文的设计中,利用AT90CAN128的A/D转换器采集相关传感器的电压信号(如水温、振动、位置、气压以及油压等信号),利用定时器/计数器模块采集相关传感器的脉冲信号(如转速、里程等信号),由于AT90CAN128集成了CAN控制器功能,因此,结合CAN总线收发器即可完成CAN总线的接收和发送任务。CAN总线收发器采用了ATA6660芯片,它是CAN控制器与物理传输媒体之间的物理连接子层接口。为提高系统的抗干扰性,在AT90CAN128与ATA6660芯片之间加入高速光耦芯片6N137,其接口电路如图2所示。

  从图2中可以看出,电路主要由3部分组成:单片机AT90CAN128、高速光耦6N137和高速CAN总线收发器。单片机AT90CAN128主要负责传感器信息的采集、内部CAN控制器的初始化并实现数据的接收和发送等通信任务。在ATA6660与CAN总线的接口部分也采用了抗干扰和安全措施,ATA6660的CANH和CANL引脚各自通过5Ω的电阻与CAN总线相连,电阻可起到一定的限流作用,保护ATA6660免受过流冲击。CANH和CANL与地之间并联两个30pF的小电容,可以起到滤除总线上的高频干扰和一定的防电磁辐射的能力。另外,在两根CAN总线与地之间分别接了一个防雷击管,当两输入端与地之间出现瞬变干扰时,通过防雷击管的放电可以起到一定的保护作用。
  3.2软件设计
  系统软件设计主要包括信号采集和CAN接口通信程序。利用AT90CAN128片上集成的ADC模块可以采集一些常规传感器的模拟信号,如油压、水温、气压等信号;利用定时器/计数器模块采集传感器脉冲信号,如转速、行驶里程信号等。对于模拟量信号,在经过放大器处理之后,可以直接控制单片机的ADC模块对其进行采集;对于脉冲信号,在对其进行采集时需要进行整形处理,如转速传感器获取发动机飞轮旋转时轮齿的信号,是正弦交流信号,将其整形为方波信号,利用定时器/计数器模块采集方波的频率来完成速度采集。为提高转速采集的实时性,通常采集脉冲信号的周期(两个脉冲信号上升沿或下降沿之间的时间)来计算其频率,并计算发动机转速,计算公式如如式(1)所示。

式(1)中为系统时钟周期,为分频系数,为发动机飞轮齿圈齿数(对于康明斯发动机为为轮齿脉冲两次上升(或下降)沿的计数器值。

  CAN接口通信程序主要包括CAN控制器的初始化、数据接收和数据发送程序。主程序通过调用函数来实现数据的接收和发送,流程图如图3所示,在数据接收程序中,通过查询方式读取相应消息对象中的数据。

  CAN控制器初始化工作主要包括波特率参数设置、接收屏蔽寄存器及接收代码寄存器的设置、使能允许寄存器的设置等。通过总线定时器寄存器CANBT1、CANBT2、CANBT3来设置波特率参数。AT90CAN128中提供了一组由4个验收码寄存器(CANIDT1~CANIDT4)和4个验收屏蔽寄存器(CANIDM1~CANIDM4)组成的验收滤波器,信息只有通过它的验收滤波才能被接收;所有验收屏蔽寄存器为0的位,验收码寄存器和CAN信息帧的对应位必须相同才能验收通过,而所有验收屏蔽寄存器中为1的位,验收码寄存器对应位的验收滤波功能则被屏蔽。通过设置验收滤波器,既可以实现节点与节点之间的点对点通信,也可以实现一点对多点的广播式通信,使整个数据通信网络更加灵活。
  4、实验
  采用本文设计的汽车ECU对车辆上的模拟信号(水温、压力等),脉冲信号(转速、里程等)进行采集,并通过CAN总线发送和接收数据。采用IXXAT公司的CAN分析仪(USBtoCAN)对CAN总线进行监控,利用计算机与CAN分析仪连接,并通过CAN总线采集ECU传输的数据,CAN总线的通信波特率设定为125kbps,实验中测得的总线状态如图4(a)所示,实验中采用CAN2.0B扩展帧协议,采集某ECU节点的CAN总线数据如图4(b)所示,其中节点204060为脉冲信号采集,节点204061为模拟信号采集,数据长度为8字节,空余字节用FF填补,可用来扩展信息量。

  根据实际测量结果,可以看出总线没有接收到出错帧,接收到数据帧,反映总线工作状态正常。从接收的数据表明,每个ECU节点发送的ID码和数据与预定义的ID码和数据相同,总线接收和发送正常。另外,在软件中加入了异常处理,如果某节点一直向总线发送错误标志,总线会自动终止该节点,其他节点也会检测到错误条件,停止向该节点发送数据,这样可以避免总线瘫痪。
  5、结论
  本文设计的基于AT90CAN128单片机的汽车ECU,由于其本身接口丰富,可以采集多种传感器数据,并集成了CAN接口模块,这样提高了EUC的工作可靠性和CAN接口通信的可靠性,非常适宜于组建汽车CAN总线网络。另外,在硬件上做了优化处理,提高了系统的抗干扰能力。实验表明,该ECU能准确采集数据,并能通过CAN总线进行可靠通信。

文章版权归西部工控xbgk所有,未经许可不得转载。