车载数据记录仪的多通道CAN总线接口设计
2019-03-14李爱佳崔建峰李爱慧刘慧丰
李爱佳,崔建峰,李爱慧,刘慧丰
(1.中北大学电子测试技术国家重点实验室,太原 030051;2.哈尔滨电机厂有限责任公司,哈尔滨 150000;3.北京特种车辆试验场,北京 100072)
0 引言
随着信息技术与计算机通信技术的飞速发展,CAN总线(Controller Area Network)已成为目前国际上应用最广泛的现场总线之一。CAN总线最开始是由20世纪80年代德国Bosch公司为了解决现代汽车中庞大的电子控制装置之间的通信而最先提出的。在汽车领域,CAN总线被设计为汽车环境中的微控制器通信,与车载其他电子控制装置ECU之间交换信息[1]。CAN总线是一个单一的网络总线,其外围器件都可被挂在总线上。目前,CAN总线已经在汽车工业、航空工业、工业控制等领域中有着广泛的应用[2]。
车载记录仪采用飞思卡尔单片机中的MC9S12XEP100作为主控制器,该单片机内置CAN通信接口,只需搭配外围电路和CAN驱动器即可。车辆采集系统诸如:温度检测、里程表更新、油量检测、车速等所有采集系统与记录仪的通信都采用CAN总线模块[3]。通过编写采集系统与记录仪固件代码,对不同采集系统采集数据定义不同的ID,车载记录仪通过CAN总线标识符接收寄存器接收不同的扩展标识符实现多通道数据的实时记录。
1 系统概述
记录仪由主控(MC9S12XEP100单片机)、数据接收模块(CAN总线接口)和数据存储模块(Flash芯片)构成。主控MCU的控制器局域网是一种通信控制器,它使用先进的缓冲器安排,简化了应用软件。采集系统将不同ID和不同优先级的多通道数据经过CAN总线与记录仪进行通信[4],完成对数据记录。系统的结构图如图1所示。
图1 系统结构图
2 CAN总线接口设计
2.1 CAN总线特性
CAN总线是一种多主方式的串行通信总线,设计规范要求有较高位速率、高抗电磁干扰性[5]。其通信协议实质是完成设备之间的信息传递方式,CAN总线不仅有很远的数据传输距离(最长10 km),还有高速的数据传输速率(高达1 Mb/s)最重要的是CAN总线能根据报文的ID决定接收或者屏蔽该报文,CAN总线的模块框图如图2所示。
图2 CAN模块框图
方案中CAN总线使用双绞线作为通信的介质媒介,且CAN信号使用差分电压进行传送,CAN总线的两条信号线(CAN_H和CAN_L)在静态时均为2.5 V左右,这种状态也称为“隐性”;当两条信号线之间有电压差(一般情况下:CAN_H=3.5 V,CAN_L=1.5 V)这种状态成为“显性”[6]。
2.2 CAN总线接口模块硬件电路设计
CAN总线接口模块硬件设计如下页图3所示,方案中设计了2种CAN总线接口工作模式,具体分析如下:
1)非隔离驱动模式:选用的CAN驱动芯片为NXP公司的PCA82C251,该芯片收发器是协议控制器和物理传输线路之间的接口,此器件对总线提供差动发送能力,对CAN控制器提供差动接收能力[7],可以广泛应用在汽车、一般工业控制、远程通讯等应用领域中。其承受的共模电压范围为-7 V~12 V,工作最高速率为1Mb/s,RJ9电阻为斜率电阻,它用来控制通信速率斜率,方案中CAN总线的工作速率为1Mb/s,此时RJ9应该直接接地。D3和D4为二极管,主要作用是对CAN接口差分线的信号电平进行钳位,防止外部干扰信号对其通讯过程产生影响。RJ8为CAN总线终端匹配电阻。
2)隔离驱动模式:选用广州志远电子有限公司的CTM1050T作为CAN驱动芯片,该芯片的隔离电压为DC 2 500 V,工作速率最高为1 Mb/s,可以达到方案设计中速率的要求,由于CTM1050T在内部已经集成了CAN总线ESD保护器件,因此,在硬件设计中无需加载二极管,只需配装一个去耦电容C17,当前模式仍然需要RJ8作为CAN总线终端匹配电阻。
在MC9S12XEP100主控芯片中,提供了两路CAN协议接口,当主控单片机相应引脚因外部原因发生故障时,可通过相应的跳线电阻切换工作端口。这种冗余设计[7]能增加系统的平均鼓掌间隔时间,提高记录仪的可靠性。
2.3 CAN总线接口固件设计
2.3.1 CAN总线接收数据原理分析
记录仪总CAN总线接口主要完成数据的接收,并对相应数据进行封包和解析。CAN总线模块的接收缓冲器结构如图4所示。
CAN总线系统中,每个CAN节点通过收发器物理连接到CAN总线线路。收发器驱动供工作所需的最大电流,并具有对故障节点的电流保护。图5为CAN总线系统。
图3 CAN模块硬件电路图
图4 接收缓冲器结构
图5 CAN总线系统
记录仪的CAN总线接口将实时接收多通道数据,利用CAN总线接收标识符定义不同的ID对多通道数据进行封包和解析[8]。这些位中的任何一个都可以在标识符掩码寄存器中表示为不比较,这种可编程通用标识符接收滤波器可以有效降低CPU的中断负载,该方案中通过编程,实现的具体工作模式为:8个标识符接收滤波器,每个都应用与标识符的前8位,它符合CAN2.0A/B的标准标识符,CAN2.0A/B标准帧协议如表1所示。一个8位滤波器页产生滤波器匹配过程如下页图6所示。
2.3.2 CAN接口程序设计
CAN接口模块工作前首先对CAN模块进行初始化设计,寄存器CAN0CTL0_INITRQ=1,表示CAN模块进入初始化状态;寄存器CAN0BTR0_SJW=0,设置同步跳转宽度为1个Tq时钟周期;寄存器CAN0BTR0_BRP=2,设置波特率预分频值为3;寄存器CAN0BTR1=0x1c,设置时间段1和时间段2的值;CAN传输位时间=预分频值*(1+时间段1+时间段2)/fCANCLK,由上述对寄存器配置,可以得到CAN总线的传输速率为1 Mb/s。
表1 CAN2.0A/B标准帧协议
为了能接收多通道数据,需要对CAN总线滤波器进行设置,要求对不同数据ID进行屏蔽或者接收设置。首先对标识符接收模式设置,方案中选用8个8位接收滤波器,寄存器配置为CAN0IDAC=0x20;然后对8个滤波器的详细配置为:
1)8个标识符验收控制寄存器:
CAN0IDAR0=0x2C;
CAN0IDAR1=0x8C;
CAN0IDAR2=0x6C;
图6 滤波器匹配过程
CAN0IDAR3=0x64;
CAN0IDAR4=0x24;
CAN0IDAR5=0x50;
CAN0IDAR6=0x18;
CAN0IDAR7=0x00;
2)8个标识符掩码寄存器:
CAN0IDMR0=0x05;
CAN0IDMR1=0x02;
CAN0IDMR2=0x03;
CAN0IDMR3=0x01;
CAN0IDMR4=0x05;
CAN0IDMR5=0x02;
CAN0IDMR6=0x01;
CAN0IDMR7=0x00;
完成对CAN总线滤波器配置后,CAN总线正常工作还需要使能其CAN功能,并确定CAN接口的时钟源,这里设置CAN总线时间为总线时钟源48 MHz,寄存器配置为CAN0CTL1=0xC0;CAN总线接口接收多通道数据采用中断方式[9],所以在初始化设计中应该配置寄存器为中断使能模式,具体配置为CAN0RIER_RXFIE=1。以上操作完成对CAN接口模块的初始化设计。
CAN接口模块接收多通道数据时,先写入ID寄存器:
CAN0TXIDR0=(unsigned char)(msg.id>>3);
CAN0TXIDR1=(unsigned char)(msg.id<<5);
CAN接口模块想要准确接收每个通道数据,需读取ID寄存器:
msg->id= (unsigned int)(CAN0RXIDR0<<3)|(unsigned char)(CAN0RXIDR1>>5);只有写入 ID和读取ID一致时,看它是否通过滤波器,同时被写入有效RXBG。CAN模块的标识符接收寄存器定义了扩展标识符的可接受模式[8]。标识符的匹配标志能清晰识别并引起接收的滤波寄存器完成对数据报文的接收工作。CAN总线接口模块接收多通道数据流程图如图7所示。
图7 CAN接口模块接收数据流程图
2.4 记录仪其他模块设计
记录仪其他模块诸如:电源模块、时钟模块、主控MCU接口配置等。电源模块根据元器件的要求供电电压为5 V;时钟模块主要为主控MCU提供48 MHz时钟;主控MCU接口配置主要完成引脚功能设置,并完成对所有模块的固件初始化。
3 测试分析
为了验证记录仪的CAN总线接口设计的可靠性,将车载记录仪中记录的数据与采集系统中原始数据文件分析比较如下页图8得出:记录仪存储的数据完全正确,且无数据丢失现象。CAN总线接口设计具有可行性。
上述分析表明CAN总线接口接收数据的准确性,然而记录仪的CAN总线接口设计需正确接收多通道数据,完成对多通道数据的接收。经过验证,记录仪的CAN总线接口设计能实现对多通道数据的记录,经过上述测试,从而验证了记录仪的CAN总线接口设计的有效性。图9为CAN总线接口接收多通道数据在上位机验证过程。
4 结论
图8 数据比较分析
图9 多通道数据
本文提出一种车载数据记录仪的多通道CAN总线接口设计,记录仪通过CAN总线接口接收多个采集系统的消息数据,避免了使用传统RS232总线进行通信存在的传输速率不高、稳定性不强等问题。经过多次测试结果表明,该设计具有可行性、有效性。