单位文秘网 2020-07-29 09:30:13 点击: 次
基于 CPLD 的交通灯设计
作者姓名 :
***
( 270010 **** )
*** (270010**** )
*** (270010****)
摘
要 要 现代 EDA 技术是用于电子产品设计中比较先进的技术,可以代替设计者完成电子系统设计中的大部分工作,而且可以直接从程序中修改错误及系统功能而不需要硬件电路的支持,既缩短了研发周期,又大大节约了成本,受到了电子工程师的青睐。在设计中采用 EDA 技术,通过广泛应用的 VHDL 硬件电路描述语言,实现交通灯系统控制器的设计,利用 MAXPLUS Ⅱ集成开发环境进行综合、仿真,并下载到 CPLD 可编程逻辑器件中,完成系统的控制任务。以下就是运用基于Altera 公司的 FLEX 系列的 CPLD 设计的交通灯:其中红灯亮,表示该条路禁止通行;黄灯亮表示停车;绿灯亮表示允许通行。
关键词:交通灯
VHDL
CPLD
Abstract Modern EDA technology is used in electronic product design, more advanced technology, can replace the design of electronic systems designers to complete most of the work, and can be modified directly from the program errors and system functions without the need for hardware support, not only shorten the development cycle, but also significant cost savings by the electronic engineers of all ages. EDA technology used in the design, widely used by VHDL hardware description language to realize the design of traffic signal system controller, using MAXPLUS Ⅱ comprehensive integrated development environment, simulation, and download to the CPLD programmable logic devices, complete system control tasks. The following is the use of Altera"s FLEX series based on CPLD design of traffic lights: one red light, indicating that the road is closed to traffic; yellow light that parking; green light that allowed to pass.
Key words: traffic lights VHDL CPLD
目 目
录
引
言........................................................................................................................................ - 4 - 第一章
任务分析 .................................................................................................................. - 4 - 一﹑设计任务 ...................................................................................................................... - 4 - 二、整体构思 ...................................................................................................................... - 4 - 第二章
硬件电路设计 .......................................................................................................... - 5 - 一、分频器 .......................................................................................................................... - 5 - 二、控制器设计 .................................................................................................................. - 6 - 三、将十进制数字分成个位和十位 .................................................................................. - 6 - 四、十进制-BCD 码转换器设计 ....................................................................................... - 7 - 五、数据选择器设计 .......................................................................................................... - 7 - 六、数码管译码器设计 ...................................................................................................... - 8 - 七、下图为交通灯控制器的顶层文件连接图 .................................................................. - 8 - 第三章
程序设计 ...................................................................................................................... - 9 - 一、分频器的设计 .............................................................................................................. - 9 - 二、控制设计 .................................................................................................................... - 10 - 三、分位译码电路设计 .................................................................................................... - 11 - 四、十进制-BCD 码转换 ................................................................................................. - 12 - 五、数据选择器设计 ........................................................................................................ - 13 - 六、位数选通器设计 ........................................................................................................ - 14 - 七、数码管显示设计 ........................................................................................................ - 15 - 八﹑系统仿真波形图如下所示:
.................................................................................... - 16 - 第四章 PCB 板设计 ................................................................................................................. - 16 - 一﹑原理图设计 ................................................................................................................ - 16 - 二﹑PCB 板 ....................................................................................................................... - 17 - 第五章
总结 .......................................................................................................................... - 17 - 参考文献 .................................................................................................................... - 18 -
引 引
言 随着我国经济的快速发展,车辆拥有量也随之急剧增加,再加上人口数量的膨胀,城市的交通拥挤问题变得日益突出。如何使交通灯的控制更加合理,使现有的交通资源发挥更大的效益,已经成为城市管理者和科技工作者共同关心的问题。为此,我们设计开发了一个交通灯控制系统,由于该系统采用 VHDL 语言自顶向下的设计方法,利用可编程逻辑器件 CPLD 来实现,通过外部输入可方便地设定交通灯的延迟时间,使交通灯控制数字电路设计得到了优化,提高了系统的灵活性、可靠性和可扩展性。该系统可以较好地缓解交通压力,并可实现对突发事件进行紧急处理。
在数字系统设计领域,电子设计自动化(EDA)工具已经成为主要的设计手段,随着硬件描述语言 VHDL 和可编程逻辑器件 CPLD 的广泛应用,使数字电路的设计得到了优化,并且具有很强的设计和仿真功能 。
第一章
任务分析 一﹑ 设计任务
设计一个十字路口的交通灯控制系统,用 LED 显示车辆通过的方向(东西和南北各一组),用数码管显示该方向的剩余时间。要求:工作顺序为东西方向红灯亮 45 秒,前40 秒南北方向绿灯亮,后 5 秒黄灯亮。然后南北方向红灯亮 45 秒,前 40 秒东西方向绿灯亮,后 5 秒黄灯亮。依次重复。有紧急事件时允许将某方向一直开绿灯或者开红灯,另外允许特定情况两方向均为红灯,车辆禁行,比如十字路口恶性交通事故时,东西,南北两个方向均有两位数码管适时显示该方向亮灯时间。
二、整体构思 (1) 该交通灯控制器应具备的功能
设东西和南北方向的车流量大致相同,因此红、黄、绿灯的时长也相同,定为红灯 45 秒,黄灯秒,绿灯 40 秒,同时用数码管指示当前状态(红、黄、绿)剩余时间。另外,设计一个紧急状态,当紧急状态出现时,两个方向都禁止通行,指示红灯。紧急状态解除后,重新计数并指示时间。另外,为显示时间,还设计了一个数码显示管的倒计时模块。
(2) 实现方案
一 从题目中计数值与交通灯的亮灭的关系如图(1)所示
图(1 )交通灯亮灭关系图 系统框图如下所示
第二章
硬件电路设计 一、 分频器 分频器实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。该分频器实现的是一千分频,将一千赫兹的时钟信号分频成一赫兹的时钟信号,其原理图如下所示。
东西方向 绿灯亮 黄灯亮 红灯亮 南北方向 红灯亮 绿灯亮 黄灯亮
二、 控制器设计 控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。此外,当检测到特殊情况(HOLD=‘1’)发生时,无条件点亮红灯的二极管。本控制器可以有两种设计方法,一种是利用时钟烟的下降沿读取前级计数器的计数值,然后作出反应;另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动。这两种方法各有所长,必须根据所用器件的特性进行选择:比如有些 FPGA 有丰富的寄存器资源,而且可用与组合逻辑的资源则相对较少,那么使用第一种方法会比较节省资源;而有些 CPLD 的组合逻辑资源则比较多,用第二种方法可能更好,其原理图如下所示。
三、 将十进制数字分成个位和十位 因为控制器输出的到计时数值可能是 1 位或者 2 位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为 2 个 1 位的十进制数,如 25 分为 2和 5,7 分为 0 和 7)。
与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。控制器中,引入了寄存器。分位电路就用组合逻辑电路实现。
四 、 十进制-BCD 码转换器 设计 根据要求,需要先把上面的十进制的时间量分别转换成 BCD 码,这样才好在七段数码管中显示,这部分的原理图如下。
五、数据选择器设计 为了节约 CPLD 的管脚,我们特地设计一个数据选择器,将数据分时送出,传给十 引 脚 双 数 字 的 led 数 码 管 , 其 原 理 图 如 下 。
六、 数码管 译码器设计 这部分用来译码,原理框图如下。
七、 下图为交通灯控制器的顶层文件连接图
第三章
程序设计 一、 分频器的设计
LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;
ENTITY FreDevider IS PORT
(Clkin:IN Std_Logic;
Clkout:OUT Std_Logic); END;
ARCHITECTURE Devider OF FreDevider IS CONSTANT N:Integer:=499; signal counter:Integer range 0 to N; signal Clk:Std_Logic; BEGIN
PROCESS(Clkin)
begin
IF rising_edge(Clkin)THEN
IF Counter=N then
counter<=0;
Clk<=not clk;
else
counter<=counter+1;
end if;
end if;
end process;
clkout<=clk; end; 仿真图如下所示
二、 控制设计 控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY countroller IS
PORT (Clock:IN STD_LOGIC;
Hold:in std_logic;
NumA,NumB:out INTEGER RANGE 0 TO 45;
RedA,GreenA,YellowA:out std_logic;
RedB,GreenB,YellowB:out std_logic);
END; ARCHITECTURE behavior OF Countroller IS
BEGIN process(Clock) VARIABLE CountNum:INTEGER:=0; BEGIN IF falling_edge(Clock)THEN
IF CountNum=89 THEN
CountNum:=0; elsif Hold="1" THEN
CountNum:=0; ELSE CountNum:=CountNum+1; END IF; IF Hold="1" THEN
RedA<="1";
GreenA<="0";
YellowA<="0";
NumA<=0; ELSIF CountNum<=39 THEN
NumA<=39-CountNum;
RedA<="0";
GreenA<="1"; YellowA<="0";
ELSIF CountNum<=44 THEN
NumA<=44-CountNum;
RedA<="0";
GreenA<="0";
YellowA<="1"; ELSE
NumA<=89-CountNum;
RedA<="1";
GreenA<="0"; YellowA<="0"; END IF; IF Hold="1" THEN
RedB<="1";
GreenB<="0";
YellowB<="0";
NumB<=0; ELSIF CountNum<=44 THEN
NumB<=44-CountNum;
RedB<="1";
GreenB<="0";
YellowB<="0"; ELSIF CountNum<=84 THEN
NumB<=84-CountNum;
RedB<="0";
GreenB<="1";
YellowB<="0"; ELSe
NumB<=89-CountNum;
RedB<="0";
GreenB<="0";
YellowB<="1"; END IF; END IF; END PROCESS; END; 仿真图如下所示 三 、 分位译码电路设计 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Fenwei IS
PORT (Numin:IN integer RANGE 0 TO 44; NumA,NumB:OUT Integer RANGE 0 to 9 ); END; ARCHITECTURE behavior OF Fenwei IS
BEGIN process(Numin) BEGIN IF Numin>=40 THEN NumA<=4; NumB<=Numin-40; ELSIF Numin>=30 THEN NumA<=3; NumB<=Numin-30; ELSIF Numin>=20 THEN NumA<=2; NumB<=Numin-20; ELSIF Numin>=10 THEN NumA<=1; NumB<=Numin-10; ELSE
NumA<=0; NumB<=Numin; END IF; END PROCESS; END; 仿真图如下所示 四 、 十进制-BCD 码转换 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY D_BCD IS PORT (Numin:IN integer RANGE 0 TO 9; Numout:OUT STD_LOGIC_VECTOR(3 downto 0) ); END;
ARCHITECTURE behavior OF D_BCD IS
BEGIN process(Numin) BEGIN CASE Numin IS
WHEN 0=>Numout<="0000"; WHEN 1=>Numout<="0001"; WHEN 2=>Numout<="0010"; WHEN 3=>Numout<="0011"; WHEN 4=>Numout<="0100"; WHEN 5=>Numout<="0101"; WHEN 6=>Numout<="0110"; WHEN 7=>Numout<="0111"; WHEN 8=>Numout<="1000"; WHEN 9=>Numout<="1001"; WHEN OTHERS=>Numout<="----"; END CASE; END PROCESS; END; 仿真图如下所示
五 、 数据选择器 设计 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity mux1 is
Port ( s
: in std_logic_vector(1 downto 0);
cin : in
STD_LOGIC_vector(6 downto 0);
cinn: in
STD_LOGIC_vector(6 downto 0);
d_out : out
STD_LOGIC_vector(6 downto 0)
); end mux1; architecture Behavioral of mux1 is begin d_out(6)<=(cinn(6) and
s(1))
or(cin(6) and
s(0)); d_out(5)<=(cinn(5) and
s(1))
or(cin(5) and
s(0));
d_out(4)<=(cinn(4) and
s(1))
or(cin(4) and
s(0)); d_out(3)<=(cinn(3) and
s(1))
or(cin(3) and
s(0)); d_out(2)<=(cinn(2) and
s(1))
or(cin(2) and
s(0)); d_out(1)<=(cinn(1) and
s(1))
or(cin(1) and
s(0)); d_out(0)<=(cinn(0) and
s(1))
or(cin(0) and
s(0));
end Behavioral; 仿真图如下所示
六、位数选通器 设计 因为只需要选择个位和十位亮灭,所以只要用两个数值“01”和“10”来作为选择数值程序如下 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity sel1 is
Port ( clk2 : in
STD_LOGIC;
s : out
STD_LOGIC_vector(1 downto 0)
); end sel1; architecture Behavioral of sel1 is signal temp
: std_logic_vector(1 downto 0) :="10"; begin process(clk2) begin
if(clk2"event and clk2 ="1")then
if(temp ="10")then
temp<="01";
else
temp<="10";
end if; end if; end process; s<=temp; end Behavioral; 仿真图如下所示
七、数码管显示 设计 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity led is
Port ( data_in : in
STD_LOGIC_vector(3 downto 0) :="1000";
data_out: out
STD_LOGIC_vector(6 downto 0)
); end; architecture Behavioral of led is begin process(data_in) begin
case data_in is
when"0000"=>data_out<="1000000";
when"0001"=>data_out<="1111001";
when"0010"=>data_out<="0100100";
when"0011"=>data_out<="0110000";
when"0100"=>data_out<="0011001";
when"0101"=>data_out<="0010010";
when"0110"=>data_out<="0000010";
when"0111"=>data_out<="1111000";
when"1000"=>data_out<="0000000";
when"1001"=>data_out<="0010000";
when others=>data_out<="1111111";
end case;
end process; end; 仿真图如下所示
八 ﹑ 系统 仿真波形图如下所示:
:
第四章 PCB 板设计
一 ﹑ 原理图设计
PCB 板设计的原理图如下所示,其中,电源模块是将 5V 的电压转换成 3.3V 的电压,滤波部分是为了保证电压的稳定而设计的。
二﹑ ﹑PCB 板 板
PCB 板设计如下图所示
D 3D 图如下
第五章
总结 我们觉得我们设计的创新之处有:
1﹑ 模块化编程,模块化接线,再编译总原理图,思路比较清楚解容易。
2﹑ 可以比较容易的改变红绿灯的时间。
3﹑有的模块可以供其它任务通用
另外,做完这次《综合课程设计》,我们感觉程序调试最重要,试验软件、硬件熟悉其次。我在编完各模块程序之后,编译查错最初有三十几个错误,有输入错误、语法错误。一遍一遍的变异查错,直到没有错误。必须注意工程名和实体名一致,不然一般会出错。在没有错误之后可以进行波型仿真。若与理想的不同,再查看程序,有无原理上的编辑错误或没有查出的输入错误。都通过可以进行管脚配对,把程序烧入芯片,在实物机上看结果,从显示中得出还需改正的地方,再去改程序。必须注意没改一次都要编译,重新烧入。
参考 文献
(1)潘松,黄继业.2006.EDA 技术使用教程.北京:科学出版社。
(2)李扬;2005;VHDL 入门.解惑.经典实例.经验总结.北京:北京航空航天大学出版社。
(3)徐志军,徐光辉.2002.CPLD/FPGA 的开发与应用.北京:电子工业出版社。
(责任编辑:单位文秘网) )地址:https://www.kgf8887.com/show-146-9625-1.html
上一篇:学校道路交通安全事故应急预案
下一篇:幼儿园中班工作计划
版权声明:
本站由单位文秘网原创策划制作,欢迎订阅或转载,但请注明出处。违者必究。单位文秘网独家运营 版权所有 未经许可不得转载使用