APP下载

基于CAN总线的电动汽车空调控制教学平台设计

2021-10-30李继武

汽车零部件 2021年10期
关键词:寄存器字节总线

李继武

(南京城市职业学院智能工程学院,江苏南京 210000)

0 引言

CAN(Controller Area Network)即控制器局域网,是由德国Bosch公司为监测和控制汽车而开发的一种网络总线技术[1]。CAN总线采用时间触发协议,在消息传输中采用无破坏性的基于优先权的仲裁机制,确保了数据的完整性和安全性[2]。CAN总线传输速度快、可靠性高,得到汽车主机厂和供应商的大力支持,已经成为最有前途的现场总线技术之一[3]。

汽车空调系统是现代汽车的基本组成部分,随着智能控制技术的进步,利用CAN总线技术控制空调的制冷、加热、通风和内外循环等功能越来越方便[4]。

CAN总线技术课程是新能源汽车技术专业核心课程,从教学实训和人才岗位需求考虑,让学生掌握CAN总线工作原理和CAN报文的数据解析过程是实训教学的重点[5]。但是由于CAN总线技术理解起来比较抽象,使用万用表或示波器检测到的CAN信号仅仅是数字或波形,要正确理解CAN信号背后的含义难度比较大[6]。

本文作者设计了一款CAN总线教学平台,利用CAN总线技术控制电动汽车空调实现“自动”“关闭”“A/C”等12项功能,直观演示了CAN总线技术工作原理和CAN报文解析过程,在提高CAN总线技术实训课程教学质量方面有一定的应用和推广价值。

1 硬件选型及接线

1.1 测试用车

文中测试用车为2019年上市的比亚迪E5出行版纯电动汽车,工信部纯电续航里程405 km,电池能量51.2 kWh,前置永磁同步单电机,单速变速箱,10.922 cm(4.3英寸)液晶仪表,自动空调。

1.2 USB-CAN接口卡

通过USB-CAN接口卡,PC机可以方便连接至汽车CAN总线网络。测试用USB-CAN接口卡为广成科技公司生产的USBCAN-II S V502型,该接口卡集成两路CAN总线接口,使用凤凰端子接线方式,支持CAN2.0A/CAN2.0B帧格式,符合ISO/DIS11898规范,通信波特率在5 kb/s~1 Mb/s 之间可任意编程,使用USB总线电源供电,CAN总线接口采用电气隔离,隔离模块绝缘电压直流1 500 V,最高接收数据流量为14 000帧/s,支持Windows操作系统,工作温度范围为-20~70 ℃[7]。

1.3 硬件接线

比亚迪 E5 CAN总线网络有4种:启动网CAN(125 kb/s)、舒适网CAN(125 kb/s)、动力网CAN(250 kb/s)和ESC网CAN(500 kb/s)。接线方法如图1所示。

图1 USB-CAN接线方法

由于各个网络之间速率不同,相互通信需要一个中间设备网关控制器进行转发[8]。空调系统属于舒适网CAN,比亚迪E5网关控制器ECU的7、8号引脚为舒适网CAN接出引脚,其中7号引脚为CANH,8号引脚为CANL。PC机通过USB-CAN接口卡的凤凰端子连接到网关控制器的7、8号引脚上即可接入汽车舒适CAN网络。

2 功能分析与界面设计

2.1 软件功能分析

比亚迪E5汽车空调面板有12个按键,各按键的具体功能如表1所示。软件功能按照比亚迪E5空调面板视图设计。

表1 比亚迪E5自动空调12个按键功能说明

2.2 软件界面设计

空调面板视图可以作为软件界面,每个按键设计成软件按钮,单击不同按钮模拟按下不同按键,同时发送CAN命令给空调,以启动空调的相应功能,软件界面如图2所示。

图2 软件界面

软件开发平台选择Microsoft Visual Studio Enterprise 2015,编程语言使用C#,CAN分析仪测试调试工具使用CANTest软件。

3 初始化USB-CAN接口卡

USB-CAN接口卡在收发数据之前,要依次执行3个操作:打开设备、初始化设备和启动设备。

3.1 打开设备

打开USB-CAN接口卡需要使用DLL库中的OpenDevice函数,其原型如下:

DWORD__stdcall OpenDevice(DWORD DevType,

DWORD DevIndex,DWORD Reserved);

其中DevType表示设备类型,USBCAN I型为3,USBCAN II型为4;DevIndex表示设备索引,如果只有一个设备,索引为0,如果有两个设备可以为0或1;Reserved为保留参数,未使用。返回值为1表示操作成功,0表示操作失败。

3.2 初始化设备

初始化USB-CAN接口卡,就是配置其5个参数:验收码、屏蔽码、波特率、滤波使能和模式。

(1)验收码

USB-CAN接口卡有4个验收代码寄存器ACR0、ACR1、ACR2和ACR3,其中高字节对应ACR0,低字节对应ACR3,寄存器格式如表2所示。

表2 验收代码寄存器ACR

(2)屏蔽码

USB-CAN接口卡有4个验收屏蔽寄存器AMR0、AMR1、AMR2和AMR3,其中高字节对应AMR0,低字节对应AMR3,寄存器格式如表3所示。

验收滤波器由验收代码寄存器ACR和验收屏蔽寄存器定义,每一位验收屏蔽位分别对应每一位验收代码,当该位验收屏蔽位为1时,接收的相应帧ID位无论是否和相应的验收代码位相同均会表示为接收;当验收屏蔽位为0时,只有相应的帧ID位和相应的验收代码位值相同的情况才会表示为接收。只有在所有的位都表示接收的时候,CAN控制器才会接收该报文[9]。

(3)波特率

USB-CAN接口卡使用定时器0和定时器1设置通信波特率,电动汽车空调CAN总线属于舒适CAN,波特率为125 kb/s,USB-CAN接口卡的定时器0设置为0x03,定时器1设置为0x1C。

(4)滤波使能

该属性为0表示“不使能”,1表示“使能”,此处应设置为1。

(5)模式

USB-CAN接口卡有两种工作模式,0表示正常模式,1表示只听模式,此处设置为0。

初始化USB-CAN接口卡时,上述5个参数封装入如下INIT_CONFIG结构体:

public struct INIT_CONFIG

{

public uint AccCode;//验收码

public uint AccMask;//屏蔽码

public byte Timing0;//定时器0

public byte Timing1;//定时器1

public byte Filter;//滤波使能

public byte Mode;//模式

public uint Reserved;//系统保留

}

初始化USB-CAN接口卡调用InitCan函数,原型如下:

DWORD__stdcall InitCan(DWORD DevType,DWORD

DevIndex,DWORD CANIndex,P_INIT_CONFIG pInitConfig);

其中DevType和DevIndex参数与OpenDevice函数相同,CANIndex表示第几路CAN,即对应接口卡的CAN通道号。返回值1表示操作成功,0表示操作失败[10]。

3.3 启动设备

打开的USB-CAN设备经过参数初始化后,即可启动某一个CAN通道以发送或接收CAN数据,启动函数为StartCAN,其原型如下:

DWORD__stdcall StartCAN(DWORD DevType,DWORD

DevIndex,DWORD CANIndex);

其中DevType、DevIndex和CANIndex与InitCan函数相同。返回值为1表示操作成功,0表示操作失败。

4 发送与接收CAN数据

4.1 帧结构定义

标准数据帧11个字节,前3个字节为帧描述,后8个字节为帧数据,如表4所示。

表4 标准数据帧

字节1为帧信息,第7位(FF)表示帧格式,FF为0表示标准帧,FF为1表示扩展帧;第6位(RTR)表示帧类型,RTR为0表示数据帧,RTR为1表示远程帧;DLC表示在数据帧时实际的数据长度。字节2和字节3为报文识别码,其高11位有效。字节4—11为数据帧的实际数据,远程帧时无效。

针对标准数据帧格式,定义一个帧结构体如下:

typedef struct_CAN_OBJ {

UINT ID;//帧识别码

UINT TimeStamp;//接收到信息帧时的时间标识,从CAN控制器初始化开始计时

BYTE TimeFlag;//是否使用时间标识,为1时TimeStamp有效

BYTE SendType;//发送帧类型:0表示正常发送,1表示单次发送

BYTE RemoteFlag;//帧类型:0表示数据帧,1表示为远程帧

BYTE ExternFlag;//帧格式:0表示标准帧,1表示扩展帧

BYTE DataLen;//数据长度DLC(≤8)

BYTE Data[8];//CAN报文的数据

BYTE Reserved[3];//系统保留

} CAN_OBJ,*P_CAN_OBJ;

其中TimeStamp和TimeFlag只在此帧为接收帧时有意义,SendType只在此帧为发送帧时有意义。CAN_OBJ结构体中,ID和Data这两个参数最重要,以比亚迪E5汽车的空调CAN为例,ID为空调CAN总线的标识码,Data为控制空调的CAN命令(发送时)或当前空调状态信息(接收时)。

4.2 收发CAN数据

文中使用C#语言结合ECAN动态链接库完成CAN数据的收发。发送CAN数据,ECAN库提供了Transmit函数,其原型如下:

ULONG__stdcall Transmit(DWORD DevType,DWORD

DevIndex,DWORD CANIndex,P_CAN_OBJ pSend,ULONG Len);

其中DevType、DevIndex和CANIndex 3个参数同InitCan函数相同,pSend表示要发送的数据帧数组的首指针,Len表示要发送的数据帧数组的长度,返回值返回实际发送的帧数。

发送CAN数据的程序流程如图3所示。

图3 发送CAN数据流程

接收CAN数据即从指定的设备CAN通道的缓冲区里读取数据,ECAN库提供了Receive函数,原型如下:

ULONG__stdcall Receive(DWORD DevType,DWORD

DevIndex,DWORD CANIndex,P_CAN_OBJ pReceive,ULONG Len,INT WaitTime=-1);

其中DevType、DevIndex和CANIndex 3个参数与Transmit函数的相同,pReceive表示用来接收的数据帧数组的首指针,Len表示用来接收的数据帧数组的长度,WaitTime表示等待超时时间,单位为ms。返回值返回实际读取到的帧数,如果返回值为0xFFFFFFFF,则表示读取数据失败,有错误发生,可调用ReadErrInfo函数来获取错误码。接收CAN数据的流程如图4所示。

图4 接收CAN数据流程

4.3 运行结果

启动程序,进入舒适CAN,选择空调系统,单击“自动”按钮,一条CAN命令通过USK-CAN接口卡,经网关控制器发送给空调,空调启动进入“自动”模式,界面如图5所示。查看汽车发现空调已经启动,空调面板上的“自动”、“A/C”和“内外循环”3个按键均已点亮。

图5 程序运行界面

5 结论

(1)利用C#语言和ECAN动态链接库设计的电动汽车空调控制教学软件,可以通过USB-CAN接口卡向自动空调发送CAN命令,实现空调各项控制功能;

(2)通过软件演示可以直观掌握CAN总线基本工作原理和CAN通信协议解析过程,有效降低CAN网络课程实训教学难度,有利于提高教学质量;

(3)系统运行稳定可靠、操作简单、演示直观,既可以应用在CAN网络课程实训教学场合,也可以稍加改进后应用在汽车CAN网络故障诊断分析场合。

猜你喜欢

寄存器字节总线
No.11 字节跳动计划自研芯片:仅供内部使用
No.8 字节跳动将推出独立出口电商APP
关于CAN总线的地铁屏蔽门控制思路论述
飞思卡尔单片机脉宽调制模块用法研究
移位寄存器及算术运算应用
数字电路环境下汽车控制电路信号设计
人类进入“泽它时代”
Q&A热线
PCI9030及其PCI总线接口电路设计