一种“动静结合”的CAN总线调度算法在汽车电子控制
CAN总线最初是由德国BOSCH公司于20世纪80年代初提出的,当时主要应用于汽车电气通信,它将汽车上各种信号的接线只用两根简洁的电缆线取代,而各种电子装置通过CAN控制器挂到这两根电缆上,设备之间进行数据通信和数据共享,从而大大减少了汽车上的线束。CAN总线结构独特,性能可靠,目前被公认为是最有前途的现场控制总线之一。
1、基于CAN总线的汽车电子控制网络中潜在问题
从信息共享角度分析,现代典型的汽车电子控制单元有:电控燃油喷射系统、电控传动系统、防抱死制动系统(ABS)、防滑控制系统(ASR)、巡航系统、空调控制系统等,用CAN总线将各个单元节点连接起来,组成实时通信网络。
汽车CAN总线网络在实际运行过程中,众多节点之间需要进行大量的实时数据交换,不可避免会出现总线负荷过大的情况。当信息帧的碰撞概率达到一定程度时,系统中一部分信息帧的收发就会产生延时,甚至根本不能收发成功。这样,当驾驶员刹车时,即使时延只有几个毫秒,但时速100公里的汽车也可能在这期间内全速驶出3~4米,后果将不堪设想。
为了解决上述问题,本文提出了一种结合TTCAN(Time Triggered Controller Area Network)技术和动态晋升机制[4]各自所长的“动静结合”的调度算法。该算法有效解决了数据的发送时延和冲突问题,改善了CAN总线数据传输的实时性。
2、基于TTCAN技术的时间触发调度方式
TTCAN由时间进程驱动,其时间触发调度由顺序固定的时间窗组成。时间窗是用于交换报文的时间片断,通常有三类时间窗:专用时间窗(特定的周期性报文)、仲裁时间窗(通过仲裁访问总线的报文)和空闲时间窗(为总线扩展所保留),如图1所示。专用时间窗类似于TDMA(时分多路访问),属于离线进行的静态调度,所有流程和时间参数均需要预先指定,并可以在多级或多个TTCAN网络内实现同步。TTCAN的全局时间由时间主机周期发送的参考报文产生,它的总线最多可以配置8个具有优先级的时间主机节点,以确保总线的连续、确定性通信,优先级最高的时间主机为当前时间主机。
图1 TTCAN的基本周期和时间窗
在节点编程时,可以利用处理器的定时器中断周期作为NTU(Network Time Unit),其值定义为在CAN总线上以1Mbps的速率传输1帧8字节数据帧所需时间的八分之一,约为16.75μs。对周期中断次数进行计数,总线的调度从主节点发送参考报文开始,当计数器值与节点设定值相符时,则发送周期报文。传输数据帧时的时间窗利用率可以定义为:时间窗利用率=(传输数据帧所需的NTU数/时间窗长度)×100%。在实际测试中可以发现,当时间窗小、调度周期数大时,误码率较大;当时间窗增大即时间窗利用率较低时,误码率基本维持在很低的水平。
3、基于动态优先级调度算法的事件触发调度方式
仲裁窗发送事件触发报文,如果采用传统的静态优先级分配机制,将会在网络负担繁重的情况下出现发送传输时延或者丢失报文。而动态优先级调度算法则能很好地解决这一问题。以下是该算法的基本原理。
首先,将CAN的仲裁域(以扩展帧格式为例)分成优先级和标识两部分,如图2所示。标识部分是固定用来标识协议帧的,这也是协议帧的惟一标识,与传统协议帧标识符的意义完全相同;优先级部分已经不再具有协议帧的标识功能,而只是表示协议帧的优先级功能,所以它可以根据总线调度机制分配给协议帧的优先级的变化而变化。
图2 CAN扩展帧格式的仲裁域的划分
其次,当协议帧第一次发送、且当它在发送时和其他协议帧碰撞并失去仲裁时,即退出发送,并置优先级上升一位后,再重新发送。因为这时其优先级高于其他协议帧,在整个网络中如果没有其他与之具有相同优先级的协议帧同时发送,即使和其他的协议帧(处于第一次发送的)碰撞,也会赢得仲裁,所以发送成功的概率很大。
实现动态优先级晋升的算法很简单,其软件流程图如图3所示。
图3 动态优先级调度算法的程序流程图
4、调度算法在汽车电子控制网络中的应用
作者设计了防抱死系统(ABS)、电子助力转向系统(EPS)以及车身控制系统(兼做低速CAN总线与高速CAN总线之间的网桥)作为CAN总线汽车电子控制网络节点,上位PC机节点采用IXXAT公司的CANlink模块(CAN-RS232转换器)与总线相连,并使用该公司的CAN BUS Tester(CAN总线测试仪)模块以及CanAnalyser(CAN总线分析开发)软件进行了CAN网络的设计和开发。采用本文介绍的调度算法,应用层部分采用的是目前流行的J1939协议。
4.1 汽车电子控制网络硬件设计
防死抱系统、电子助力转向系统及车身控制系统的处理器均选用了飞思卡尔公司的MC9S12DP256芯片,该芯片是一款低成本、高性能的16位HCS12系列微处理器,内置有msCAN控制器,非常适合作为汽车电子控制单元的核心部件; CAN总线收发器选用的是MC33989(高速总线)芯片和MC33388芯片(低速总线);车身控制系统中的LIN总线收发器和电机驱动选用的都是MC33399芯片;车灯及其他负载的驱动选用的是MC33888芯片。网络整体框图如图4所示。
图4 汽车电子控制网络的整体框图
4.2 汽车电子控制网络软件设计
利用CodeWarrior集成开发环境IDE(Integrated Development Environment),通过背景调试方式BDM(Background Debug Mode),下载控制程序和修改相关参数,在不干扰目标程序运行的情况下,实时监测各寄存器和存储器,实现了控制程序的板上在线调试,从而提高了集成系统的开发效率和试验的方便性,缩短了试验周期。
系统所需软件模块主要由系统初始化模块、启动自检模块、主控制模块、数据采集模块、数据处理模块、参考车速计算模块、控制决策和执行机构动作模块、故障诊断模块、总线通信模块等几大部分组成。各模块由主控制模块按任务管理机制实时进行统一调度,分配运行时间,进行数据和信号的交换。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码