LIN总线
LIN总线主要用于不需要CAN性能、速率和复杂性的低速系统,是一种低成本的串行通信网络,采用一个主节点及若干从节点的结构,基于通用的UART/SCI的硬件接口,最高速率可以达到20kb/s。
LIN总线通过报文帧进行数据传输,一个完整的报文帧包括帧头和信息响应。报文头包括间隔场、同步场和标志符场。间隔场由至少13个位时的持续显性电平(0)组成,标志着一次数据通信过程中报文帧的开始。同步场包含时钟同步信息,其格式是0x55,所有从机节点在正确接收同步字节场后,准确计算出主机节点将要发送数据的波特率,并以此波特率作为下一步要发送或接收数据的波特率设定值,从而实现从机节点与主机节点时钟的同步。标志符场定义了信息的内容和长度。报文响应由主机节点或从机节点根据标志符场的信息发出,由2、4或8字节长度的数据和1字节的校验和构成。校验通过计算数据的全部字节而得到,用于接收方验证数据的正确性。
图 1完整的LIN信息帧
功能描述
车载防盗报警模块是车身控制模块的一个从节点,主要功能有以下3点:一是与BCM之间保持通信联系并上报防盗报警模块的状态信息;二是接收车身控制模块的命令并驱动喇叭发出报警声;三是监测连接防盗报警模块与BCM之间的电源线、地线和LIN线是否被割断并发出报警声。
实现方案
1 器件选择
本系统的两个主要器件为LIN收发器和微处理器。由于防盗报警模块是电池供电的LIN节点,所以在器件选取时需要尽量考虑低功耗的器件。LIN收发器选取TJA1020,它是连接车身控制器与防盗报警模块之间的物理媒体连接,也是LIN主/从机协议控制器和 LIN传输媒体之间的接口。协议控制器输入引脚TXD的发送数据流被LIN收发器转换为总线信号,而且电平翻转速率和波形都受到限制,以减少电磁辐射。 TJA1020的接收器检测到LIN总线上的数据流并通过RXD引脚将它传送到协议控制器。TJA1020具备低功耗管理模式,它在睡眠模式中几乎不消耗电流并在错误模式中减小功率消耗。所以,TJA1020非常适用于防盗报警模块这种以电池供电的LIN节点。系统采用意法半导体的8位微处理器 STM8S105K4作为主控单片机,靠内部128kHz时钟驱动运行时,静态功耗可以低至0.6mA。满足系统对低功耗要求的同时具备LIN控制器与电池电量检测10位ADC功能。
2 信息帧分类与系统状态定义
对车身控制系统与防盗报警模块之间的通信信息帧做了如下的定义:
唤醒命令用于将系统从睡眠状态唤醒到未设防状态,睡眠命令用于指令系统进入睡眠状态。命令信息帧的内容包含设防、解防、报警命令,以及对报警状态如报警周期、次数等属性的定义。系统的状态转换如图2所示。
图2 状态转换图
3 基本框图
系统基本框图如图3所示,系统与外部的接口有3个,LIN线、电源线和地线。车载蓄电池分别向可充电电池、TJA1020和MCU进行供电,其中可充电电池的作用是在汽车蓄电池电源被剪断时向系统提供报警所需的电源。
图3 系统基本框图
初始情况,TJA1020处于休眠状态并通过INH引脚切断对MCU的供电,此时系统的状态定义为睡眠状态。连接汽车蓄电池相当于 TJA1020的NWAKE管脚产生电平变化,从而触发TJA1020的外部中断唤醒,同时TJA1020的Tx管脚会产生强下拉。当有远程LIN信息帧唤醒TJA1020时,Tx管脚会产生弱下拉。TJA1020被唤醒后,会通过INH管脚打开对MCU的供电使MCU开始工作,系统进入未设防状态。
在未设防状态下,MCU通过GPA端口检测是否存在汽车蓄电池供电信号,如果不存在供电信号,系统在一定时间后通过连接NSLP的GPB管脚令TJA1020进入休眠状态,TJA1020则会通过INH管脚关闭MCU的电源供给,系统返回睡眠状态。汽车蓄电池供电存在时,若收到LIN睡眠信息帧,系统也进入睡眠状态。
系统在非睡眠状态时可以通过接收BCM的LIN命令信息帧在未设防状态、设防状态和报警状态之间进行转换。系统处于设防状态和报警状态时,不会进入睡眠状态。
4 软件流程
系统的软件主要包括实现单片机与LIN总线通信的程序以及单片机对防盗报警喇叭控制的主程序。为确保通信的实时性,系统采用了高优先级中断来接收LIN总线上的信号。为了保证系统的实时性,在中断处理时除了进行一些简单的判断和数据接收外,其他部分都在主程序中处理。
图 4主程序流程图
一旦总线上出现有效的显性电平,控制器立即转入高优先级中断处理函数,首先判断是否为主机节点发送的间隔场,如果是间隔场则接收同步场和标志符场,若不是同步场则退出等待下一次中断。在接收到正确的标志符后,若标志符要求系统发送信息,系统则发送数据场及校验和场,发送完成后又开始等待接收下一帧数据。若标志符不是要求本机进行数据发送,则接收随后的数据场及校验和场,在主程序中再根据标志符判断所接收的数据是否对本机有效,有效的就进行相应的处理,无效就丢弃,处理完成后又开始等待接收下一帧数据。