基于MC9S12DG128的汽车CAN总线智能节点设计
李涵武1,王春林2,赵雨旸1
【摘 要】介绍汽车CAN总线节点设计,提出一种基于微控制器的总线节点解决方案。选择MC9S12DG128作为节点控制器,选用PCA82C250收发器;软件设计编程实现对CAN总线节点数据通信,即完成CAN控制器初始化、报文发送和报文接收,同时简要描述CAN总线协议2.0报文格式。最后以一种CAN信号模拟装置的CAN节点模块为设计实例,进一步表述汽车CAN总线模块设计,指出CAN节点模块设计方法可行且相对硬件电路简单。 【期刊名称】黑龙江工程学院学报(自然科学版) 【年(卷),期】2011(025)004 【总页数】4
【关键词】CAN总线;汽车局域网;MC9S12DG128;节点设计
控制器局域网络(CAN Controller Area Network)是德国Robert Bosch公司在20世纪80年代初为解决现代汽车的实时数据交换而开发的一种串行数据通信总线。具有高保密性,是一种能有效支持分布式控制或实时控制的串行通信网络。近年来,CAN总线作为一种可靠性高、价格低廉、技术成熟的现场总线,在国内外得到了广泛的应用,在汽车行业CAN总线更是以其优异的性能成为汽车局域网的发展趋势。
汽车电子控制系统采用网络化设计,利用CAN总线构成控制系统局域网络,可以实现各子系统的资源共享,减少导线数量、简化线束、减少冗余传感器及相应硬件配置,降低成本,提高各系统的运行可靠性。
1 CAN总线节点模块硬件设计
采用微控制器为 MC9S12DG128B。MC9S12DG128B是Freescale公司推出的S12系列微控制器中的一款增强型16位微控制器。其接口模块包括 SPI、SCI、IIC、A/D、CAN、PWM 等,在汽车电子等应用领域具有广泛的用途。MC9S12DG128B的MSCAN模块可以实现CAN总线功能,是一个传输控制器,控制策略基于Bosch公司1991年制定的CAN 2.0A/B协议。MSCAN模块如图1所示。
收发器选用美国PCA公司的PCA82C250收发器,为高速CAN收发器。其功能是将MSCAN模块发送端引脚(TXCAN)的统一异步串行收发器信号(UART)转换为实际总线的互补差分信号,并把CAN总线上的差分信号转换为接收端引脚(RXCAN)的单线串行信号。CAN控制器与物理总线间的接口设置如图2所示,选定终端电阻为120Ω。
2 CAN总线协议报文格式
CAN协议工作原理的描述篇幅很大,下面简要描述作为软件设计基础部分的CAN总线协议2.0报文格式。CAN总线的数据帧格式如图3所示。
CAN数据帧分为:开始场(SOF)、仲裁场、控制场、数据场、循环冗余校验场(CRC)、应答场(ACK)和帧结束(EOF)。
开始域由一个单独的支配位(逻辑0)组成。接收节点用这个位来同步数据的接收。仲裁域包括一个消息标识数字,接收节点用这个标识数字来决定接受或者拒绝一个特定的数据帧,这个标识有11位或者29位,前者对应于标准格式,后者对应于扩展格式。仲裁域也包括一个远程传输请求(RTR)位来区别一个数据帧和远程帧。对于数据帧,这个位必须为支配(逻辑低),而远程帧则必须为退让(逻辑高)。
控制场由6位组成,包括数据长度码(DLC)和2个保留位r1、r0,在数据帧里这2位必须为显性位。DLC为4位,指出数据场里的字节数目,编码为0~8。循环冗余校验(CRC)域用来测试接收数据的有效性。CRC域以CRC分隔符(退让位)结束。应答场(ACK)长度为2位,包含应答间隙和应答界定符。在应答场中,发送器发送这2位为隐性位。帧的最后一个域由7个退让位组成。
3 CAN总线节点模块软件设计
CAN总线节点的设计主要包括三部分:CAN控制器初始化、报文发送和报文接收。CAN控制器初始化流程如图4所示。CAN收发程序负责接收和发送消息。当CAN收发模块从CAN总线上接收到数据后,首先将标识符与过滤器中的记录做比较,如果符合要求,则把数据域的数据传递给各功能模块;当需要向CAN总线发送数据时,则由主函数调用CAN收发模块的发送函数,并定义标识符和数据等信息。
4 节点模块设计举例
为进一步表述汽车CAN总线模块设计,以一种CAN信号模拟装置的CAN节点为设计实例。
为实现汽车CAN总线仪表的检测工作,设计CAN信号模拟装置,该装置可以通过测试者的手工设定,由信号模拟输出载有车速、发动机转速、燃油箱燃油存量、发动机冷却液温度等状态的CAN总线报文。报文经CAN总线输入被测汽车CAN仪表,最终在仪表显示装置上显示数据量值,对比在信号模拟装置液晶显示屏上显示的输入数据和汽车仪表上显示结果即可以完成对汽车CAN仪表的基本检测。信号模拟装置的硬件组成如图5所示。
信号模拟装置软件设计定义了4种标准模式的消息与被测试仪表进行通讯,它
基于MC9S12DG128的汽车CAN总线智能节点设计



