1 功能简介
在设计中所用标识(ID)符为实验方便而自己定义的,将CAN主节点的标识(ID)符定义为0x55。在车灯控制系统中,CAN主节点实时监测CAN总线上的报文信息,通过MC68HC908GZ16根据标识(ID)符来判断报文信息是否是该节点所需要的信息,然后根据信息内相应位的状态来判断信息应该传给车灯控制系统四个节点中的哪一个,由此来确定LIN总线信息的传送。
汽车车灯控制系统中,前后左右四个节点的控制思想是相同的,在此以右前车灯和右后车灯为例进行说明。在右前车灯控制信息中,包括对右前大灯、右前小灯、右转向灯和右雾灯的控制信息,即需要数据信息中的4位8种控制状态就可完成对右前车灯的全部控制。在右后车灯控制中,包括对右后转向灯、右制动灯、右后尾灯和倒车灯的控制信号,同样也需要数据信息中的4位8种控制状态来完成对右后车灯的控制。其左侧灯的控制与右侧灯的控制相同,在此就不再重复。
2 开发环境
设计中,硬件编译器上选用的是某电子有限公司的M68UICS08,软件编辑开发环境选用的是某公司的Codewarrior。
M68UICS08是一个接口电路板,它对HC308系列控制器具有通用性,比如对QT、QY、QB、QL、JL、JK、GP、GT等系列控制器都适用。在使用不同的单片机前,只需按照用户手册对电路板进行简单的改动,就能够使用。M68UICS08经过标准的串行接口与PC相连,然后系统程序通过扁平电缆写入微处理器内,进行在线或者离线调试都可以。该硬件编译器如图7-42所示。
Metrowerks CodewalTior是在PC上运行的软件开发环境。它提供一个非常友好并且功能齐全的操作界面,用户既可以创建一个全新的基于给定型号目标单片机的项目文件,并在已创建的项目文件中编辑自己的应用程序,又可以在其中实现目标单片机的在线调试。
3系统软件设计
1.软件结构
一个系统工作性能的好坏很大程度上取决于程序结构的合理性。合理地安排程序结构有助于提高程序的运行速度和可靠性。该车灯控制系统的软件设计分为两部分:车灯CAN主节点设计和车灯LIN从节点设计。
车灯CAN主节点程序的整体结构如图7-43所示。首先对程序中涉及的所有变量、MCU的端口状态以及驱动函数进行初始化,由于主节点同时又作为CAN/LIN总线的网关,程序中还需要对ESCI控制模块进行相关的初始化设定。然后,程序就进入到循环执行的主体部分,在这一部分中,首先检测Mcu的输入开关量的状态,并将输入信号的二进位值存入用户设定的变量中;然后按照主节点的功能要求进行相关报文的逻辑组合;之后进行CAN报文的发送工作,CAN报文的接收是采用中断方式进行的;再接下来是进行LIN报文的发送处理;最后,程序回到循环体的入口进行下一个循环的程序执行。
车灯从节点的程序整体组成与主节点相比缺少了CAN报文的处理与输入信号的处理。当信号发生变化时,主节点才进行相关LIN报文的发送,而LIN从节点需要实时地进行相关信息报文的发送。这样,对于LIN从节点就需要在等待接收主节点LIN发送的报文的时间内处理本地节点的驱动以及本地LIN报文的发送等工作。从节点的驱动函数的实现与主节点基本相同。
无论是哪个车灯的信号发生变化,首先应该将此信号通过总线传输到其他节点上,然后再同步执行该输入信号所要求的动作。由于LIN总线是挂在CAN总线下面作为其子总线进行通信的,所以程序循环体首先应该处理CAN报文的发送和接收,然后再进行LIN报文的发送处理。而LIN从节点需要实时地接收CAN主节点发送的数据,然后分析所接收到的数据信息,最后完成对相应信号灯的控制。图7-44为LIN从节点的主流程。
2.CAN主节点发送子程序
在CAN主节点的流程图中,可以看出该模块的软件设计中包括两个发送子程序:一个是CAN报文信息的发送;另一个是LIN信息的发送。这两个发送子程序都采用循环查询方式来调用。由于MC68HC908GZ16控制器中已嵌入了CAN的底层协议,因此在发送时只需将相应的控制器及数据信息设置好,直接启动发送即可,但LIN信息的发送要借助:ESCI模块来完成。因此这里主要介绍采用ESCI灯模块来发送LIN报文信息的过程。在MC68HC908GZ16控制器的ESCI模块中,有一个比较重要的控制位:SBK(发送中止符),所谓中止符是由一系列低电平(即“0”)组成,由前面的LIN协议可知,在LIN信息开始时要有至少13位低电平的同步域,而当SBK=1时,恰好可以产生13位的低电平,故在LIN信息帧的开始,首先置位SBK=1,然后再使SBK=0,接着发送0x55同步间隔,再发送要发送的控制信息(2个字节),最后发送检验和(“0xFF”)。图7-45是CAN主节点发送LIN信息帧的子程序流程。