基于CAN/LIN总线的车灯驱动控制系统软件设计(下)
时间:05-08 17:17 阅读:2110次
*温馨提示:点击图片可以放大观看高清大图
简介:在车灯控制系统的CAN主节点程序设计中,包括两个接收子程序:一个是CAN报文信息的接收,另一个是LlN信息的接收。为了实现实时的控制,这两个接收子程序都采用中断方式来完成。这里主要介绍CAN报文信息的接收过程,主节点LIN信息的接收与ESCI的数据接收相似。
3.CAN主节点接收子程序
CAN总线节点实时检测CAN总线上的信息,并判断总线上的信息是否是本地节点所需的信息。本地节点标识符为0x55,因此在:MC68HC908GZl6微处理器由MSCAN模块中CIDMRx(标识符屏蔽寄存器)寄存器和CIDARx(比较寄存器)寄存器来对所检测到的信息进行筛选,如果标识(ID)符异或比较寄存器内的二进制数的结果和屏蔽寄存器内的二进制数取反相与的结果为零,则可以接收该信息帧,否则拒绝。除了在系统初始化时对屏蔽寄存器和比较寄存器进行设置外,其他操作都是由微处理器自动完成的。接收完该信息帧后,可以直接从DSRx(数据寄存器)中直接将所接收到的信息读出,以备后用。本设计中,由于控制信息量较少,每个信息帧只传送2个字节的数据,接收节点也只接收2个字节的数据。数据信息中各个位所代表的意义是人为规定的,即所控制的那个信号灯是由程序设计者自己定义的。图7-46为CAN节点接收信息帧的子程序流程。
4.从节点接收和发送子程序
车灯驱动控制的四个节点都是与LIN总线直接连接,因此车灯的控制信号也是由LIN信息传送,这包括LIN信息的接收和对从节点车灯状态的反馈信息的发送。由于车灯四个节点的控制相似,现以右后灯为例说明LIN信息的传送。
汽车右后灯ID号设为0x02,其ID域设为0x42,传送的信息数据为2字节。LIN信息的接收采用中断方式,当MC68HH908QL4控制器检测到符合该节点要求的信息帧后,则首先根据ID来判断本地节点接收到的是什么信息帧,如果为数据帧,则接收2字节的数据信息;如果是命令帧,则将本地节点车灯的状态以信息帧的形式发送回主节点,以反映节点情况。然后,如果是接收数据帧,则在SLIC模块的SLCDx(数据寄存器)中读取相应的信息。最后根据数据信息中相关的位进行车灯控制。右后灯模块所需要控制的灯主要有右转向灯、制动灯、尾灯和倒车灯,由于灯的控制只需要两个状态:开和关,因此每个灯只需要一个二进制位就可以控制:“1”使相应的灯亮,“0”使相应的灯灭。在设计中,数据信息相应位的定义分别为:数据信息中第一个字节的第一位代表右转向灯,第二位代表制动灯,第三位代表尾灯,第四位代表倒车灯。为控制的准确性和减少对功率驱动芯片的操作,并没有直接用所接收到的信号去控制,而是采用将这次收到的信息与上次收到的信息进行比较,如果一致,则保持上次车灯的状态不变,否则才会对功率芯片进行操作,完成车灯状态的转换。对于LIN信息的发送,由于MC68HC908QIA已将LIN协议嵌入了底层结构,因此只需将车灯的状态信息装入发送数据寄存器即可。
图7-47为LIN从节点对信息帧的处理子程序流程,该流程包含了LIN信息的接收和发送两部分。
4 CAN/LIN总线的部分信号图
由CAN控制模块的开关作为车灯控制开关,控制器根据开关信号发出满足LIN总线协议的控制信息。通过示波器可以方便地在基于CAN/LIN总线的车灯驱动控制系统硬件电路中,直观地看到CAN总线和LIN总线上的波形。CAN主节点的报文信息格式波形如图7-48所示,这是一个完整的数据帧,包括了帧起始、仲裁域、控制域、数据域、CRC域、应答域、帧结尾,这个数据帧数据域只传送了一个字节的数据,数据字节的多少根据信息传输的要求是可以修改的。这里一个字节已经能够满足信号的控制要求。
车灯的四个从节点信息是采用LIN总线进行传输的,各节点的标识符分别是0x01、0x02、0x03和0x04,相应的ID域分别为0xC1、0x42、0x03和0xC4。由LIN总线的协议可知,LIN总线中的不同标识符代表不同的任务,在本系统中,由于一个标识符传送的信息量足以完成一个节点所要完成的控制功能,故每个节点只定义一个标识符。在车灯控制系统中,每个灯的控制信号可以用数据信息中的一位来控制,“1”代表灯亮,“0”代表灯灭。图7-49和图7-50分别为右前灯和右后灯LIN总线上由MC68HC908GZ16发出的控制信息。