最近项目中用到了DLE发动机作为前拉动力。在设计程序时,主要有两个方面,一是发动机的自动启动/停止逻辑,二是获取发动机反馈的数据。
首先介绍与发动机电喷系统的通信。根据数据协议,与发动机电喷系统通信为RS232通信,且为应答式通信,控制端需要定时发送协议数据,随后发动机端定时反馈发动机实时数据。
程序设计时,用一个线程定时与发动机电喷系统通信,并解析发动机反馈的实时数据(采用判断数据帧头的方式),在设计发动机自动启动时,需要用到发动机实时转速数据。
而在设计发动机自动启动/停止逻辑时,思路为,由于自动启动/停止本质为控制两个GPIO口接通/断开。启动时,通过拉高GPIO口驱动板载继电器,从而接通发动机端启动继电器,待发动机启动完成,断开发动机端启动继电器,用以下次循环启动。而停止时,通过拉高GPIO口启动板载继电器,使发动机端转速反馈信号接地,从而使发动机端用于控制的转速信号为0,使发动机停止,待发动机完全停止后,断开GPIO口,用以下次循环启动。因此需要设计两个标志位,来代表实时状态,即发动机启动时,设置启动和停止标志位分别为beigin_start_flag=1;begin_stop_flag=0;而在发动机停止时,与其互斥,即beigin_start_flag=0;begin_stop_flag=1;而在距离逻辑实现时,只要以各自的标志位作为判断条件即可。
if(beigin_start_flag==1)
{
//这里写入发动机自动启动逻辑
}
else
{
//局部变量清零,使发动机启动可以循环多次
}
if(beigin_stop_flag==1)
{
//这里写入发动机自动停止逻辑
}
else
{
//局部变量清零,使发动机停止可以循环多次
}
代码实现如下图所示,需要注意根据发动机实际情况,更改发动机转速判断值,进而达到使发动机一次就能启动的情况。(注意控制发动机进气门)