07090609闫婧汽车尾灯控制系统.docx
- 文档编号:18384751
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:15
- 大小:152.05KB
07090609闫婧汽车尾灯控制系统.docx
《07090609闫婧汽车尾灯控制系统.docx》由会员分享,可在线阅读,更多相关《07090609闫婧汽车尾灯控制系统.docx(15页珍藏版)》请在冰点文库上搜索。
07090609闫婧汽车尾灯控制系统
设计者:
闫婧(07090609)
物理科学技术学院09级通信工程
2011年12月20日
第一章
方案设计与论证
在这一阶段,我们根据实验书中所提到的设计提示,设计了三种方案。
设计提示:
在此设计提示之下,我们设计三种方案:
一、第一种方案是单纯的通过VHDL语言完成此功能,控制信号通过输入一个四位的数组完成,每一位分别代表左转、右转、刹车、夜间行驶。
输出用两个三位的数组表示。
输入低电平有效,输出高电平有效。
最终这个方案可以实现本次设计所要求的功能。
二、通过第一种方案的设计,虽然方案一可以实现设计所要求的功能,但是由于输入输出均是单纯的数组,因此程序的可读性较差,为了解决这一问题,我们设计了第二种方案,输入控制信号分别为:
risignal代表右转,lsignal代表左转,break代表刹车,night夜间行驶。
输出信号有rightled[2downto0],leftled[2downto0]。
这一方案结合了原理图设计与VHDL两方面的内容。
最后实现了设计所要求的功能,文件的可读性也比较好。
三、经过第二种方案的设计,我们忽然想到在街上遇到的汽车他们在左转弯与右转弯的时候,灯是一闪一闪的,而不是单纯的两,因此,我们想改良我们的方案,时左转右转的的时候发出的输出信号是一闪一闪的,而不是单纯的亮。
我们在第二种方案的基础上加入了输入一个clk时间脉冲信号(频率为50M赫兹),由于此时钟脉冲频率太大,显现不出灯一闪一闪的效果,我们之后又加入了分频器对此50M赫兹的频率进行分频,最后达到了预期的效果,在左转与右转的时候它以1赫兹的频率一闪一闪。
在完成了此项功能以后,我们又发现一个问题,当左右信号同时有效的时候,它的左右输出信号都会亮,这在现实生活中是不可能发生的,因此,我们有通过对设计的改良,最后使我们的设计达到预想的要求,即:
1、输入左(右)转信号时,左(右)控制模块下控制的左(右)输出灯一闪一闪。
2、刹车信号输入时,左右控制模块下的刹车灯亮。
3、夜间行驶是,左右控制模块下的夜间行驶灯亮。
第二章
设计实现的电路图以及有关设计文件
方案一:
设计的VHDL语言为:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycarlightis
port
(ctrl:
instd_logic_vector(3downto0);
p:
OUTstd_logic_vector(2downto0);
q:
OUTstd_logic_vector(2downto0)
);
endcarlight;
architecturebehaveofcarlightis
begin
process(ctrl)
begin
casectrlis
when"0111"=>q<="100";p<="000";
when"0110"=>q<="101";p<="001";
when"1011"=>q<="000";p<="100";
when"1010"=>q<="001";p<="101";
when"0101"=>q<="110";p<="010";
when"0100"=>q<="111";p<="011";
when"1001"=>q<="010";p<="110";
when"1000"=>q<="011";p<="111";
when"1101"=>q<="010";p<="010";
when"1100"=>q<="011";p<="011";
when"1110"=>q<="001";p<="001";
when"1111"=>q<="000";p<="000";
whenothers=>q<="000";p<="000";
endcase;
endprocess;
endbehave;
在这个设计中我们使用的是casewhen语句。
输入信号:
ctrl[3downto0]信号分别代表:
ctrl[3]代表左转输入,ctrl[2]代表右转输入,ctrl[3]代表刹车输入,ctrl[3]代表夜间行驶输入。
输出信号:
p[2downto0]信号代表:
p[2]左转信号灯输出,p[1]代表刹车信号灯输出,p[0]代表夜间行驶灯输出。
q[downto0]信号代表:
q[2]右转信号灯输出,q[1]代表刹车信号灯输出,q[0]代表夜间行驶灯输出。
VHDL语言中,把所有的情况都列出来,高电平有效,比如说输入为:
1001表示汽车输入左转夜间行驶信号,0111表示右转刹车夜间行驶信号等等以此类推。
此方案一可以实现设计所要求的功能,但是可读性较差,修改起来较复杂。
方案二:
VHDL语言程序为:
主控模块程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycarmajoris
port(
rsignal:
instd_logic;
lsignal:
instd_logic;
break:
instd_logic;
night:
instd_logic;
leftctrl:
bufferstd_logic_vector(2downto0);
rightctrl:
bufferstd_logic_vector(2downto0)
);
endcarmajor;
architecturebehaveofcarmajoris
begin
process(rsignal,lsignal,break,night,leftctrl,rightctrl)
begin
if(rsignal='1')then
rightctrl
(2)<='1';
elsif(lsignal='1')then
leftctrl
(2)<='1';
else
leftctrl
(2)<='0';rightctrl
(2)<='0';
endif;
if(break='1')then
rightctrl
(1)<='1';leftctrl
(1)<='1';
else
rightctrl
(1)<='0';leftctrl
(1)<='0';
endif;
if(night='1')then
rightctrl(0)<='1';leftctrl(0)<='1';
else
rightctrl(0)<='0';leftctrl(0)<='0';
endif;
endprocess;
endbehave;
主控模块输入信号为:
rsignal表示右转信号输入
lsignal表示右转信号输入
break表示刹车信号输入
night表示夜间行驶信号输入
主控输出信号:
leftctrl表示此信号控制左控制模块,是左控制模块的输入信号。
rightctrl表示此信号控制右控制模块,是右控制模块的输入信号。
左控制模块的VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycarleftis
port(
leftctrl:
instd_logic_vector(2downto0);
leftled:
outstd_logic_vector(2downto0)
);
endcarleft;
architecturebehaveofcarleftis
begin
process(leftctrl)
begin
leftled<=leftctrl;
endprocess;
endbehave;
右控制模块的VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycarrightis
port(
rightctrl:
instd_logic_vector(2downto0);
rightled:
outstd_logic_vector(2downto0)
);
endcarright;
architecturebehaveofcarrightis
begin
process(rightctrl)
begin
rightled<=rightctrl;
endprocess;
endbehave;
方案二的原理图为:
通过上述设计,完成了设计所要求的功能,而且相较方案一,可读性增强,是看我们的设计的认可一很容易读懂我们所要实现的功能。
方案三:
主控模块VHDL程序的设计:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycarmajoris
port(
rsignal:
instd_logic;
lsignal:
instd_logic;
break:
instd_logic;
night:
instd_logic;
leftctrl:
bufferstd_logic_vector(2downto0);
rightctrl:
bufferstd_logic_vector(2downto0)
);
endcarmajor;
architecturebehaveofcarmajoris
begin
process(rsignal,lsignal,break,night,leftctrl,rightctrl)
begin
if(rsignal='1')then
rightctrl
(2)<='1';
elsif(lsignal='1')then
leftctrl
(2)<='1';
else
leftctrl
(2)<='0';rightctrl
(2)<='0';
endif;
if(break='1')then
rightctrl
(1)<='1';leftctrl
(1)<='1';
else
rightctrl
(1)<='0';leftctrl
(1)<='0';
endif;
if(night='1')then
rightctrl(0)<='1';leftctrl(0)<='1';
else
rightctrl(0)<='0';leftctrl(0)<='0';
endif;
endprocess;
endbehave;
在主控模块的的设计方面相较第二方案我们没有做太多的变化,还是按第二方案的总体设计思路来的。
左控制模块VHDL设计:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycarleftis
port(
leftctrl:
instd_logic_vector(2downto0);
clkx:
instd_logic;
leftled:
outstd_logic_vector(2downto0)
);
endcarleft;
architecturebehaveofcarleftis
begin
process(leftctrl)
begin
leftled(1downto0)<=leftctrl(1downto0);
ifleftctrl
(2)='1'then
leftled
(2)<=clkx;
elseleftled
(2)<='0';
endif;
endprocess;
endbehave;
在这一部分,相较第二方案,我们主要加入了时钟脉冲,为了达到左右转信号灯输出的时候呈现一闪一闪的效果。
右控制模块的VHDL语言设计:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycarrightis
port(
rightctrl:
instd_logic_vector(2downto0);
clkx:
instd_logic;
rightled:
outstd_logic_vector(2downto0)
);
endcarright;
architecturebehaveofcarrightis
begin
process(rightctrl)
begin
rightled(1downto0)<=rightctrl(1downto0);
ifrightctrl
(2)='1'then
rightled
(2)<=clkx;
elserightled
(2)<='0';
endif;
endprocess;
endbehave;
在这一部分,相较第二方案,我们主要加入了时钟脉冲,为了达到左右转信号灯输出的时候呈现一闪一闪的效果。
由于输入的时钟脉冲信号为50M赫兹,因为频率太快,所以以人眼的分辨程度是看不到一闪一闪的效果的,因此我们加入的分频模块,将时钟脉冲的频率将到1赫兹,因此分频系数为:
50000000。
通过分频,我们可以看到灯隔一秒一闪的效果。
分频部分的VHDL语言设计:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfdivevenis
generic(n:
integer:
=50000000);
port(
fin:
INstd_logic;
clkx:
bufferstd_logic
);
endfdiveven;
architectureaoffdivevenis
begin
process(fin)
variablecnt:
integerrange0ton/2;
variablef:
std_logic;
begin
if(fin'eventandfin='1')then
if(cnt=n/2-1)then
f:
=NOTf;
cnt:
=0;
else
cnt:
=cnt+1;
endif;
endif;
clkx<=f;
endprocess;
enda;
最后整体的原理图设计为:
通过上述设计,完成了上述的功能,并达到了左右转信号灯一闪一闪的效果。
第三章
仿真与测试分析
方案一:
Functional:
Timming:
通过下载程序到实验箱后,实验结果为:
当左信号输入时,左控制下的左灯亮,右信号输入时,右控制下的右灯亮。
刹车信号输入时,左右控制下的刹车信号灯亮。
夜间行驶信号输入时,左右控制下的夜间信号灯亮。
方案二:
Functional:
Timing:
通过下载程序到实验箱后,实验结果为:
当左信号输入时,左控制下的左灯亮,右信号输入时,右控制下的右灯亮。
刹车信号输入时,左右控制下的刹车信号灯亮。
夜间行驶信号输入时,左右控制下的夜间信号灯亮。
方案三:
Functional:
Timming:
通过下载程序到实验箱后,实验结果为:
当左信号输入时,左控制下的左灯一闪一闪的亮,右信号输入时,右控制下的右灯一闪一闪的亮。
刹车信号输入时,左右控制下的刹车信号灯亮。
夜间行驶信号输入时,左右控制下的夜间信号灯亮。
第四章
设计总结
本次实验我收获了许多,这对我以后再进行其他电子设计的时候可以避免很多不必要的麻烦。
其中重点的便是以下几点:
一、在进行的设计时候,我们所设计的方案要具有可读性,这种设计要所有读程序的人都可以看得懂,只有设计者懂是不够的。
这就要求我们所写的程序要简洁易懂,向我们方案一的设计可读性就不高。
二、在进行设计的时候要多多考虑实际情况,像之前的设计,我们经常会看到在左转或者右转的时候,灯都是一闪一闪的,这就要求我们要将这种实际的情况融入到我们的设计当中去。
三、在设计中我们遇到问题的时候,不要一条道走到黑,要从多方面切入,这样才会使我们设计中不会走入死胡同。
四、在灯一闪一闪这一模块,我们就要意识到人眼的分辨能力来理智的取我们的分频系数。
在此次电子设计中,我们还学习到了很多,这次得经验将更好的指导我以后的电子设计。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 07090609 汽车 尾灯 控制系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)