引言
LIN协会于1999年发布了第一版LIN协议,至今已有十几年了,在这十几年中,LIN总线不断发展,已经在以车身控制为主的许多场合得到了应用。LIN总线至今一共有7个版本,其中,LIN2.1协议于2006年11月发布,是目前较新的一个版本。它与最新的LIN2.2协议几乎没有区别,却比它的前身LIN2.0协议有明显的改进,主要体现在加入了事件触发帧的竞争处理、完善了节点配置功能和进行了诊断分级三个方面。这些改进使用户可以更加方便和快速地组织LIN网络,可以根据自己的需求重新设置LIN网络,既保证了产品的稳定性,又满足了用户的个性化需求,是LIN总线自身发展过程中很有意义的一步。
1 LIN2.1协议的新特点
1.1事件触发帧的竞争处理
如果有多于一个的从节点在同一个帧时隙里响应帧头,就会导致竞争,竞争处理郜是由主节点完成的。LIN2.0的事件触发帧竞争处理机制如图1所示。某主节点的进度表中有无条件帧A、事件触发帧和无条件帧B.当竞争发生后,主节点会继续按照之前的进度表,在接收完所有与事件触发帧相关的无条件帧后,再发送事件触发帧帧头。LIN2.1对此作出了改进,它引入了竞争处理进度表,LIN2.1的事件触发帧竞争处理机制如图2所示。每个事件触发帧都有与之相对应的竞争处理进度表,主节点在竞争处理进度表里处理完竞争后,再返回执行普通的进度表。显然,LIN2.1的竞争处理机制需要花费的时间较短。
1.2节点配置功能的完善
1.2.1新增分配一系列帧ID的功能
将配置功能分配帧ID改为分配一系列帧ID.LIN2.0和LIN2.1协议中分配帧ID的格式如图3所示。在LIN2.0中,只有NAD和Supplier ID都匹配的情况下,分配才能成功,但每次只能分配一个帧ID.而在LIN2.1中,只需要NAD匹配就可以了,每次可以分配最多4个帧ID,而LIN 2.0中的Message ID在LIN2.1中已经被取消了。这种改进的目的是提高LIN网络配置的效率,更改后分配帧ID的速度最快可达到原来的4倍。
1.2.2新增保存配置的功能
LIN2.1协议新增了保存从节点配置信息的功能,将从节点的配置信息存入到掉电不易失的存储空间中。这样,主节点对从节点的配置存复位后也不会丢失。
1.3诊断分级
LIN2.1的另一大新特点是根据诊断功能将从节点分为3个级别。
(1)诊断一级
诊断一级一般应用于智能传感器或执行器等一些不需要或只需要很少诊断功能的器件。诊断一级支持所有节点配置功能,并且只需要单帧传输。
(2)诊断二级
与诊断一级相比,诊断二级的节点增加了节点辨识的功能。例如,用户可以获得产品的软、硬件版本号等。此外,诊断二级还支持读写软件内部的参数,比如温度、车速等。诊断二级支持多帧传输。
(3)诊断三级
诊断三级的节点不仅包含了前面两级的所有功能,还支持内部Flash的擦写,用户可以通过LIN总线烧写程序。诊断三级支持多帧传输。
2 LIN2.1协议的节点配置功能
(1)分配NAD为了避免某个NAD被重复使用,用户可能需要为从节点分配新的NAD。
(2)有条件分配NAD当用户替换或增加从节点时,可能会出现两种情况:
①一种是用户不知道新增从节点的初始NAD,因此,必须以“广播”的方式寻找所有的从节点并分配有效的NAD(“广播”指的是给网络中的所有从节点发送请求,它有一个专用的NAD为0x7F)。但如果直接这样做,会导致所有的从节点获得同一个NAD,这显然是不允许的。为了避免这个情况,可以加入限制条件。
②另一种是用户知道新增节点的初始NAD,但其和LIN网络中已有从节点的NAD重复了。
如果用户只按照原始NAD分配新的NAD,则会导致两个从节点的NAD都被修改。因此,必须加入限制条件。当从节点获得有条件分配NAD的请求后,将根据下面的步骤判断是否要修改NAD:
①根据ID读取从节点的相关信息。
②根据Byte提取相关信息中一个8位数据,例如Byte=1,则提取D1.
③与Invert进行异或运算。
④与Mask进行与运算。
⑤如果结果为0,则修改NAD.例如:本产品被新增到一个LIN网络中,初始NAD为0x06,但网络中已有了一个NAD为0x06的从节点。于是,用户可以利用本产品的Func tion ID,假设为0x0000,分配新的NAD为0x08.这里似设已存在的从节点的Function ID不为0x0000.这样,只有新增节点的NAD会被修改,而已存在从节点的NAD维持为0x06不变。
(3)保存配置保存配置是LIN2.1添加的新功能,用来将从节点的当前配置存入非易失的存储空间中,下次上电时可以读出配置数据,这里主要是保存NAD和帧ID.(4)分配一系列帧ID这一功能可以配置最多4个帧ID,注意诊断帧ID和保留帧ID是不能配置的。
主节点的请求帧在D1中给出需要分配帧ID的第一个帧在帧数组中的序号,一般来说,从节点所用到的所有帧的ID会被排列成一个帧数组。如果要分配帧ID,则通过D2到D5给出新的帧ID;如果要禁止某个帧,则将这个帧对应的PID设为0x00;如果要继续使用现在的帧ID,则将这个帧对应的PID设为0xFF.(5)读取从节点信息读取节点信息根据D1中ID的值,可以读取不同的从节点信息。目前,只规定了ID为0和ID为1的情况,其他可保留或由用户自己确定。
3 LIN通信的实现
3.1 TLE9832的LIN模块
TLE9832是一款由英飞凌公司生产的8位功率级单片机,专门用于车窗控制。其中的LIN总线模块支持LIN2.1和LIN2.0,并向下兼容LIN 1.3.该模块可以工作在普通模式、接收模式和禁止模式下。各个模式的特点如表1所列。
其中,普通模式又可根据传输速率的大小分为低速模式、中速模式、高速模式和Flash模式。低速模式的最大传输速率为10.4 kbps;中速模式是普通的LIN传输模式,最大传输速率为20 kbps;高速模式的最大传输速率为40 kbps;Flash模式的最大传输速率为11 5 khps.为了避免打断传输过程,在普通模式下禁止改变传输速率。正确的做法是先禁止发送功能,再改变传输速率,最后允许发送功能。
LIN模块在普通模式下还建立了一种自动省电机制。当发送队列中没有数据时,将自动禁止发送功能;当有发送请求时,将自动开启发送功能。
3.2基于TLE9832的车窗防夹控制系统
基丁TLE9832的防夹车窗控制系统是英飞凌-同济微控制器与嵌入式系统实验室的最新研究成果。用户可以通过按键或者LIN总线控制车窗的上升和下降。基于TLE9832的防夹车窗系统原理图如图4所示。可通过控制PWM信号控制电机的转速,而霍尔传感器TLE4966又会采集电机的转速并传送给TLE9832,这样就构成了闭环控制。此外,电机的电枢电流在转化为电压信号后,被传送给TLE9832的ADC模块。如果车窗在上升过程中遇到不正常的阻力,电枢电流和电机转速都会发生异常的变化,TLE9832可以根据这种变化判断是否执行防夹算法,避免伤害乘客。
3.3 LIN通信部分的软件设计
LIN通信部分的程序流程如图5所示。可将车窗控制器中LIN通信部分的程序分为两个部分:①第一部分为初始化,在每次重新上电后,程序都会首先读取Flash中的数据,若0x8000中的数据为0x78,则判断产品在出厂后执行过保存配置的功能。所以程序会将存储在Flash中的NAD和帧ID读出来,作为当前的NAD和帧ID.接着是初始化LIN模块,包括设置与LIN通信相关的定时器和UART等外设,设置从节点的各个参数、波特率等。
②第二部分则放在定时器中断里面,在每次中断时进行节点配置、数据的发送和接收。首先是根据帧ID判断有无节点配置任务,若有则根据SID执行各种节点配置任务;接着根据收到的数据帧内容控制车窗的自动上升和自动下降;最后将车窗信息,包括电枢电流、车窗位置等发给主节点。
4 LIN通信的测试结果
本测试借助Kvaser公司出品的LIN通信测试工具Lcaf Professional LIN及其配套软件CANLab完成。测试时测试工具设置为主节点,TLE9 832单片机设置为从节点,比特率设置为19200 bps.初始NAD设置为0x06,初始帧ID为无条件帧0x00、0x01和诊断配置帧0x3C、0x3D,Suppli erID和Function ID都为0x0000.首先测试节点配置的各个功能:先测试分配NAD功能,将NAD修改为0x03;接着测试有条件分配NAD功能,将NAD修改为0x08;然后测试分配一系列帧ID功能,并保存设置;最后重新上电,并读取从节点信息。节点配置功能的测试结果如图6所示。
然后通过LIN总线控制车窗自动上升和下降,测试结果如图7所示。
最后通过LIN总线获得车窗上升过程中电枢电流的数据,并转换成图形,如图8所示。其中电流值为经过A/D转换后的结果。
结语
本文基于LIN2.1协议设计了防夹车窗控制系统中的通信模块。可以看出,该模块可以很好地满足用户在数据传输和诊断等方面的需求。LIN总线自身的发展必将推动车身控制领域的进一步发展。