⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qicheweidengkongzhi.txt

📁 汽车尾灯控制系统 汽车尾灯控制器的VHDL程序实现
💻 TXT
字号:
汽车尾灯控制系统 



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

(一)顶层系统方案构思

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

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

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

(二)控制器设计

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

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

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

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

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

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

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

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

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

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



            LD,RD: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; 




 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -