理论教育 汽车中应用的系统软件设计

汽车中应用的系统软件设计

时间:2023-10-07 理论教育 版权反馈
【摘要】:对于LIN信息的发送,由于MC68HC908QL4已将LI

汽车中应用的系统软件设计

9.2.4.1 软件结构

一个系统工作性能的好坏很大程度上取决于程序结构的合理性。合理地安排程序结构有助于提高程序的运行速度和可靠性。该车灯控制系统的软件设计分两部分:车灯CAN主机节点设计和车灯LIN从机节点设计。

车灯CAN主机节点程序的整体结构如图9-18所示,首先对程序中涉及的所有变量、MCU的端口状态以及驱动函数进行初始化,由于主机节点同时又作为CAN/LIN总线的网关,程序中还需要对ESCI控制模块进行相关的初始化设定。然后,程序就进入到循环执行的主体部分,在这一部分中,首先检测MCU的输入开关量的状态,并将输入信号的二进位值存入用户设定的变量中;然后按照主机节点的功能要求进行相关报文的逻辑组合;之后进行CAN报文的发送工作,CAN报文的接收是采用中断方式进行的,再接下来是进行LIN报文的发送处理,最后,程序回到循环体的入口进行下一个循环的程序执行。

978-7-111-29993-6-Chapter09-22.jpg

图9-18 CAN主节点主流程图

车灯从机节点的程序整体组成与主机节点相比缺少了CAN报文的处理与输入信号的处理。当信号发生变化时,主机节点才进行相关LIN报文的发送,而LIN从机节点需要实时地进行相关信息报文的发送。这样,对于LIN从机节点就需要在等待接收主机节点LIN发送的报文的时间内处理本地节点的驱动以及本地LIN报文的发送等工作。从机节点的驱动函数的实现与主机节点基本相同。

无论是哪个车灯的信号发生变化,首先应该将此信号通过总线传输到其他节点上,然后再同步执行该输入信号所要求的动作。由于LIN总线是挂在CAN总线下面作为其子总线进行通信的,所以程序循环体首先应该处理CAN报文的发送和接收,然后再进行LIN报文的发送处理。而LIN从机节点需要实时地接收CAN主机节点发送的数据,然后分析所接收到的数据信息,最后完成对相应信号灯的控制。图9-19为LIN从机节点主流程图。

978-7-111-29993-6-Chapter09-23.jpg

图9-19 LIN从节点主流程图

9.2.4.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”)。图9-20是CAN主节点发送LIN信息帧的子程序流程图。

9.2.4.3 CAN主节点接收子程序

在车灯控制系统的CAN主节点程序设计中,包括两个接收子程序:一个是CAN报文信息的接收,另一个是LIN信息的接收。为了实现实时的控制,这两个接收子程序都采用中断方式来完成。这里主要介绍CAN报文信息的接收过程,主节点LIN信息的接收与ESCI的数据接收相似,不再详述了。

978-7-111-29993-6-Chapter09-24.jpg

图9-20 CAN主节点LIN报文的发送子程序流程图

978-7-111-29993-6-Chapter09-25.jpg

图9-21 CAN接收信息子程序流程图

CAN总线节点实时检测CAN总线上的信息,并判断总线上的信息是否是本地节点所需的信息。本地节点标识符为0x55,因此在MC68HC908GZ16微处理器由MSCAN模块中CIDMRx(标识符屏蔽寄存器)寄存器和CIDARx(比较寄存器)寄存器来对所检测到的信息进行筛选,如果标识符ID异或比较寄存器内的二进制数的结果和屏蔽寄存器内的二进制数取反相与的结果为零,则可以接收该信息帧,否则拒绝。除了在系统初始化时对屏蔽寄存器和比较寄存器进行设置外,其他操作都是由微处理器自动完成。接收完该信息帧后,可以直接从DSRx(数据寄存器)中直接将所接收到的信息读出,以备后用。本设计中,由于控制信息量较少,每个信息帧只传送2个字节的数据,接收节点也只接收2个字节的数据。数据信息中各个位所代表的意义是人为规定的,即所控制哪个信号灯是由程序设计者自己定义的。图9-21为CAN节点接收信息帧的子程序流程图。(www.daowen.com)

9.2.4.4 从节点接收和发送子程序

车灯驱动控制的四个节点都是与LIN总线直接连接,因此车灯的控制信号也是由LIN信息传送,这包括LIN信息的接收和对从节点车灯状态的反馈信息的发送。由于车灯4个节点的控制相似,现以右后灯为例说明LIN信息的传送。

978-7-111-29993-6-Chapter09-26.jpg

图9-22 LIN信息处理流程图

汽车右后灯ID号设为0x02,其ID域设为0x42,传送的信息数据为2个字节。LIN信息的接收采用中断方式,当MC68HC908QL4控制器检测到符合该节点要求的信息帧后,则首先根据ID来判断本地节点接收到的是什么信息帧,如果为数据帧,则接收2个字节的数据信息;如果是命令帧,则将本地节点车灯的状态以信息帧的形式发送回主节点,以反映节点情况。然后,如果是接收数据帧,则在SLIC模块中的SLCDx(数据寄存器)读取相应的信息。最后根据数据信息中相关的位进行车灯控制。右后灯模块所需要控制的灯主要有右转向灯、制动灯、尾灯和倒车灯,由于灯的控制只需要两个状态:开和关,因此每个灯只需要一个二进制位就可以控制:“1”使相应的灯亮,“0”使相应的灯灭。在设计中,数据信息相应位的定义分别为:数据信息中第一个字节的第一位代表右转向灯,第二位代表制动灯,第三位代表尾灯,第四位代表倒车灯。为控制的准确性和减少对功率驱动芯片的操作,并没有直接用所接收到的信号去控制,而是采用将这次收到的信息与上次收到的信息进行比较,如果一致,则保持上次车灯的状态不变,否则才会对功率芯片进行操作,完成车灯状态的转换。对于LIN信息的发送,由于MC68HC908QL4已将LIN协议嵌入了底层结构,因此只需将车灯的状态信息装入发送数据寄存器即可。

图9-22为LIN从节点对信息帧的处理子程序流程图,该流程图包含了LIN信息的接收和发送两部分。

9.2.4.5 CAN/LIN总线的部分信号图

由CAN控制模块的开关作为车灯控制开关,控制器根据开关信号发出满足LIN总线协议的控制信息。通过示波器可以方便地在基于CAN/LIN总线的车灯驱动控制系统硬件电路中,直观地看到CAN总线和LIN总线上的波形图。CAN主节点的报文信息格式波形如图9-23所示,这是一个完整的数据帧,包括了帧起始、仲裁域、控制域、数据域、CRC校验码域、应答域、帧结尾,这个数据帧数据域只传送了一个字节的数据,数据字节的多少根据信息传输的要求是可以修改的。这里一个字节已经能够满足信号的控制要求。

978-7-111-29993-6-Chapter09-27.jpg

图9-23 标识符为0x55的CAN节点信息帧

车灯的4个从节点信息是采用LIN总线进行传输的,各节点的标识符分别是0x01、0x02、0x03和0x04,相应的ID域分别为0xC1、0x42、0x03和0xC4。由LIN总线的协议可知,LIN总线中的不同标识符代表不同的任务,在本系统中,由于一个标识符传送的信息量足以完成一个节点所要完成的控制功能,故每个节点只定义一个标识符。在车灯控制系统中,每个灯的控制信号可以用数据信息中的一位来控制,“1”代表灯亮,“0”代表灯灭。图9-24和图9-25分别为右前灯和右后灯LIN总线上由MC68HC908GZ16发出的控制信息。

978-7-111-29993-6-Chapter09-28.jpg

图9-24 右前车灯LIN控制信息

978-7-111-29993-6-Chapter09-29.jpg

图9-25 右后车灯LIN控制信息

以上较系统地介绍了基于CAN/LIN总线的车灯驱动控制系统硬件和软件设计,比较接近实际应用情况,但在实际应用设计中还应注意的是:硬件设计还要考虑工艺、可靠性和对环境的适应性,当然也包括电磁兼容性。软件设计差异较小,主要是通信的速率和ID号要遵循所采用的标准。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈