基于LIN总线的车灯控制系统
技术分类: 嵌入式系统 作者:马建辉,王知学,李研强,李建新,山东省科学院自动化研究所 发表时间:2007-08-05
本文相关DataSheet:MC33888 MC33993 MC33984
近几年随着LIN总线技术的出现,由于其成本低廉,且采用可有效保证通信负载的一主多从结构,在通信速率要求不太高的车身电子领域,可以部分替代低速CAN总线。笔者结合所研制的车灯LIN网,介绍了系统结构及硬件设计关键技术,以及相关应用协议的实现。
系统结构及硬件设计关键技术
● 系统结构
本系统包括一个主节点和四个从节点,主节点同时作为CAN-LIN网关,与车身CAN网连接。从节点为相应位置的车灯节点,节点间通过LIN总线连接,系统结构图如图1所示。主节点完成组合开关状态的检测,检测到状态变化时,主节点向从节点发送控制帧,从节点接收控制帧,完成对车灯负载的控制,同时监测过压过流过温情况的发生,并记录其状态。主节点周期性地发送查询车灯ECU状态的状态帧,并得到ECU状态。
● 关键技术
(1)开关检测
组合开关信号的状态检测采用飞思卡尔的可编程多路开关检测接口器件MC33993实现,该器件可以检测多达22路开关量输入,采用SPI方式与MCU进行状态设置及开关状态反馈,不仅实现对开关状态的可靠实时检测,同时提供“湿性电流”保护开关触点,保证开关触点的
接触完整性。
(2)车灯控制
车灯负载包括远光灯、近光灯、小灯、雾灯和转向灯,其控制采用飞思卡尔的智能功率器件MC33888和MC33984实现。这些器件不仅提供开关控制功能,还提供电流控制、限流、热保护、过压保护和先进的负载诊断。
(3)过压保护
车灯负载不能很好地承受高电压,过压是导致车灯寿命变短的重要原因。车灯额定工作电压为13.5V,实际上当提供18V以上电压达几秒,就会产生故障,可以采用PWM的方式控制车灯的有效电压值。设车灯电阻为R,车灯两端电压为U,则在时间T内,消耗的热量W=U2T/R
车灯电阻R为固定值,这样车灯承受能量正比于电压U的平方和工作时间T。可以通过PWM调节占空比d,从而调节有效工作时间T,这样当电压达到18V时,调节占空比d到(13.5/18)2=56%,便能保证车灯的正常工作。在电路中通过检测电压值V,当电压值V>13.5V时,按照如下公式计算占空比:
d=(13.5/V)2
这样通过调节占空比,实现了对车灯工作电压平均值的控制,有效保护了车灯负载。
LIN通信的实现
LIN网络的实现包括协议驱动器和应用协议两部分,协议驱动器完成通信功能,应用协议完成网络管理和故障诊断。
● LIN通信概念
LIN协议是一主多从结构,通信只能由主节点中的主任务发起,一个完整的LIN报文帧的传输是由主任务和从任务共同实现的,主任务发送“报头”,从任务发送或接收“响应”。
通信概念如图2所示。
● 协议驱动器
LIN基于SCI串行通信的格式,使得带UART的MCU可以采用中断服务程序,以状态机的方式很容易实现其协议驱动器。根据LIN的通信概念,主节点的协议驱动器要实现报头的发送、“响应”的处理,从节点的LIN协议驱动器要实现的是报头的接收和解析、“响应”的处理。
● 应用协议
应用协议规范各节点之间的信息交互方式,定义通信规则,实现网络管理和状态管理。其制定比较复杂,需要综合考虑汽车环境和网络的安全性、实时性等因素。本文结合所研制的车灯控制系统,从信号及其组装、帧的定义实现,进度表的制定的角度,初步探讨基于LIN总线的应用协议的制定及实现。
(1)信号及其组装
“信号”是“响应”的组成要素,信号的定义取决于系统的运行特点和控制对象的特性,在本车灯LIN网内,需要定义的有车灯控制信号、车灯状态信号和车灯选择对象信号。以布尔信号的形式定义车灯控制信号和状态信号,以单字节信号的形式定义车灯选择对象。
车灯控制信号包括车灯点亮信号Flight_on、车灯关断信号Flight_off、车灯闪烁信号Flight_glitter。通过对车灯进行数字编号的方式,定义了车灯选择信号Flight_select。将之按照在“响应”中的位置(以位为单位)组装为如下的方式,在控制帧内传输。
每路车灯负载对应一布尔信号,表示该路是否出现故障(过温、过压、过电流、负载开路),各车灯ECU将相关信号组装起来,在各自的状态帧中传输。
(2)帧的定义及实现
根据LIN协议,帧包括无条件帧、事件触发帧、零星帧三种。以无条件帧的形式定义控制帧和状态帧,由于车灯的控制规律,左右灯要同时打开,所以左前车灯ECU和右前车灯ECU共用一个前灯控制帧,左后车灯ECU和右后车灯ECU共用一个后灯控制帧,针对4个车灯节点,相应定义了4个状态帧,用于反馈当前控制对象的工作状态,即是否有过压、过流、过温情况发生。
对无条件帧而言,只要时间槽轮转到该无条件帧,便要在总线上完整地传输 。而零星帧的传输取决于所关联的无条件帧内信号的更新情况,只有在信号被更新的情况下,才传输所关联的最高优先级的无条件帧,然后在下个时间槽再次轮转到该零星帧时,再传输低优先级的无条件帧,否则该时间槽内总线保持静默。考虑到汽车环境对各个ECU的低功耗要求很高,且组合开关的操作是偶尔且即时的,所以以零星帧填充进度表,这样在大部分时间内,开关状态不会产生变化,即所关联的控制帧中信号不会被更新,当时间槽轮转到零星帧时,总线保持静默,超过4秒没有总线信号,主从节点便可以进入休眠状态,满足低功耗要求。表2给出了零星帧和所关联控制帧的说明。
为了降低总线负载,将4个状态帧关联到同一个事件触发帧,当时间槽轮转到该事件触发帧时,如果各个状态帧内信号没有更新,这样在主节点发送帧头后,该时间槽的其余时间内保持静默。如果有多个状态帧内的信号发生更新,这时便会产生“冲突”,主节点在当前时间槽结束后切换进度表,依次读取各个ECU的状态。
(3)进度表的制定
LIN总线的进度表定义了帧在网络中传输的次序,以及帧间的时间间隔,保证了LIN总线不会过载,同时保证了关键信号的周期性和实时性。
根据该LIN网
的特点,定义了三个进度表:Normal_table、Status_table、Trigger_table,主节点根据当前LIN网的状态切换进度表。Normal_table由零星帧填充,是主节点的主要进度表,这样可以在组合开关没有动作的情况下让LIN集群处于休眠状态,休眠指令按照LIN帧的形式发送,采用数据场第一个字节为0x00的诊断帧实现。Status_table中包含对应于四个车灯节点的四个状态帧,Trigger_table中包含关联于四个无条件状态帧的事件触发帧。由于各个车灯ECU可以对过流、过压、过温进行保护,且有保持车灯电压的功能,所以主节点可以以较长的周期把进度表切换到Trigger_table,查询相应节点的状态,当从节点有相应信号被更新时,主节点将进度表切换到Status_table,得到相应节点的状态,优先级为左前车灯ECU>左后车灯ECU>右前车灯ECU>右后车灯ECU。
具体细节如下。当时间槽轮转到零星帧control时,如果开关状态没有改变,即所关联的控制帧中信号没有被更新,该时间槽内总线保持静默,如果有一个控制帧的信号被更新,该时间槽内便会发送该无条件控制帧,如果在无条件控制帧中有多于一个信号被更新,主节点对这些控制帧做出“pending”标志,然后在该时间槽内发送最高优先级(优先级在零星帧中定义)的无条件控制帧,当进度表轮转到下一个该零星帧的时间槽时,“pending”状态的候选帧便会被发送。
主节点以1秒钟的间隔把进度表切换到Trigger_table,当时间槽轮转到事件触发帧status,如果在该帧数据场的第一个字节没有得到任何数据,即所关联的无条件状态帧没有状态信号被更新,总线在“响应场”内保持静默,如果收到一个所关联的无条件状态帧的ID,后续得到的数据即该无条件状态帧中被更新的“信号”,如果得到一个无法匹配的ID,便认为总线冲突,即同时有至少两个所关联帧中的信号被更新,这时,主节点要在该进度表下一个时间槽开始时切换进度表到Status_table,然后轮询各个状态帧,轮询结束后进度表再切换回主进度表Normal_table。
结束语
本文结合所研制的车灯控制系统,介绍了系统结构及硬件设计关键技术,从制定和实现LIN协议驱动器和应用协议的两个方面论述了LIN通信,实现了车灯控制和诊断
共1条
1/1 1 跳转至页
基于LIN总线的车灯控制系统 (ZT)
关键词: 基于 总线 车灯 控制系统 时间 通信 协议 实现
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |