EDA技术与应用楼梯照明灯的声光控制系统设计.docx
《EDA技术与应用楼梯照明灯的声光控制系统设计.docx》由会员分享,可在线阅读,更多相关《EDA技术与应用楼梯照明灯的声光控制系统设计.docx(13页珍藏版)》请在冰豆网上搜索。
EDA技术与应用楼梯照明灯的声光控制系统设计
CHANGSHAUNIVERSITYOFSCIENCE&TECHNOLOGY
课程名称:
EDA技术与应用
课题项目:
楼梯照明灯的声光控制系统设计
目录
一.项目的描述,目的以及意义---------------------------3
二.设计思想--------------------------------------------------------4
三.项目的实施-----------------------------------------------------5
四.设计程序的仿真----------------------------------------------5
五.课题项目的缺陷--------------------------------------------13
六.后记------------------------------------------------------------14
一.项目的描述,目的以及意义
项目描述:
晚上楼梯照明灯不可能整夜都亮,基于人在的时候亮灯,没有人在的时候灯则不会亮的理念。
(这样既节省了能源又方便了人们生活。
)设计用VHDL语言编写的声光控制楼道照明系统程序。
目的及意义:
随着社会经济的发展和科学技术的进步,国内外均已在使用智能照明控制装置。
我国的智能照明装置普遍应用在走廊和楼道领域中。
经济的快速发展使办公楼数目增加,导致一些场所在光线足够强时依然还开着灯的现象普遍存在,加之一些人节能意识的淡薄,造成了不必要的电能浪费,同时也影响了各种照明灯具的使用寿命。
这种浪费现象与当今世界提倡节约能源的理念是相违背的。
因此,基于这样的现象,设计根据室内环境光亮度和人体存在与否来实现智能控制照明是具有很重要的现实意义。
以前进行楼梯照明灯的控制,需要进行模拟电路和数字电路设计,使用的芯片多,电路复杂,出现问题不易查找,不易进行功能扩展。
随着EDA(ElectronicsDesignAutomation)技术的出现,改变了传统的设计电路的方法,人们可以用一片芯片实现所需要的各种功能,这就是可编程逻辑器件。
与传统电路设计方法相比,可编程逻辑器件功能强大,开发过程投资小、周期短,可反复编程修改,保密性极好,开发工具智能化等特点,特别是随着电子工艺的不断改进,低成本FPGA/CPLD器件推陈出新,促使FPGA/CPLD成为当今硬件设计的首选方式之一。
EDA关键技术之一就是采用硬件描述语言对硬件电路进行描述,且具有系统级仿真和综合能力。
目前应用比较广泛的硬件描述语言就是VHDL(VeryHighSpeedIntegratedCircuit)。
基于以上观点,我们决定用VHDL语言编写了楼梯声光照明控制的源程序,通过编译和功能仿真,输出波形图,验证其正确性。
二.设计思想
我们的题目是基于VHDL的楼梯声光照明灯的控制的实现。
其基本设计思想是白天(光线强烈的时候)声控无效,灯不会亮;晚上(光线暗到某一程度的时候)声控有效果。
当声音大到某一程度的时候灯亮,持续240秒。
如果240秒内没有声音发生,则240s后灯自动熄灭(防止其他突然的声音让灯长亮)。
如果240秒内有符合声音程度范围的声音发出时,则刷新时间进入长亮状态。
在长亮状态下,我们设计一个人工按键控制开关,控制灯的开关。
如果声音持续10s,则灯灭(防止放鞭炮或者一些其他持续的声音导致灯亮)。
为了实现节能理念,顶层由于上面没楼层了,所以顶层灯亮的时间减少至120秒。
(部分未实现)
因此我们需要编写状态机、计数器、译码器、分频电路以及顶层模块的VHDL程序。
控制器框图如图1所示
假设:
KEY=1表示声控启动,KEY=0表示声控无效。
TD2=1表示10s时间到。
TD240=1表示240s时间到。
ST_2=1表示启动10s定时器。
ST_240=1表示启动240s定时器。
LAMP=1表示灯亮。
从该状态机的特点可以看出,这是一个梅里状态机,这是因为只要声控已一启动,一些动作就立刻开始执行,而不是等到状态转移后,例如当声控启动时,十秒定时器就开始工作。
图1楼梯灯控制装置框图
三.项目的实施
随着国家可持续发展的实施,资源的合理利用成为时代潮流。
为了进一步实现节约资源,可控灯光系统已遍布大街小巷。
我组设计楼梯灯控制装置,从基础出发,经过几次实地感受居民楼间声控灯光系统,基本对该系统有了较为全面的了解,现就如何实施提出本组意见。
1.楼梯间应有声音采集装置;当声音分贝大于程序内定水平线后触发电平,程序启动,该层灯光亮起。
2.设置灯光自动延迟时间;当该层声音低于限定分贝值后,进入延迟状态,经过设定时间间隔后自动熄灭。
3.设置唤醒下层灯光触发电平;当该层灯光熄灭后,应有信号进入下层触发装置作为准备信号,声音采集装置收到正分贝值灯光即亮起。
4.设置楼层系统延迟以进入下次状态更替。
此方案实施虽然与实际效果有所差别,但核心思想基本统一,旨在实现资源的节约合理利用,从而方便人们生活。
四.设计程序的仿真
240秒计数器的程序:
libraryieee;
useieee.std_logic_1164.all;--指定标准库
useieee.std_logic_unsigned.all;--指定数据库
entitycon240is—定义实体
port(clk,st240:
instd_logic;
td240:
outstd_logic;
gaowei,diwei:
outstd_logic_vector(3downto0));--定义端口
end;
architecturecon240_archofcon240is—结构体
signalqq:
std_logic_vector(7downto0);--信号的宽度
begin
process(clk,st240)–进程
begin
ifst240='0'thenqq<="00011110";--题目要求是240秒,为调试方便这里给30秒
elsifclk'eventandclk='1'then
ifqq/="00000000"thenqq<=qq-1;
elseqq<=qq;
endif;
endif;
endprocess;--结束进程
td240<='1'whenqq="00000000"else'0';
gaowei<=qq(7downto4);
diwei<=qq(3downto0);
endcon240_arch;
本计数器采用十六进制计数器,240秒计数器仿真结果如下图
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityyimais
port(aa:
instd_logic_vector(3downto0);
b0,b1,b2,b3,b4,b5,b6:
outstd_logic);
end;
architectureyima_archofyimais
signalbb:
std_logic_vector(6downto0);
begin
process(aa)
begin
caseaais
when"0000"=>bb<="0000001";
when"0001"=>bb<="1001111";
when"0010"=>bb<="0010010";
when"0011"=>bb<="0000110";
when"0100"=>bb<="1001100";
when"0101"=>bb<="0100100";
when"0110"=>bb<="0100000";
when"0111"=>bb<="0001111";
when"1000"=>bb<="0000000";
when"1001"=>bb<="0000100";
when"1010"=>bb<="0001000";
when"1011"=>bb<="1100000";
when"1100"=>bb<="0110001";
when"1101"=>bb<="1000010";
when"1110"=>bb<="0110000";
when"1111"=>bb<="0111000";
whenothers=>bb<="1111111";
endcase;
endprocess;
b0<=bb(6);
b1<=bb(5);
b2<=bb(4);
b3<=bb(3);
b4<=bb
(2);
b5<=bb
(1);
b6<=bb(0);
endyima_arch;
该译码器是十六进制—七段译码,用于共阳极数码管,仿真结果如下图
程序如下:
libraryieee;
useieee.std_logic_1164.all;
entityfsmis
port(key,clk,td2,td240:
instd_logic;
st2,st240,lamp:
outstd_logic);
end;
architecturefsm_archoffsmis
typezt_typeis(s1,s2,s3,s4,s5,s6,s7,s8,s9);
signalzt_now,zt_next:
zt_type;
begin
n1:
process(clk)--状态寄存进程
begin
ifclk'eventandclk='1'then
zt_now<=zt_next;
endif;
endprocess;
n2:
process(key,zt_now)--次态逻辑和梅里输出
begin
casezt_nowis
whens1=>ifkey='1'thenlamp<='1';st240<='1';st2<='0';zt_next<=s2;
elsifkey='0'thenlamp<='0';st240<='0';st2<='0';zt_next<=s1;
endif;
whens2=>ifkey='0'thenlamp<='1';st240<='1';st2<='1';zt_next<=s3;
elsifkey='1'thenlamp<='1';st240<='1';st2<='0';zt_next<=s2;
endif;
whens3=>ifkey='1'thenlamp<='1';st240<='1';st2<='0';zt_next<=s7;
elsif(key='0')and(td2='1')thenlamp<='1';st240<='1';st2<='1';zt_next<=s4;
elselamp<='1';st240<='1';st2<='1';zt_next<=s3;
endif;
whens4=>ifkey='1'thenlamp<='1';st240<='1';st2<='1';zt_next<=s5;
elsif(key='0')and(td240='1')then
lamp<='0';st240<='1';st2<='0';zt_next<=s1;
elselamp<='1';st240<='1';st2<='0';zt_next<=s4;
endif;
whens5=>if(key='1')and(td2='1')thenlamp<='0';st240<='0';st2<='1';zt_next<=s6;
elsifkey='0'thenlamp<='1';st240<='1';st2<='0';zt_next<=s4;
elselamp<='1';st240<='1';st2<='1';zt_next<=s5;
endif;
whens6=>ifkey='0'thenlamp<='0';st240<='0';st2<='0';zt_next<=s1;
elselamp<='0';st240<='0';st2<='0';zt_next<=s6;
endif;
whens7=>ifkey='1'thenlamp<='1';st240<='0';st2<='1';zt_next<=s8;
elselamp<='1';st240<='0';st2<='0';zt_next<=s7;
endif;
whens8=>if(key='1')and(td2='1')thenlamp<='0';st240<='0';st2<='1';zt_next<=s9;
elsif(key='0')thenlamp<='1';st240<='1';st2<='0';zt_next<=s7;
elselamp<='1';st240<='0';st2<='1';zt_next<=s8;
endif;
whens9=>ifkey='0'thenlamp<='0';st240<='0';st2<='0';zt_next<=s1;
elselamp<='0';st240<='0';st2<='0';zt_next<=s9;
endif;
whenothers=>zt_next<=s1;
endcase;
endprocess;
endfsm_arch;
该状态机的仿真结果如下图
程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycon2is
port(clk,st2:
instd_logic;
td2:
outstd_logic;
sh:
outstd_logic_vector(3downto0));
end;
architecturecon2_archofcon2is
signalqq:
std_logic_vector(3downto0);
begin
process(clk,st2)
begin
ifst2='0'thenqq<="1010";
elsifclk'eventandclk='1'then
ifqq/="0000"thenqq<=qq-1;
elseqq<=qq;
endif;
endif;
endprocess;
td2<='1'whenqq="0000"else'0';
sh<=qq;
endcon2_arch;
10秒减计数器的仿真结果如下图
分频电路的程序为:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpinis
port(clk:
instd_logic;
q0,q1,q2,q3:
outstd_logic);
end;
architecturefenpin_archoffenpinis
signalqq:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
qq<=qq+1;
endif;
q0<=qq(0);
q1<=qq
(1);
q2<=qq
(2);
q3<=qq(3);
endprocess;
endfenpin_arch;
该分频器是十六分频计数器,仿真结果如下图
五.课题项目的缺陷
首先我们的课题项目的有关子程序模块的程序都能够调试成功,仿真图也能画出来,并且能够对仿真图进行了一定的理解。
令人遗憾的是从我们的设计思路对照状态图来看,我们有部分独创的想法因某些客观因素(比如设备条件人力资源有限)而未实现,其一是我们设计一个按键控制开关,控制灯的开关;其二是顶层模块设想与实际存在部分差距,其三是定时器的时间还未经过实践是否合理。
顶层模块只是连好线,由于有一个错误长时间不能够解决,所以没把波形仿真弄出来,只能把模板的仿真图弄出来。
楼梯口照明灯顶层模块图如下
楼道灯顶层模块仿真结果如下
六.后记
我们组在接到这个基于VHDL语言的楼梯照明灯声光控制系统的课题项目,首先我通过派同学去调查有关居民区的楼梯的的照明灯光控制的情况,调查情况如下:
当如果是白天的时候,楼梯照明灯是灭的;到了晚上,当无人走过的时候,照明灯是灭的;当有人距离经过楼梯2米,照明灯自动亮了。
通过调查的情况,我们分任务去调查有关课题项目的资料,但是通过网上的查找,我们找到了一份与我们课题项目相关的资料。
接下来我们对资料的阅读,并对课题项目进行了分工合作,组长我主要负责分配其他三个人的任务,和240秒计数器和分频电路程序的理解以及程序的调试与仿真图。
1主要负责课题项目的设计思想,和十六进制—七段译码器程序的理解以及程序的调试与仿真图。
2主要负责课题项目的描述,目的,意义,和状态机程序的理解以及程序的调试与仿真图。
3主要负责的是课题项目的实施,和10秒计数器程序的理解以及程序的调试与仿真图。
经过全部组员的努力,最后我们实现了楼梯口照明灯的声光控制,对我们的现实生活有巨大的意义。
组长的自我评价:
首先我作为组长,在课题项目中起到了重要的作用,必须能够了解整个项目的过程以及项目是如何设计,能够进行安排组员的任务,让他们在自己的模块中尽情地发挥他们的能力,使他们能够在这个项目中学到很多东西,培养了独立自主的能力和团队合作的能力。
然后我也在当中学到了课堂中学不到的东西,收获了一些关于做项目的经验,为以后的工作上的能力奠定了基础。
组员1的自我评价:
在这次课程设计中,我负责的是这个项目的设计思想,如何由课题想到怎样去研究的以及分频电路的调试。
经过网上查找资料让我对这个课题有了一些理解,并在此之上加入了些自己的想法。
开始的时候对调试的步骤还不是熟悉,在和组长以及其他成员的交流中熟悉了每个步骤。
通过这次课程设计,加深了我们对这门课程的理解,体会了团队合作的乐趣,促进了各成员之间的友谊!
组长对组员1的评价:
同学能够积极参与项目的研究,并在遇到问题的时候能够向组长提问以及查阅各方面的资料,也能够学习这门课的时候有所收获。
组员2的自我评价:
我负责此项目中10秒计数器的实现以及课程项目的实施。
对于10秒计数器,在仿真过程中出现了与原波形不一致的情况,经过反复调试及对程序的修改,出现了理想的波形,能与项目的核心基本对接。
在不断的调试和仿真过程中,进一步的掌握了VHDL语言的基本语法,能够较为全面的读懂程序中的代码,通过不断的调试,在波形仿真方面的能力有了进一步的提高,掌握了一定的技巧。
虽然该项目在某些方面还有一定瑕疵,但在这一次项目实施中的确学习不好,收获颇丰。
组长对组员2的评价:
同学在做项目积极思考项目实施,并且能够提出自己的独特观点,遇到项目难处与组员积极讨论,在自己的课余时间内查阅有关资料来解决项目的有关问题,通过这个项目的学习,他对学习的热情提高了,对今后的学习生活有大大的帮助。
组员3自我评价:
这门课程由于选课较晚没书等原因,开始遇到了很多理解问题。
我通过参与这次设计,以实践的方式大大加深了对课程的理解。
既明白了EDA技术的实际意义,也锻炼了合作能力与团队精神。
总的来说,机会难得印象深刻。
组长对组员3的评价:
一开始对这门课没什么兴趣,但是通过做课题项目,能够体会到了当中的意义。
当我们做项目的时候,他总能提出一些见解来解决,课后时间翻书自己去了解自己不懂的地方。