引言
随着汽车智能化程度的提高和迅速升级换代的需要,汽车电子网络正在由集中式控制向发展。作为CAN总线的有效补充,以低速率和低成本的实现有效解决了分布式控制带来的成本增加问题。在笔者研制的车身分布式控制系统中,采用CAN总线和LIN总线连接各个控制单元,完成单元之间的数据交换,系统结构如图1所示。
图1 车身控制系统结构图
该车身控制系统包括车灯模块、车门模块、车内模块、控制面板模块和仪表盘模块,分别完成对相应负载的控制和监测,同时通过CAN总线完成数据交换。其中车灯模块和车门模块基于CAN/LIN总线以分布式的形式实现。本文重点论述的是LIN协议的实现。
LIN协议分析和状态机的设计
是由一组状态、一个起始状态、输入以及将输入与当前状态转换为下一个状态的转换函数所组成,它是一个特殊的有向图,包括一些状态节点和连接这些状态的有向弧。对特定的状态机而言,首先要建立一些有效的状态,然后设计相应的算法完成状态的转换。
一个完整的LIN帧由间隔场、同步场、PID、数据场以及校验和场组成,LIN协议驱动器要实现的便是依序完成间隔场和同步场的检测、ID的发送和接收、数据场字节的发送和接收,最后完成校验。状态机形式与LIN协议数据链路层规范的定义相吻合,可以通过建立相应的状态来描述相应的场从而描述整个 LIN帧,且可以通过监控当前状态,按照当前接收到的字节切换其状态,从而以状态转换的方式依序完成各个场的发送和接收。设计以下几个状态:IDLE、BREAK、SYNBYTE、 IDENTIFY、TRANCEIVE和 CHECKS UM,设置标志位state反映LINdriver的状态,idle,pendin g,succe ss,当处于LIN正确通讯的中间状态时,state=pending,当LIN通讯失败,state=idle,当完成一次完整的LIN通讯,state=success。
状态的监控和转换是在UART接收中断服务程序中实现的。因为LIN总线采用单根线通信,UART外接 LIN物理层收发器,所以当UART发送的总线数据和接收到的总线数据一样时,UART接收到的数据便是UART发送的数据,在接收中断服务程序中完成状态转换算法,如图2。通过判断当前状态和接收到的数据切换LINdriver的状态,同时更新标志位。
图2 LIN协议状态机
软件设计
软件设计流程如图3所示。首先进行初始化,主要包括UART模块的初始化和I/O脚初始化,设置波特率,使能接收中断,设置LIN物理层收发器相应I/O脚方向及电平,然后在UART接收中断服务程序中以状态机的形式完成LIN通讯。下面结合LIN帧结构和 LINdriver的状态转换对该状态机算法进行阐述。
图3 软件流程图
评论
加载更多