新能源汽车CAN总线实训教学平台设计
2021-08-04李继武
李继武
(南京城市职业学院智能工程学院,江苏 南京 211200)
CAN总线技术课程是新能源汽车专业核心课程,承担着培养学生适应岗位需求,提高应用能力的重任,而以培养应用能力为核心改革实训教学,是高职院校人才培养工作内涵式发展的主要努力方向。高职院校新能源汽车专业目前在讲授新能源汽车CAN总线技术课程时主要依赖于CAN网络硬件实训台架,这种台架通常只是将汽车上的相关CAN网络设备拆解下来,再组装到一个工作台上,通上电后可以测量CAN网络电压和波形。停留在这个层次上的实训台架,只能满足低层次认知实训,无法胜任高职教育创新创业的高层次需求[1]。汽车CAN总线技术课程是汽车技术、通信技术和计算机软硬件技术结合的课程,从岗位人才需求角度考虑,学生不仅需要掌握汽车技术和CAN总线技术,还需要从软件开发的角度入手,掌握CAN数据报文帧的截获破解方法、报文帧的收发过程以及控制设备的原理。
本文设计了一款CAN总线教学平台软件,它利用USBCAN接口卡接入某纯电动汽车的CAN网络,通过配置滤波器和波特率等参数,可以截获破解舒适网、动力网等CAN数据。根据破解的CAN数据,平台实现了自动空调、组合开关、雨刮开关、背光调节等设备的CAN命令控制模块。实践表明,利用本平台软件开展CAN总线技术课程实训教学,有效提高了学生的应用能力。作为创新教育和专业教育相结合的产品,以平台软件为核心搭建的工作坊为本专业学生开展创新创业实践提供了重要的机会和可能[2]。
1 硬件结构
1.1 测试用车
平台测试用车为2019年上市的某款纯电动汽车,该车工信部纯电续航里程为400km,电池能量52kWh,前置永磁同步单电机,单速变速器,4.3英寸液晶仪表,自动空调。
1.2 检测点选择
平台测试用新能源汽车CAN总线网络包含3个通信子网,分别为舒适网125kb/s,动力网250kb/s,ESC网500kb/s。
新能源汽车CAN网络各子网之间由于通信速率不同,互相之间信息交换需要由网关控制器进行转发[3]。网关是汽车内部通信的核心,通过它可以实现各条总线上信息的共享、网络管理和故障诊断功能[4]。各子网同网关控制器的连接关系如图1所示。
图1 某款纯电动汽车网关控制器电气连接图
本平台软件因为要对测试用汽车CAN网络数据进行采样,所以选取图1中的①~⑥作为检测点,并引出采样接口。
1.3 USBCAN接口卡
USB接口是一种方便、灵活、简单且即插即用的通用串行总线,CAN总线可以通过USBCAN接口卡与USB接口连接从而与主机进行高速通信。USBCAN接口卡用于在USB总线和CAN总线之间完成数据的双向收发功能。
平台选用的USBCAN接口卡是广成科技公司生产的USBCAN-IIV502型,该接口卡使用凤凰端子接线方式,具有两路CAN总线接口,支持CAN2.0A/CAN2.0B帧格式,通信波特率在5kb/s至1Mb/s之间可自由设置,电源供电采用USB总线方式,CAN总线接口每秒最多接收14000帧数据,支持Windows操作系统。
1.4 硬件连线图
上位机PC、USBCAN接口卡和网关控制器三者连接关系如图2所示。从USBCAN接口卡引出的L、H两根CAN引线可以接到网关控制器的7和8引脚(舒适网)或14和13引脚(ESC网)或9和10引脚(动力网),从而接入汽车CAN网络。
图2 硬件连线图
2 软件平台设计
2.1 打开CAN设备
程序启动后,首先要调用ECAN链接库中的OpenDevice函数打开USBCAN接口卡。该函数需要指定2个输入参数:设备类型和设备索引。设备类型设置为4表示USBCANⅡ类型;设备索引设置为0表示只有1个设备。如果有2个设备,可以指定为0或1。
2.2 初始化CAN设备
打开USB-CAN接口卡后需要通过INIT_CONFIG结构体初始化滤波器和波特率等参数。平台采用恩智浦半导体生产的CAN总线控制器,型号为SJA1000,它有两种工作模式:BasicCAN和PeliCAN。在BasicCAN模式下,SJA1000只支持接收发送标准帧格式报文;在PeliCAN模式下,SJA1000可以接收发送标准帧格式和扩展帧格式两种报文。通过软件编程使用SJA1000的验收滤波器可以滤掉无关报文。SJA1000验收滤波器包含4个验收码寄存器:ACR0、ACR1、ACR2和ACR3;同时它还拥有4个屏蔽码寄存器:AMR0、AMR1、AMR2和AMR3。验收码与屏蔽码按位对应,如果屏蔽码某位为1,则报文帧ID对应位不参与屏蔽接收数据;如果屏蔽码某位为0,则该报文帧ID对应位和验收码对应位相同时,表示该位允许接收数据;只有报文帧ID所有位都允许接收数据,SJA1000控制器才会接收该报文,并将其放入接收数据缓冲区[5]。
INIT_CONFIG结构体同滤波器相关的成员有3个:Acc-Code、AccMask和Filter。其中AccCode表示验收码,AccMask表示屏蔽码,Filter表示滤波使能,0表示不使能,1表示使能,只有在使能情况下,才能启用SJA1000滤波功能。滤波器设计界面如图3所示。
图3 滤波器设置
设置通信波特率需要使用SJA1000控制器的2个寄存器:BTR0(总线定时寄存器0)和BTR1(总线定时寄存器1)。BTR0定义了波特率预设值(BRP)和同步跳转宽度(SJW)的值,如表1所示。
表1 总线定时寄存器0
CAN总线时钟周期tSCL计算公式如下:
式中:tCLK——SJA1000的晶振周期。考虑到平台采用的晶振频率f为16MHz,因此tCLK=1/f=1/16μs。计算样例数据如下:
BTR1定义了每个位周期的长度、采样点的位置和在每个采样点的采样数目,如表2所示。
表2 总线定时寄存器1
SAM表示采样数目,0表示单倍采样;TSEG1和TSEG2决定了每一位的时钟数目和采样点位置,关于SYNCSEG、TSEG1和TSEG2,计算公式如下:
根据上述公式计算表2样例,结果如下:
通过上面计算得到tSYNCSEG、tTSEG1和tTSEG2结果值后,可以计算出SJA1000控制器的位周期和通信波特率,公式如下:
计算SJA1000控制器的位周期和通信波特率,结果如下:
综上,如果BTR0(总线定时寄存器0)设置为0x03,BTR1(总线定时寄存器1)设置为0x1C,计算出的SJA1000控制器通信波特率为125kb/s,其它常用波特率设置情况如表3所示。
表3 SJA1000控制器常用CAN通信波特率设置
2.3 打开CAN通道
初始化USB-CAN接口卡参数后,需要调用StartCAN函数打开该接口卡的某个CAN通道。如果有多个CAN通道,每次调用都要指定要使用的CAN通道号。
2.4 接收CAN数据
USB-CAN接口卡某个CAN通道打开后,即可开始接收CAN数据。由于接收CAN数据过程是一个耗时操作,可能导致用户界面停止响应,为了提高程序响应性,使用户界面及时刷新CAN数据,本平台设计了一个“后台耗时+通信更新”方案,即开启一个后台独立线程完成接收CAN数据的耗时操作,然后通过线程间事件通信,完成用户界面更新操作。
2.4.1 程序核心设计方案
使用BackgroundWorker对象开启单独线程完成耗时操作并及时响应更新用户界面,需要按照下面步骤进行设计。
1)创建一个BackgroundWorker对象。BackgroundWorker对象属于System.ComponentModel命名空间,它是完成本方案的核心对象。
2)订阅BackgroundWorker对象的3个事件:DoWork事件、ProgressChanged事件和RunWorkerCompleted事件。
DoWork事件用于执行耗时操作,耗时期间需要不断轮询CancellationPending属性,其值一旦为true,则中止耗时操作。
ProgressChanged事件用于接收耗时操作的计算结果并实时更新用户界面,事件处理程序的第2个参数,其类型为ProgressChangedEventArgs,它有一个UserState属性,是后台线程向本事件传递进度数据的媒介。
RunWorkerCompleted事件在后台耗时操作已完成、被取消或引发异常时触发。判断哪个原因触发了该事件需要根据第2个参数,其类型是RunWorkerCompletedEventArgs,它有Cancelled、Error和Result三个属性,如果耗时操作中途取消,则Cancelled属性为true;如果发生异常,则Error属性指明发生了哪种错误;如果既没中途取消,又没发生异常,则可通过Result属性获得耗时操作结果。
3)启动后台线程。调用BackgroundWorker对象的RunWorkerAsync方法将触发DoWork事件,启动后台线程开始执行耗时工作。
2.4.2 程序核心代码
整个程序最核心部分是后台线程接收CAN数据的耗时操作,其代码如下(部分):
上述代码中,CAN_OBJ作为结构体类型代表帧的数据结构。Transmit发送函数和Receive接收函数使用CAN_OBJ结构体来传送CAN信息帧。Receive函数从指定的设备CAN通道的缓冲区里读取数据,函数原型如下:
上述参数中,pReceive参数是一个指针变量,表示用来接收的数据帧数组。根据本方案设计的程序,接收CAN数据界面如图4所示。
图4 接收CAN数据界面
2.5 发送CAN数据
发送CAN数据需要调用ECAN链接库中的Transmit函数,其原型如下:
上述参数中,pSend参数是一个指针类型,表示要发送的数据帧数组,Len参数是一个整数类型,表示要发送的数据帧数组的长度。函数成功调用后,返回实际发送的帧数。发送CAN数据的界面如图5所示。
图5 发送CAN数据界面
3 系统测试
以2019款某纯电动汽车的“雨刮洗涤”部件为研究对象,运行本实训平台软件,检测出CAN命令如表4所示。
表4 某纯电动汽车“雨刮洗涤”部件CAN命令测试结果
根据检测结果,进一步开发“雨刮洗涤”功能模块,程序运行界面如图6所示。
图6 某纯电动汽车“雨刮洗涤”部件CAN命令控制模块
任选一种“雨刮”工作模式,双击即可发送CAN命令控制雨刮工作。实际测试表明,CAN命令发出后,汽车雨刮即可按照指定模式工作。
4 结束语
1)本文搭建了“上位机PC+USBCAN设备+汽车网关控制器”硬件环境,设计开发了一款新能源汽车CAN总线实训教学软件平台,通过该平台可以接收、分析新能源汽车CAN总线数据,并向新能源汽车发送CAN命令,同时以某款纯电动汽车为例,开发了自动空调、组合开关和雨刮开关等部件的CAN命令控制模块。
2)本文设计的实训平台弥补了各高校在用的CAN网络实训平台的不足,演示直观,控制逻辑清晰,提高学生岗位应用能力效果明显。
3)通过本文设计的实训平台可建立专业工作坊,为大学生创新创业教育提供一个切实可行的途径。
4)本文设计的实训平台后续可持续拓展不同车型,以丰富平台功能,增加实训教学应用场景,模拟企业真实环境,提高人才培养质量和就业竞争力。