基于μC/OS-Ⅱ的线控转向FlexRay通信控制
3 通信程序设计 3.2通信任务设计 3.2.2 数据接收发送任务 4 实验验证 实验结果如图4所示,运行时间2 289 s,时槽变化与周期数均与设计一致,数据收发正常。由图5可知,帧速率为3 200帧/s,总计传输7 369 600帧,没有出现无效帧与错误帧,达到了实时性和稳定性的要求。 5 结语
利用任务形式来解决POC状态的检测问题,不仅可以提高程序效率以及避免死循环现象,同时,还可以建立通信故障检测报警任务,在不同的通信状态下,对驾驶员提供故障信息,方便处理。
线控转向程序结构包括系统初始化、通信控制、数据采集和控制算法四大部分。这里只对其中的系统初始化及通信控制部分进行了设计。
3.1 系统初始化
在主程序main()中,首先对MC9S12XF512芯片进行初始化,包括:时钟初始化、I/O口初始化、A/D模块初始化、PWM模块初始化以及FlexRay协议配置初始化。之后,调用OSInit()函数对μC/OS-Ⅱ操作系统进行初始化。接着创建三个任务,按照优先级顺序9、1l、13,分别为FlexRay通信启动任务、数据接收发送任务和故障检测报警任务,由这三个任务实现线控转向系统的通信部分功能,其他部分功能可通过创建其他任务进行扩展。最后调用OSStart()启动内核运行,让任务在操作系统的管理与调度下运行。
以Freescale公司开发的针对该芯片的FlexRay通讯传输层和表示层的驱动程序为基础,进行应用层的程序设计,即编写通信任务程序,完成协议的运行过程。
3.2.1 FlexRay通信启动任务
按照上文介绍的FlexRay协议中定义的协议运行过程,当对FlexRay通信进行初始配置后,协议将进入就绪状态,之后发送启动节点命令等待协议状态由启动状态变为正常主动状态;在正常主动状态中,首先发送关键帧启动网络中的其他节点,发送完成后进入到节点唤醒状态,然后开启FlexRay通信的各种中断,包括:传输中断、接收中断、存储区中断以及定时器中断等,最后挂起任务等待检测到通信故障时进行唤醒;协议正常被动状态是在通信出现故障时,重新配置协议,进行协议的重启。需要注意的是用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用Osatart()之后,由任务优先级最高的那个任务开启RTI中断,否则系统容易死锁。程序流程图如图2所示。
FlexRay数据的接收发送是通过中断服务程序进行的,因此在该任务中,只需判断POC状态是否进入正常主动状态,如果是则使用全局变量对接收函数Fr_receive_da()和发送函数Fr_transmit_data()的消息缓冲区进行数据的读取和更新。
3.2.3 故障检测任务
在通信过程中,当其他节点因故障重启或是通信线路中断时,可以利用故障检测任务检查POC状态,当协议运行在正常被动状态时,则判断为通信线路出现故障,将故障LED指示灯设定为闪烁状态;当协议运行在暂停状态时,则判断为节点控制器故障,故障LED指示灯设定为常亮状态,并对FlexRay通信启动任务进行解挂,重新对协议进行配置,待故障解决,系统可以自动启动节点运行。程序流程图如图3所示。
使用Vector公司的CANoe软件,可以方便地观察FlexRay总线上的数据流情况。实验中,将CANoe软件提供的FlexRay接口板VN3600接入总线网络中,之后参考MC9S12XF512芯片手册中FlexRay通信的MicroTick定义为25 ns,因此在FlexRay初始化定义中,设置参数P_MICRO_PER_M-ACRO_NOM为40,则一个MareroTick等于40个MicroTick,也就是说,FlexRay通信配置的基准时间片为lμs。据此,配置通信周期为5 000 μs;1个静态时槽长度为24μs,共有91个;1个动态时槽为5μs,共有289个;特征窗与网络空闲时间为1 371μs。
程序中对节点Node_A和Node_B的时槽定义如表2所示。
在通信过程中,分别进行故障模拟实验。
(1)突然断开总线来模拟应用现场出现线路故障的情况,可以发现数据停止更新,故障检测LED指示灯闪烁,说明程序检测到了线路故障问题并进行报警。当再次连接总线后,故障检测LED熄灭,数据继续更新,说明通信自动重新启动。
(2)将任意一个控制器进行掉电,模拟单一控制器故障情况,可以发现数据停止更新,故障检测LED指示灯开始常亮,说明程序检测到了任意节点故障导致通信中断的问题并进行报警。当再次开启掉电控制器后,故障检测LED熄灭,数据继续更新,说明通信自动重新启动。通过以上两个实验,验证了故障检测报警功能良好。
针对线控转向系统FlexRay通信过程中存在的问题,将实时操作系统μC/OS-Ⅱ应用于系统中,进行了代码移植和通信任务设计。之后通过硬件实验,对数据结果和故障检测进行了测试,从实验结果可以看出,该系统解决了FlexRay总线应用的复杂问题,并利用μC/OS-Ⅱ操作系统保证了系统实时性、稳定性和安全性的要求,为今后实现线控转向系统在汽车辅助驾驶和智能驾驶方面的应用奠定了基础。
- 汽车网络用数据线扼流圈改善电磁兼容研究(05-01)
- Adura Systems 采用飞思卡尔的FlexRay汽车微控制器技术(05-04)
- 技术动态 未来的汽车电子发展趋势解析(09-09)
- 基于FlexRay的媒体接入控制设计(01-04)
- FlexRay的通信控制器媒体接入控制设计(01-21)
- FlexRay总线的功能安全性分析(01-21)