李高坚,袁观练,周 洋,侯献军,邹 斌
(1.上汽通用五菱汽车股份有限公司技术中心,广西 柳州 545000;2.武汉理工大学汽车工程学院,湖北 武汉 430070;3.现代汽车零部件技术湖北省重点实验室,湖北 武汉 430070)
随着汽车电子系统网络化的发展,标定系统与电控单元之间存在着越来越频繁、越来越复杂的数据通信,因此,通信模块在标定系统中逐渐成为系统的关键部分。为此,欧洲标定系统标准化组织(arbeitskreis zur standardisierung von applikationssystemen,ASAP)推出了基于 CAN总线的ECU标定协议规范(CAN calibration protocol,CCP协议)。CCP协议用于电控系统参数标定、数据采集及实时监测,具有较好的稳定性和通用性,为控制器标定系统的开发提供了一个标准平台[1]。
目前,国外的很多公司都以CCP协议为标准开发了专门用于电控发动机标定的优化系统。如ETAS公司研制的INCA软件,基本已成为国际上的通用标定软件。而国内还没有研发出比较成熟的发动机ECU标定系统。因此,笔者设计并开发了一种基于CCP电控单元标定系统的通信软件,实现了ECU与标定工具之间快速的数据通信。
CCP协议采用主从通信的方式,即一个主设备可通过CAN总线与多个从设备相连,但在某一时刻只能有一个从设备能与主设备连接展开通信[2]。每个从设备都有一个特定的地址,主设备通过每个从设备的地址,建立一对一的对应关系。建立连接后,主从设备之间所有命令均由主设备控制,主设备向从设备发送标定和监测命令,从设备则返回命令响应值和监测数据。
CCP协议又可分为查询模式和数据采集(data acquisition,DAQ)模式。查询模式可理解为一问一答的通信模式,在这种模式下,主设备先问,从设备回答,两者之间不断交互来实现主从设备间的通信。DAQ模式是一种高效的数据上传模式,在DAQ模式下从设备可以脱开主设备的控制,按照一定的周期定时向主设备上传数据,这种方式上传效率高,传输量大,但实现起来较为复杂。
所有CCP协议的通信均采用CAN报文形式来实现,CCP消息一律采用8字节数据场,需传递的信息和数据必须封装入这8字节的数据场内。
CCP协议采用的两种报文对象分别是主设备向从设备传递消息对象的命令接收对象(command receive object,CRO)和从设备向主设备传递消息对象的数据传输对象(data transmission object,DTO)[3]。CRO传递的是命令代码以及命令参数,第0字节为命令代码,第2~7字节中包含了与命令相关的命令参数结构,如图1所示。DTO传递的则是从设备反馈回的消息,主要可分为3类:命令返回消息 (command return message-DTO,CRMDTO)、事件消息(event message-DTO)和数据采集消息(data acquisition-DTO,DAQ-DTO)。命令返回消息和事件消息的格式相同如图2所示,数据采集消息格式如图3所示[4]。
图1 命令接收对象格式
图2 命令返回消息或事件消息格式
图3 数据采集消息格式
硬件部分主要由USBCAN-Ⅱ双路智能CAN接口卡、PCA82C250CAN收发器、6N137光耦及微控制器MC9S12XDP512等组成。根据各硬件的工作原理及接口定义,设计得到系统硬件电路原理图如图4所示。首先,微控制器MC9S12XDP512通过数据输出端TX0和数据输入端RX0连接到6N137光耦;然后,经光耦隔离电气信号干扰后,连接到收发器PCA82C250CAN;最后,经收发器通过差分电压信号线CAN_H和CAN_L连接到总线电缆。
微控制器采用的是HCS12系列16位芯片MC9S12XDP512[5]。所使用的CAN模块的型号为S12MSCANV3,在典型的MSCAN系统中,CAN节点通过收发器与CAN总线连接,收发器不仅可以提供CAN总线需要的大电流,还可以启动电流保护功能来保护出错的CAN节点。USBCAN-Ⅱ双路智能CAN接口卡的每一个CAN通道都在内部集成有120 Ω的终端电阻,无需外加终端电阻,连接时只需在收发器端安装120 Ω 的终端电阻[6-7]。采用PCA82C250CAN收发器,用1 Mb/s的位速率在两条有差动电压的总线电缆上传输数据[8]。输入Rs用于模式控制。在图4中,Rext的大小为1 000 Ω,满足 0 Ω < Rext<1 800 Ω。收发器处于高速模式,位速率较高,要在微控制器与收发器之间使用6N137光耦,隔离电气信号干扰。
图4 系统硬件电路原理图
通信模块主要负责为PC机与ECU电控单元之间的通信提供接口,其整体结构如图5所示。在通信过程中上层标定软件发送标定或监测命令CRO到下层ECU端,ECU通过 CCP驱动解析CRO命令,判断是标定命令还是检测命令,据此执行相关操作,并及时发送应答信号或检测数据到上层标定软件。
图5 通信模块整体结构
上层通信为上层标定软件的通信,主要通过调用USBCAN-Ⅱ双路智能CAN接口卡的动态链接库usbcan.dll的函数来进行,主要用到的动态链接库的函数如下[9]:
VCI_OpenDevice():打开通信设备。
VCI_CloseDevice():关闭通信设备。
VCI_InitCan():初始化CAN。
VCI_StartCAN():启动CAN。
VCI_ResetCAN():复位CAN。
VCI_Transmit():发送数据帧。
VCI_Receive():接收数据帧。
在初始化USB转CAN接口时,需要调用动态链接库中的VCI_InitCan()函数,对输入波特率、标识符位数、接收掩码、发送队列、接收队列和接收缓冲区进行设置。在通信过程中,标定软件向ECU发送标定和检测命令时,ECU向标定软件发送应答信号和检测数据都要调用usbcan.dll中的函数来完成,usbcan.dll库函数的调用流程如图6所示。
图6 库函数调用流程图
3.2.1 CAN驱动
ECU端的通信模块主要由CCP驱动程序、CAN驱动程序和CCP与CAN的接口程序组成。CCP驱动负责解释并执行基于CCP规范的CRO命令并组织返回DTO信息,实现对ECU控制参数的标定及监控参数的上传,它需要CAN驱动的支持,来接收和发送基于CAN报文格式的CRO和DTO信息。
CAN封装了CCP协议的所有帧类型,作为CAN的应用程序,CAN驱动在系统中就显得尤其重要。CAN驱动主要由3个部分组成,分别为CAN初始化、CAN发送和CAN接收。
在通信之前,必须先对CAN进行初始化。首先通过对CANCTL0_INITRQ的赋值使CAN模块进入初始化模式,在初始化模式下,设置使能寄存器(CANCTLl)、波特率寄存器(CANBTR0,CANBTR1)、验收控制寄存器(CANIDAC)以及验收寄存器组(CANIDAR0~7)。然后,退出初始化模式,等待进入正常模式。
要将CAN报文发送至CAN总线上,首先需要选择可用的发送缓冲区,然后将数据写入发送缓冲区,最后设置对应于该缓冲区的发送标志。其程序流程如图7所示。
图7 CAN发送流程图
CAN帧的接收有两种方式:查询标志CANRFLG_RXF和中断,这里采用查询方式,对CANRFLG_RXF清除标志,即写1时将释放该前台缓冲区,前台缓冲区一旦释放,后台缓冲区就可能立即移到前台,因此必须在清除标志前读取所有的数据,否则将导致接收错误,其接收流程如图8所示。
图8 CAN接收流程图
3.2.2 CCP驱动
CCP驱动是一种使ECU能够接收并发送符合CCP规范的CRO和DTO,能及时地对收到的CRO命令做出解释并执行的程序,它主要由命令处理模块和DAQ处理模块组成。
命令处理模块是CCP驱动程序的核心部分,它调用CCP驱动函数中的ccpCommand函数(功能如表1所示)及时解释并执行CRO命令,命令完成后,组织返回的 CRO-DTO信息,调用ccpSend函数,对CRO命令进行应答。如果主设备要求对DAQ进行操作,则将该操作及时转移到DAQ处理机进行处理。
DAQ处理模块用于DAQ数据采集模式,它的通信是单向的,只能由从设备定时向主设备传送数据。当命令处理模块接收到请求DAQ通信的命令后,就将CRO命令传递给DAQ处理模块,DAQ处理模块定时调用ccpDaq函数(如表1所示),触发相应的DAQ列表的数据发送,值得注意的是ccpDaq函数只能定时调用,其采样频率要通过调用ccpInit()函数(如表1所示)进行设置。
表1 CCP驱动主要函数功能
3.2.3 CCP与CAN接口程序
ECU在接到CAN总线上的报文后,立即对接收的ID标识符进行判断,若等于CCP命令接收对象的ID,则将CCP的标志位ccp_ind置1,主函数通过判断CCP的标志位ccp_ind的值来调用CCP驱动子函数ccpCommand函数解释并执行CRO命令。执行完后,CCP驱动函数通过调用ccpSend子函数来完成DTO的发送,要注意的是,ccpSend子函数必须通过调用CAN发送函数来完成发送。其基本程序流程如图9所示。
将以上通信模块用于LPG燃料电控发动机喷气阀性能测试实验中,主要测试喷气阀在不同的喷气脉宽和电压下的喷气流量值。将硬件相关电路与喷气阀驱动、喷气阀和质量流量计等相连,利用所述的方法设计通信模块,并通过相应的通信模块与上层标定软件相连。上层标定软件界面如图10所示,上层标定软件根据需要设有12项控制参数和两项监测参数,其中控制参数根据需要手动设置,监测参数则是按照10 ms和20 ms的周期上传,传输速率最高可达1 Mb/s,可达到国际先进标定软件的传输速度。
图9 CCP与CAN接口程序流程图
图10 标定软件界面图
喷气特性试验结果如图11所示。随着喷气脉宽和喷气电压的增加,喷气量增加,增大到某一点达到喷射的最大值,趋于饱和。经过反复试验,结果表明,该通信模块速度快、数据传送可靠性高,可方便地实现对ECU的标定和监控,整个通信模块具有较强的实时性。
在分析CCP协议的定义、通信方式和消息格式的基础上,设计并开发了基于CCP协议的汽车ECU标定系统的通信模块,该模块使用模块化的编程方法,提高了程序的可移植性,将CCP协议和CAN驱动相分离,实现了通信模块的通用性。通过实例证明了该通信模块速度快、可靠性好,能够在ECU标定系统开发过程中得到较好的应用。
图11 喷气特性试验结果
[1] CENA G,VALENZANO A,VITTURI S.Automotive digital communications[J].Computer Standards & Interfaces,2005,27(6):665 -678.
[2] ETAS Co.CAN calibration protocol Rcv.2.1[S].1999.
[3] 冯静,王俊席,卓斌.基于CCP协议的电控发动机标定系统 CAN通信模块的研发[J].内燃机工程,2003,24(5):33 -38.
[4] 罗峰,孙泽昌.汽车CAN总线系统原理设计与应用[M].北京:电子工业出版社,2010:285-318.
[5] Freescale Semiconductor Inc.MC9S12XDP512RMV2 Rev.2.21[S].2009.
[6] ZHIYUAN Electronics Co.Ltd.USBCAN - 2A/Ⅱ/Ⅰ智能 CAN接口卡Rev.2.01[S].2008.
[7] 邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,2001:34-87.
[8] Philips Electronics Co.PCA82C250 Rev.06[S].2011.
[9] ZHIYUAN Electronics Co.Ltd.CAN-bus Tester Software& Device Library Functions Rev.1.01[S].2009.