郝志廷
随着汽车电子技术的发展,车载网络技术的应用已成为主流趋势,车用软件开发、协议芯片制造、车载网络协议制定成为研究热点.然而,在我国这项技术发展较为滞后,仍处在起步阶段,而且在当前汽车线路中传统的布线方式依然存在,电路布线系统较为复杂、电磁干扰严重、可靠性不高.
本文主要研究车载网络中CAN总线智能节点的硬件电路和软件设计.
CAN(Controller Area Network)即控制器局域网,一般称为CAN总线,是当前世界上开放式现场总线使用最为广泛的一种.
CAN总线由德国博世公司在上世纪80年代首先提出,并应用在汽车工业中.起初主要目的是为了克服当前汽车中较为庞大复杂的电子设备和控制装置之间的通信问题,实现彼此之间通信的网络化,减少信号线的使用,降低布线的复杂程度,有效提高电子线路的稳定性和可靠性.
数据帧的构成可分为七个位场,它们分别是起始帧、仲裁场、控制场、数据场、CRC场、应答场和帧结束[1].数据长度可为0.CAN技术规范2.0B数据帧的组成如图1所示.
在CAN技术规范2.0B中有两种因标识符的长度不同作为主要区别的帧格式;其中一种是标准帧,它有11位标识符,另外一种是扩展帧,它有29位标识符[2].标准格式如图2所示,扩展据帧结构如图3所示.
图3 扩展格式的数据帧
图3中所表示的SRR、IDE、RTR分别是指替代远程请求、标识位扩展位和远程发送请求位.
如图4所示,远程帧由帧起始、仲裁场、控制场、CRC场、应答场和帧结束组成.由图4可以看出,远程帧和前面介绍的数据帧在结构上几乎一样,远程帧的远程发送请求位是隐性位,而且它也没有数据场.
图4 远程帧组成
如图5所示,出错帧由错误叠加标志和错误界定符构成.
图5 出错帧的组成
(1)错误标志的形式.①激活错误标志(ac⁃tive error flag):激活错误标志是由6个连续的显性位组成的.②认可错误标志(passive error flag):在没有被其他的节点显性位给冲击掉的情况下,认可错误标志是由6个连续隐性位组成.
错误条件被检测到的“错误激活”站通过发送错误激活标志指示错误.错误标志的格式破坏了从帧起始到循环冗余校验场界定符的位填充规则,应答场或帧结束场的固定格式也被破坏了[3].故此,每一个站发送的不一样的错误标志叠加在一块就导致“显性”位序列的形成.
检测出错误条件的“错误认可”的站指示错误的方法是通过发送错误认可标志.该“错误认可”站是以错误认可标志作为起始点,等待极性一致的6个连续位.当检测到这6个连续位时,即完成了错误认可标志的发送[3].
(2)出错界定符.它包括8个隐性位.在错误标志发送后,每个站都会发送出1个隐性位,并对总线进行监视,一旦有1个隐性位被检测到,其余的7个隐性位被立刻启动发送[3].
在考虑到系统稳定性、可靠性和性价比的前提下,在本设计中,节点微处理器选用的是AT89C51、通讯控制器采用SJA1000、CAN总线驱动器采用了PCA82C250.在不同节点之间的CAN总线物理层介质连接由双绞线实现.
节点微处理器选用的是AT89C51,该处理器是一种低电压,高性能CMOS8位微处理器,并且带有4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasable Read Only Memory),也即是俗称的单片机.
微处理器电路原理图如图6所示,主要包括晶振电路、复位电路和接口电路等.
图6 MCU电路原理图
所谓接口电路,即与微处理器输入输出相连接的外部硬件电路,在本设计中主要有SJA1000CAN通讯控制器,PCA82C250总线驱动器模块等接口.
在本设计中,CAN控制器选用的是SJA1000,SJA1000芯片是来自飞利浦公司生产的一种独立的CAN控制器.该控制器替代了原来的PCA82C200(CAN控制器、BasieCAN),它增加了一种名为PdiCAN的新的操作模式,而且也支持CAN2.0B协议.
CAN控制器的电路原理图如图7所示,主要包括晶振电路、复位电路、模式选择电路,以及SJA1000与MCU的接口电路.
图7 CAN控制器SJA1000电路原理图
CAN控制器SJA1000外接12MHz晶振,片选端/CS直接连接AT89C51单片机的P2.7引脚.当CS=0时,AT89C51单片机可以对SJA1000进行写操作,因此CAN控制器SJA1000将从地址0开始寻址.AD0-AD7直接和微处理器的P0口进行连接,MODE接高电平信号、设为Intel模式,中断输出信号/INT和微处理器的/INT0直接相连,这样,CAN通信有中断和查询两种方式可供选择.TX0与RX0外接的390Ω电阻R15、R16为限流保护电阻,为避免当驱动器失效时出现过流导致控制器损坏.
CAN总线驱动器接口芯选用的是PCA82C250芯片,该驱动器是CAN控制器和数据传输线路之间的接口[4-6],一方面它可以提供给传输总线差动发送能力,另一方面它也可以提供给CAN控制器差动接收能力.
图8 CAN总线驱动器模块原理图
图8为CAN总线驱动器模块原理图,由图可知,为进一步提高安全性和抗干扰性,在PCA82C25O和CAN总线的接口处,本设计采用了相关的安全和抗干扰措施.PCA82C25O的CANH引脚和CANL引脚分别通过一个5Ω的电阻连接到CAN总线,以达到限流作用,对PCA82C250进行保护,以免受到电流过大的冲击.CANH和CANL分别与接地之间并联了一个30pF的小电容,可以有效将总线上的高频干扰去除及预防电磁辐射.而且,在两根CAN总线输入端与地之间均连接了防雷击管,如果两个输入端与地之间出现瞬变干扰时,防雷击管就可以通过放电实现保护作用[4].
由于在本设计中各模块均需要较高的工作稳定性、实时性.本系统软件设计思路主要从系统复位、初始化和节点程序设计着手.
要实现对寄存器进行初始化,首先需保证系统进入复位状态.完成初始化后,须将复位请求位清空,使SJAl000返回到工作状态.节点初始化程序设计的流程图如图9所示.
图9 SJA1000的初始化程序流程图
发送子程序流程图如图10所示.CAN控制器的中断使能寄存器中有一位为中断使能标志位.当AT89C51要发送数据时,在发送缓冲区中写操作将被禁止.如此一来,状态寄存器中的发送缓冲区状态标志(TBS)将被CPU检查,根据检查来确定一个新信息是不是被放入发送缓冲区中.
图10 发送子程序流程图
接收子程序的主要功能是实现节点报文的接收,以及对其他情况的处理.节点的报文接收程序设计采用中断控制方式,其流程图如图11所示.
本文对CAN总线报文的数据帧、硬件电路和软件设计进行了详细介绍,设计了一种用于车载网络中的CAN总线智能节点,具有较好的稳定性、可靠性及抗干扰性,结构简单、易于扩展应用.
图11 报文接收流程图
参考文献:
[1]周智庆.基于CAN总线电动汽车驱动控制系统的研究[D].重庆:重庆大学,2008.
[2]洪晔,李海平,李崇.舰船安全监控系统通用型CAN总线通讯模块设计[J].船海工程,2017(3).
[3]罗峰,孙泽昌.汽车CAN总线系统原理、设计与应用[M].北京:电子工业出版社,2010.
[4]王维斌.基于单片机的CAN总线节点的设计[J].科学技术创新,2017(31).
[5]刘俊萍.车载CAN总线技术及应用[J].天津职业院校联合学报,2009(2).
[6]纪文志,陈国忠,唐加山.基于CAN总线智能节点的设计与实现[J].微型机与应用,2012(2).