楼梯照明灯控制器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖南人文科技学院
课程设计报告
课程名称:VHDL语言与EDA课程设计
设计题目:楼梯照明灯控制器
系别:通信与控制工程系
专业:电子信息工程
班级: 2007级2班
学生姓名: 陈晓珂肖杨
学号: 07409207 07409216 起止日期: 2009年12月21日~ 2010年1月日指导教师:成继中
教研室主任:侯海良
摘要
随着社会的发展人们对楼房的需求越来越大,而楼道间必不可少的照明灯又起到了重要作用。

为了方便住户晚间在楼梯间行走,楼梯照明灯时常整夜工作,这样长此以往不仅浪费电而且影响住户休息,所以触摸灯越来越满足人们的需求。

本论文就将针对楼梯照明灯控制器进行研究和设计。

本设计就是采用触摸装置进行控制楼梯的照明灯。

它提供了一种操作简便、灵活、抗干扰能力强,控制灵敏的触摸灯,它采用人体接触触摸片时,经输入缓冲级的削波、放大、整形,成为标准的MOS电平,即可方便及时地打开和关闭触摸照明装置,并有防误触发而具有的自动延时关闭功能,并设有手动开关,使其应用更加方便。

本次设计采用vhdl语言编写程序、借助Quartus 开发软件实现波形仿真并在试验箱上进行模拟的方法,比较好地完成了设计的目标,进一步熟悉了对一系列开发软件的使用,增进了对EDA课程设计的方法的掌握。

关键词:CPLD/FPGA VHDL LED 触摸仿真延时
目录
设计要求 (1)
1.引言 (1)
2.方案论证与对比 (1)
2.1 方案一 (2)
2.1.1 设计原理 (2)
2.2 方案二 (3)
2.2.1 设计原理 (3)
2.3 论证对比 (4)
3.设计过程 (5)
3.1 各模块原理及程序 (5)
3.2 楼梯照明灯控制器实体的设计 (5)
3.3 状态机编程实现 (6)
3.4计数器的设计 (8)
4.系统编译和波形仿真 (10)
4.1 系统的编译 (10)
4.1.1 创建工程 (10)
4.1.2 编译前设置 (11)
4.1.3全程编译 (11)
4.2 系统有关波形的仿真 (11)
4.2.1 波形仿真前设置 (11)
4.2.2 波形仿真 (12)
4.2.3 仿真波形说明、 (12)
4.2.4 引脚锁定 (13)
4.2.5引脚锁定说明 (13)
5.课程设计总结 (13)
6仪器仪表清单 (14)
7 致谢 (14)
8 参考文献 (15)
附录 (16)
楼梯照明灯控制器
设计要求
1.该控制器通过安装在各层楼上的触摸式开关来控制上下楼梯照明灯,每触摸一次,开关接通一次;
2.打开照明灯,延迟一段时间后灯自动熄灭;
3.每只开关旁还有一个小指示灯,能在黑暗中找到开关的准确位置;
4.指示灯颜色为黄色,当灯亮的时候,指示灯为绿色,亮度变暗。

1.引言
随着EDA 技术的发展及大规模可编程逻辑器件CPLD/FPGA 的出现,电子系统的设计技术和工具发生了巨大的变化,通过EDA 技术对CPLD/FPGA 编程开发产品,不仅成本低、周期短、可靠性高,而且可随时在系统中修改其逻辑功能。

本文介绍了一种以Altera公司可编程逻辑器件EP1K100QC208-3为控制核心芯片,附加一定外围电路组成的触摸式延时开关电路。

2.方案论证与对比
整体思路
通过状态机来识别不同楼层的触摸信号以便最终在试验箱的发
光二极管上显示出来
通过计数器来实现整个电路的自动延时功能
通过总开关实现对所有的触摸开关的控制
通过触摸片感应装置来实现指示灯的颜色变化
通过计数器来控制指示灯以便在灯灭时恢复原色
具体设计思路
用状态机结构设计楼梯照明等控制器。

本次设计过程采用层次化设计方法,分模块、分层次的进行设计描述。

描述系统的总功能的设计为系统总设计图,即顶层设计,描述系统中较小单元的设计为底层设计。

在底层设计方式中采用电路图输入方式,而在底层设计中,采用硬件描述语言描述模块的逻辑功能。

该装置应用电路工作原理如图。

它可以用于走廊、楼梯过道作为延时节能照明灯。

上楼前在楼下按动一下 AN1-ANn中的任一个按钮,时基集成电路IC NE555的②脚受到低电平触发而置位,它的输出端③脚即即刻变为高电平,导致控制器DM的④端也为高电平,故照明灯H此刻点亮。

松开按钮,由于IC NE555工作于单稳态模式,其③脚要持续输出高电平一段时间。

同时电源通过R2向C2充电,当C2两端的电压达到2/3电源电压时,NE555自动复位,其③脚又恢复为低电平,控制器DM的④脚变为低电平于是导致内部电路关断,照明灯H自动熄灭。

这样,上楼时可以按下AN1-ANn中任意一只按钮,即可点亮照明灯;下楼时同理按动其中任意一只也可点亮照明灯。

AN1-ANn可根据具体需要来设置。

其中单稳态持续工作时间可由R2和C2的数值确定。

2.1 方案一
2.1.1 设计原理
状态机设置了三个状态,它们分别是“等待一楼触摸信号状态”(S0),“等待二楼触摸信号状态”(S1), “等待三楼触摸信号状态”(S2)。

当一楼的触摸信号到来时,状态机第一状态接到信号即打开照明电灯,同时,计数器开始计时,触摸开关指示灯立即熄灭(这里由于实验箱上没有变色发光二极管,以点亮状态代表黄色,熄灭状态代表绿色),等到计数器计时完毕,便输出一个低电平信号,通过电路处理使电灯自动熄灭,同时指示灯由熄灭状态变为点亮状态,其过程如下:
图一
2.2 方案二
2.2.1 设计原理
触摸式延时开关电路虚线右面是普通照明线路,左部是电子开关部分。

VD1~VD4、VS组成开关的主回路,IC组成开关控制回路。

平时,VS 处于关断状态,灯不亮。

VD1~VD4输出220V脉动直流电经R5限流,VD5稳压,C2滤波输出约12V左右的直流电供IC使用。

此时LED发光,指示开关位置,便于夜间寻找开关。

IC为双D触发器,只用其中一个D触发器将其接成单稳态电路,稳态时1脚输出低电平,VS关断。

当人手触摸一下电极M时,人体泄漏电流经R1、
R2分压,其正半周使单稳态电路翻转,1脚输出高电平,经R4加到VS的门极,使VS开通,电灯点亮。

这时1脚输出高电平经R3向电容C1充电,使4脚电平逐渐升高直至暂态结束,电路翻回稳态,1脚突变为低电平,VS失去触发电压,交流电过零时即关断,电灯熄灭。

电路图如下:
图二
2.3 论证对比
通过以上两种方案的设计,我们很容易看出方案一种使用的是通过VHDL硬件描述语言编译下载的方法来实现对两路不同性质电路(发光二极管,灯泡)的控制,vhdl硬件描述语言是目前使用非常流行和实用的硬件编程语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,大大简化了硬件设计的任务,提高了了效率和可靠性。

相比之下,方案二采用的是电路图电子设计的方法,设计过程涉及的步骤多,最后仿真验证需要做出电路板实物,制作过程中容易出现差错,可靠性没有方案一高,硬件实现电路存在固有延时特性。

综上所述,方案一要优于方案二。

鉴于此,我们选择了方案一。

3.设计过程
3.1 各模块原理及程序
该楼梯照明灯控制器的设计主要包括的模块与内容有:触摸式开关器实体的设计,触摸式开关器编程的实现,计数器延时的设计以及构造体的设计。

直接对状态机进行描述,所有的状态均可表达为CASE_WHEN结构中的一条CASE语句,而状态的转移则通过IF_THEN_ELSE语句实现。

以下是详细解析各个板快的设计与实现。

3.2 楼梯照明灯控制器实体的设计
定义该照明灯控制器的输入与输出端口。

首先考虑输入端口,一般应该设置一个异步置位端口clr,作为实际电路中的总开关,以便在电路出现故障时切断全部电源,从而保证安全,而在试验箱上模拟仿真时作为触发的起始条件,即当“clr=‘0’”时,所有按键均无效,当“clr=‘1’”时,相当于总开关处于闭合状态,此时,进行按键操作才能触发灯泡点亮。

clk 作为时钟脉冲输入端口,为整个电路提供时钟的上升沿从而触发计数器和状态机进入工作状态。

call1,call2,call3被定义为输入端口,对应于于一、二、三楼的触摸开关。

其次,实体部分定义了六个输出端口,分别是:kg1、kg2、kg3用试验箱上三个发光二极管代替,对应于一、二、三楼的灯泡;led1、led2、led3对应于试验箱上三个发光二极管,就相当于三个开关的指示灯。

实体设计vhdl程序如下:
library ieee;
use ieee.std_logic_1164.all; --引用库函数
entity asm is --实体名为asm
port(call1,call2,call3:in std_logic;
clk:in std_logic; -- 定义时钟
clr:in std_logic;--异步置位端口
kg1,kg2,kg3:out std_logic;--控制三个灯泡的输出端口
led1,led2,led3:out std_logic);--控制三个指示灯的输出端口end entity asm;
3.3 状态机编程实现
状态机设置了三个状态,分别是:so,s1,s2.
三个状态各代表三种触发信号。

状态处于so时,当clr=‘1’,上升沿到来时,call1输入高电平信号,触发控制kg1,使相应的二极管变亮;状态机处于s1,当clr=’1’,clk=’1’时,call2作为输入端输入高电平,触发控制kg2,点亮相应的二极管;状态机处于s2,clr=’1’,clk=’1’时,call3为输入端输入高电平,触发控制kg2,点亮相应的二极管。

在整个程序中,状态机起的是中央控制器的作用,由它控制的信号来影响整个程序中的其他相关部分,比如指示灯和电灯,还有延时模块。

状态机的程序设计如下:
architecture a of asm is
type states is (s0,s1,s2); --对状态机的状态进行声明。

signal q:std_logic_vector(0 to 2); --指明信号类型
signal state:states;
begin
p1: process(clk,clr) --第一个进程
begin
if(clr='0')then
state<=s0;
elsif(clk'event and clk='1')then
case state is --用case语句描述状态机最方便。

when s0=> --指定进程的跳转
state<=s1;
when s1=>
state<=s2;
when s2=>
state<=s0;
end case;
end if;
end process p1;
p2:process(call1,call2,call3) --第二个进程
begin
if clr='0' then --定义初始状态
kg1<='0';led1<='1';
kg2<='0';led2<='1';
kg3<='0';led3<='1';
else
case state is
when s0 => --状态处于第一个触摸开关触发状态
if call1='1'then
kg1<='1';led1<='0'; kg2<='0'; kg3<='0';
else
kg1<='0';led1<='1'; kg2<='0'; kg3<='0';
end if;
when s1=> --状态处于第二个触摸开关触发状态if call2='1'then
kg2<='1';led2<='0'; kg1<='0'; kg3<='0';
else
kg2<='0';led2<='1'; kg1<='0'; kg3<='0';
end if;
when s2 => --状态处于第三个触摸开关触发状态
if call3='1'then
kg3<='1';led3<='0'; kg1<='0'; kg2<='0';
else
kg3<='0';led3<='1'; kg1<='0'; kg2<='0';
end if;
end case;
end if;
end process p2;
3.4计数器的设计
图三
在5 MHz时钟CLK控制下对同步信号SYNC进行N延时(SYNC脉冲宽度为2 μs,脉冲重复频率为1 kHz;0μs≤N≤998 μs)。

要求每次在同步脉冲上升沿到来时开始延时,并在延时结束后产生宽度为10 μs的选通信号。

需要产生的延时时序如图2所示(延时量N=4.2μs)。

这里采用3个计数器和1个或门产生上述延时信号,如图3所示,模N计数器计延时量;模50计数器计选通信号的宽度;模N+50计数器用于产生使能信号。

用VHDL硬件描述语言进行硬件电路设计时,同一个进程中不能用2个时钟来触发,而时序图中又要求在同步脉冲SYNC的上升沿开始延时,为了解决这一问题,
用了模N+50计数器和1个或门。

当同步脉冲为高电平时,模N计数器和模N+50计数器开始计数,并置dly_en 为高电平。

模N计数器满,置dly_enl为高电平同时产生选通信号。

当模N+50计数器计满即选通信号产生完之后置dly_en为低电平。

当下一个同步脉冲到来时重复以上过程。

这种设计电路的好处是当同步脉冲的宽度改变时对时序控制并无影响,因为在计数过程中只用了SYNC的上升沿,从延时开始到选通信号结束,在或门的作用下SYNC对计数器不起控制作用。

延时模块vhdl程序设计如下:
该程序选择N=20,即延时量是4.2 μs,由于要使用时钟来判断SYNC 的上升沿情况,因此,如果令N=0,产生的delay信号仍然会有1个时钟的固有延时,在计算延时量时应充分考虑到这一点,延时量=(N+1)×时钟周期。

通过该计时器组成的延时电路模块设计,电灯就能实现自动熄灭功能,从而节省了电能,方便了居民的日常生活。

4.系统编译和波形仿真
4.1 系统的编译
4.1.1 创建工程
1. 新建文件夹,命名为switch,存盘路径为d:\switch.
2. 输入源程序,打开Quartus II ,选择Fire—new 命令。

3. 文件存盘,选择Save—as 命令,找到已存在的文件夹d:\switch.存
文件名与实体名一致。

4. 设计文件加入工程中,选择仿真器、综合器类型以及目标芯片,然后
进行工具设置,最后结束设置
4.1.2 编译前设置
1. 选择FPGA目标芯片;
2. 选择配置器件的工作方式;
3. 选择配置器件和编程方式;
4. 选择目标器件闲置引脚的状态。

4.1.3全程编译
编译前选择Processing—Start Compilation 命令,启动全程编译。

编译完成,出现两个警告“iming Analysis is analyzing one or more combinational loops as latches”这里的loops ,说明出现多个循环,本程序计数器部分带有循环语句。

通过循环过程来实现延时功能,从而使路灯实现变亮后延时一段时间自动熄灭的功能。

4.2 系统有关波形的仿真
4.2.1 波形仿真前设置
1. 开波形编辑器,选择Fire—New 命令,在New窗口中选择Other Fire\ 选项卡中的V ector Waveform Fire 选项;
2. 设置仿真时间区域,选择Edit—end time 命令,在弹出的窗口中的Time 文本框中输入仿真域时间,本次设计设为50微秒;
3. 波形文件存盘;
4. 将工程switch 端口信号节点选入波形编辑器中;
5. 编辑输入波形,call1、call2、call3时钟周期设为1秒,clk的时钟周期设为2微秒,clr的时钟周期设为8微秒;
4.2.2 波形仿真
启动仿真器,观察的波形如下:
图4
4.2.3 仿真波形说明、
通过波形图,程序设计中的各输入输出端口以及时钟脉冲的时序关系可以很清楚的了解到。

Clr作为整个电路的总开关,起到保护作用,从图可以看出,当clr=‘0’时,kg1、kg2、kg3均为低电平,表明call1、call2、call3输入的高电平脉冲对相应的灯泡无效,即所有的触摸开关均处于关闭状态,而此时led1、led2、led3均保持高电平,这是由程序赋予的初始值决定的,方便晚上路灯未开时能准确找到触摸开关的位置,这正是实际生活中的需要。

Clk作为整个电路的时钟脉冲信号,当有时钟上升沿到来时,并且 clr 处于高电平,此时通过按键(相当于触摸开关)输入高电平信号,位于一、二、三楼的电灯依次由call1、call2、call3激发点亮,同时,对应的开关指示灯led1、led2、led3分别变暗,由于试验箱上没有变色二极管,此处就以亮代表黄色,暗代表绿色。

Clk还是延时模块的触发信号,当时钟上升沿到来时触发SYNC进入工作状态,CLK和SYNC构成或门信号,有条件地共同控制计数器计数,整个延时电路是由三个不同进制的计数器组合起来实现的。

最后计数完毕输出delay信号与clk相并,控制电灯熄灭。

4.2.4 引脚锁定
端口引脚端口引脚
clk 240 led2 4
clr 239 led3 7
call1 233 kg1 1
call2 234 kg2 3
call3 235 kg3 6
led1 2
4.2.5引脚锁定说明
Clk为时钟脉冲,clr为整个电路的总控制端,相当于总开关;call1、call2、call3为开关,分别对应于锁定在键一、键二、键三;led1、led2、led3分别为三个楼层的触摸开关指示灯,锁定于三个发光二极管D2、D4、D6;kg1、kg2、kg3分别对应于1、2、3楼的触摸开关,分别锁定在三个发光二极管D1、D3、D5。

5.课程设计总结
专业课程不仅是对一个学期以来我们对相关专业课程的掌握程度的考查,更是对一个学生专业素质和动手实践能力的检验。

通过这次课程设计,我们看到了自己的不足,找到了问题的症结,我们尝试过很多方法,在不断犯错误中求得进步,弥补了自己对相关专业知识掌握的不足之处,同时也增进了与同学之间的协作能力,期间涉及的许多方案的设计和选择,让自己在组织材料方面和独立思考分析问题方面得到了加强。

很多问题看似简单,实则不然,需要经过认真细心的观察和思考才能领会到其中的本质,比如这次课程设计中我们遇到的有关延时电路模块的设计,初看是一个计数器实现延时的问题,实际上里面隐含了很多的问题:包括延时的子模块如何组合、计数器的进制如何选择、以及起关键作用的一个或门的设计,这些都是延时器成败与否的关键。

所有这些问题不经过认真分析是发现不了的。

想好方案之后就是如何将方案付诸实施的过程,这个过程需要细心和耐心,否则很容易出现小差错最终导致整个设计的失败,因此此环节锻炼了我们的耐心。

设计的最后阶段就是对整个设计进行验证仿真,提高了我们发现和纠正错误的能
力,整个设计还提高了自己动手操作的技巧和实践的能力。

所用同学一起动手的场景营造了一种浓浓的学习气氛让我感受颇深。

6仪器仪表清单
7 致谢
经过两周的努力本次课程设计最终实现了既定的目标,这和同组成员的努力是分不开的。

同时,一起做课程设计的同学给予了我们很大帮助,是他们的热心使我少走了很多弯路,在这里非常真诚的感谢他们!
课程设计当中指导老师成继中老师给予了我们细心的指导和耐心的帮助,让我们学会了很多书本没有的知识,提供给了我们非常实用的设计方法和技巧,
才让我们这次课程设计得以最终成功,在这里向成老师表示非常的感谢!
8 参考文献
[1] 黄任.VHDL入门解惑经典实例经验总结.北京:北京航空
航天大学出版社,2004
[2] 刘艳. EDA 技术在数字系统电路设计实验中的应用[J]. 实验室
研究与探索,2002,21(3): 63264
[3] EDA技术与VHDL (第二版) 清华大学出版社
[4] 王道宪.CPLD/FPGA 可编程器件应用与开发[M].北京:国防工
业出版社,2003
附录
library ieee;
use ieee.std_logic_1164.all;
entity asm is
port(call1,call2,call3:in std_logic;
clr,clk:in std_logic;
led1,led2,led3,kg1,kg2,kg3:out std_logic);
end;
architecture a of asm is
type states is (s0,s1,s2); --对状态机的状态进行声明。

signal q:std_logic_vector(0 to 2);
signal state:states;
begin
p1: process(clk,clr)
begin
if(clr='0')then
state<=s0;
elsif(clk'event and clk='1')then
case state is --用case语句描述状态机最方便。

when s0=>
state<=s1;
when s1=>
state<=s2;
when s2=>
state<=s0;
end case;
end if;
end process p1;
p2:process(call1,call2,call3)
begin
if clr='0' then
kg1<='0';led1<='1';
kg2<='0';led2<='1';
kg3<='0';led3<='1';
else
case state is
when s0 =>
if call1='1'then
kg1<='1';led1<='0'; kg2<='0'; kg3<='0';
else
kg1<='0';led1<='1'; kg2<='0'; kg3<='0'; end if;
when s1=>
if call2='1'then
kg2<='1';led2<='0'; kg1<='0'; kg3<='0'; else
kg2<='0';led2<='1'; kg1<='0'; kg3<='0'; end if;
when s2 =>
if call3='1'then
kg3<='1';led3<='0'; kg1<='0'; kg2<='0'; else
kg3<='0';led3<='1'; kg1<='0'; kg2<='0'; end if;
end case;
end if;
end process p2;
end;。

相关文档
最新文档