现在的位置: 首页 > 综合 > 正文

汽车尾灯控制系统

2013年03月24日 ⁄ 综合 ⁄ 共 2156字 ⁄ 字号 评论关闭

汽车尾灯控制系统

设计任务:汽车尾灯控制系统

(一)顶层系统方案构思

9-21表示汽车尾灯控制系统的顶层符号图。汽车尾灯控制器命名为QWK

输入信号:左转弯传感器LH,右转弯传感器RH和紧急制动或慢行传感器JMH,另外,汽车尾灯主要是给后面行使汽车的司机注意。为了使尾灯的光信号更明显,采用亮灭交替的闪烁信号,其闪烁周期为2秒,即尾灯亮1秒,灭1秒,再亮1。在图9-21中设置了一个1秒时钟的输入信号CP

输出信号:输出共设两个,左面一个尾灯,右面一个尾灯,既左转弯时指示灯LD和右转弯时指示灯RD

(二)控制器设计

从上至下的设计方法首先是从系统级分析,然后进行模块划分,分为受控部分和控制器部分。此尾灯控制系统的受控部分是传感器和指示灯,仅用几个二进制信号就可以完成,所以我们把精力放在设计控制器模块上。

汽车尾灯控制系统设置为四个状态,它们有以下定义:

A状态:传感器LHRHJMH信号无效,皆为0,表示汽车保持一定速度的直行或静止不动,左尾灯LD和右尾灯RD不闪烁发光。

B状态:传感器LH有效,RHJMH无效,此时LHRHJMH状态为100,表示汽车向左转,左尾灯交替闪烁,右尾灯灭。

C状态:传感器RH有效,LHJMH无效,此时LHRHJMH状态为010,表示汽车向右转,右尾灯交替闪烁,左尾灯灭。

D状态:传感器JMH有效,LHRH无效,此时LHRHJMH状态为001,表示汽车慢行或紧急情况发生采取紧急制动,左右尾灯同时交替闪烁。

根据上述情况可以初步画出汽车尾灯控制系统的MDS图,如图9-22所示。

但是,图9-22MDS图还存在以下几个问题。

1. 汽车在左转弯或右转弯时,相对应的左侧灯或右侧灯闪烁,但汽车同时有可能要放慢速度,JMH传感器有效;或者汽车已经放慢速度,JMH传感器生效,使左侧灯和右侧灯闪烁,同时又要左转弯或右转弯,使得LHRH有效。此时LHRHJMH状态为101011,尾灯控制器同时进入BD状态或CD状态,这是不可能的,因为对于LHJMH(或RHJMH)同时为1,即LH·JMHRH·JMH=1这样的转换条件,只能有一个状态,使上述两个状态的次态规定为D状态。

2. 9-22MDS图不满足全包含性,如LHRHJMH的组合状态为111110。当然,一般不会发生这种情况,除非传感器失灵。不过我们也可以把这种情况的次态定义为D态。后面行驶汽车的司机看到前面汽车不断闪烁的左右尾灯信号,认为前面汽车要减速,故为了安全也要减速,就不会撞上前面传感器失灵的汽车了。故把AD状态的转换条件改写成JMH+LH·RH;把状态A至状态B的转换条件改写成;把状态A至状态C的转换条件改写成

综合上述考虑,转换条件的逻辑和为:

由转换条件重新画出图9-22汽车尾灯控制器的全状态MDS图,如图9-23所示。图9-23满足了全包含性的要求。图9-24画出了汽车尾灯控制器的MDS图。

(三)汽车尾灯控制器的VHDL程序实现

1. 汽车尾灯控制器实体设计程序

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY QWK IS

  PORT(LH, RHJMHCP:IN std_logic;

            LDRD:OUT std_logic);

END QWK;

2. 汽车尾灯控制器结构体设计程序

ARCHITECTURE QWK_arc OF QWK IS

  type state_TYPE is (QA,QB,QC,QD);

  SIGNAL current_state:state_TYPE:=QA;

BEGIN

 PROCESS(LH,RH,JMH)

 BEGIN

  WAIT UNTIL CP'EVENT AND CP=1';

  CASE current_state IS

  WHEN QA=>

   IF LH='1' AND RH='0' AND JMH='0' THEN

     current_state<=QB;  

   ELSIF LH='0' AND RH='1' AND JMH='0' THEN

     current_state<=QC;  

 ELSIF LH='0' AND RH='0' AND JMH='0' THEN

  current_state<=QA;   RD<='1';  LD<='1';   

 ELSE current_state<=QD;   

 END IF ;

WHEN  QB=>

 IF LH='1' AND RH='0' AND JMH='0' THEN

  current_state<=QB; RD<='1'; LD<=CP;   

 ELSE

  current_state<=QA; 

 END IF ;

WHEN  QC=>

 IF LH='0' AND RH='1' AND JMH='0' THEN

  current_state<=QC; RD<=CP; LD<='1';  

 ELSE

  current_state<=QA; 

 END IF ;

WHEN  QD=>

 IF JMH='1' OR ((LH='1') AND (RH='1')) THEN

  current_state<=QD;  LD<=CP; RD<=CP;   

   ELSE

  current_state<=QA;

 END IF ;

 END CASE;

END PROCESS ;

END QWK_arc;

 

抱歉!评论已关闭.