彩灯循环控制系统设计报告.docx
- 文档编号:11386319
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:21
- 大小:313.11KB
彩灯循环控制系统设计报告.docx
《彩灯循环控制系统设计报告.docx》由会员分享,可在线阅读,更多相关《彩灯循环控制系统设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
彩灯循环控制系统设计报告
EDA技术课程设计
课题:
彩灯控制器的设计
系别:
电气与电子工程系
专业:
电子信息工程
姓名:
刘涛
学号:
093409142
指导教师:
梁成武赵红梅陈英
河南城建学院
2012年6月18日
成绩评定·
一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。
二、课程设计评分
成绩:
2012年6月日
目录
一、设计目的4
二、设计要求4
三、总体设计方案要求4
1、彩灯控制系统题目的分析4
2、彩灯控制系统设计的总体原理5
3、设计内容5
四、EDA程序设计及波形仿真分析6
1、时序电路模块6
2、显示电路模块10
五、硬件实现13
1、硬件实现步骤13
2、硬件仿真结果14
六、设计心得16
七、参考文献16
八、附录1总程序17
九、附录2设计生成的总电路图21
一、设计目的
本程序以计算机为工作平台,综合运用EDA软件工具开发环境、用硬件描述语言VHDL为设计语言,以ASIC来实现载体的设计。
通过在EDA中的编译和处理、仿真下载、调试分析,接受一次电子设计蓝领初步的设计训练,并使所学的知识和技能得到进一步巩固、深化和扩展,以达到可以运用EDA工具设计一些简单的电子产品,掌握使用EDA工具设计数字系统的设计思想和设计方法,为继续学习和认识电子设计知识打下良好的基础。
培养利用EDA技术知识,解决电子设计自动化中常见实际问题的能力,积累实际的EDA编程。
这次课程设计主要是培养我们的实际动手能力及对EDA这门课程的深入的理解,增强我们对EDA程序设计流程的掌握。
这个课题还要求我们掌握数控分频计及7段数码显示译码器的设计方法。
二、设计要求
1、用EDA技术设计一个彩灯控制器,使彩灯(LED管)能连续发出三种以上不同的花型(自拟);
2、随着彩灯显示图案的变化,发出不同的音响声。
3、要求使用7段数码管显示当前显示的花型,如第一种花型显示A1,第二种花型显示B2,第三种花型显示C3。
4、扩展功能:
要求每种花型对应一种LED灯花样显示。
三、总体设计方案要求
1、彩灯控制器系统题目的分析:
此题目要求是数码管连续显示三种以上的花型且显示不同花型的时候扬声器发出不同的音响声,LED显示出不同的花样。
如果扬声器要发出不同的音响声,则需要由输出不同的频率来实现。
显示电路模块可以使用计数扫描的方法实现。
然而问题出现了:
要想听到清晰的声音,必然要加大输入频率,但随着输入频率的增加,必然导致显示部分花型变换的频率就会相应的增加,以致花型变换过快,显示不明显。
所以我们要选择合适的频率,使既能听到清晰的声音,又能看到花型的变换及LED花样的显示。
我们可以利用分频器,实现频率的改变,这样既可以发出不同的声音,又可以满足花型变换过快显示不明显的问题。
因此,此题目设计的核心是分频器的使用。
2、彩灯控制器系统设计的总体原理
要实现一个彩灯控制器系统,整个系统主要由时序电路模块和显示电路模块组成。
首先分别实现单个模块的功能,然后再通过组合的方式实现对整个系统的设计。
原理框图如下:
图3.1总体设计框图
分频器的设计:
我们可以利用计数器实现分频,将控制器外接的频率分为几个我们预先设定的值。
当计数器达到预先设定的值,即产生一个上升沿,从而实现分频。
显示部分的设计是利用分频器产生的低频信号记数,从而达到控制数码管和LED显示时,不同花色之间变换及LED灯花样显示的频率不至于太快。
利用分频器输出的不同频率信号,可以在花型变换及LED灯显示的时候控制扬声器发出不同的声音。
3.设计内容
彩灯控制器系统主要模块有两个,它包括时序电路模块(即用计数器实现分频的电路)、显示电路模块(显示电路包括数码管显示花型电路和LED灯花样显示电路)。
各个模块先用EDA技术中的VHDL语言编程仿真,再生成各个小模块的模拟元件,再元件例化,根据设计连接电路实现彩灯控制器系统。
四、EDA程序设计及波形仿真分析(各个模块设计程序、原理框图及仿真波形图)
1、时序电路模块:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycaidengis
port(clk:
instd_logic;
clr:
instd_logic;
clk1_1:
outstd_logic;
clk2_1:
outstd_logic;
clk3_1:
outstd_logic;
clk4_1:
outstd_logic);
endentity;
architecturecaidengof caideng is
signalclk1:
std_logic;
signalclk2:
std_logic;
signalclk3:
std_logic;
signalclk4:
std_logic;
begin
process(clk,clr)
variablea:
std_logic_vector(6downto0);
begin
ifclr='1'then——复位信号为高电平,将CLK1置为低电平
clk1<='0';
elsifclk'eventandclk='1'then——如果遇到时钟上升沿,进行计数
ifa="1111100"then——如果计满“1111100”将a清零
a:
="0000000";
clk1<='1';——且将clk1置为高电平
else——否则就计数继续
a:
=a+1;
clk1<='0';
endif;
endif;
endprocess;
process(clk,clr)
variableb:
std_logic_vector(1downto0);
begin
ifclr='1'then——复位信号
clk2<='0';
else
ifclk'eventandclk='1'then——时钟上升沿,计数
ifb="10"then——计满清零且将clk2置为高电平
b:
="00";
clk2<='1';
else——否则就继续计数
b:
=b+1;
clk2<='0';
endif;
endif;
endif;
endprocess;
process(clk,clr)
variablec:
std_logic_vector(1downto0);
begin
ifclr='1'then
clk3<='0';
else
ifclk'eventandclk='1'then
ifc="01"then
c:
="00";
clk3<='1';
else
c:
=c+1;
clk3<='0';
endif;
endif;
endif;
endprocess;
process(clk,clr)
variabled:
std_logic_vector(1downto0);
begin
ifclr='1'then
clk4<='0';
else
ifclk'eventandclk='1'then
ifd="11"then
d:
="00";
clk4<='0';
else
d:
=d+1;
clk4<='1';
endif;
endif;
endif;
endprocess;
clk1_1<=clk1;
clk2_1<=clk2;
clk3_1<=clk3;
clk4_1<=clk4;
endarchitecturecaideng;
显示模块代码仿真结果:
图4.1显示模块代码仿真结果图
时序模块生成的电路图:
图4.2时序模块生成的电路图
时序模块的仿真波形图:
图4.3时序模块的仿真波形图
代码编译成功之后便可进行波形的仿真,为了方便观察显示结果,这里调节仿真时间为1us,脉冲频率clk的周期为20ns,复位信号为clr.。
保存之后,执行Quartus软件中的波形仿真按钮,即可观察到波形仿真图像。
通过观察图像可以发现,时钟信号一直以20ns的频率输入,在复位信号clr为高电平的时候,计数器中间变量a、b、c、d被置为零。
当复位信号clr不为高电平时,变量a、b、c、d开始计数,当b计够两个时钟周期的上升沿的时候,clk2_1被置为高电平,等待下一个时钟上升沿来临的时候,重新置为低电平,如此循环得到新的时钟周期。
Clk1_1、clk3_1、clk4_1类似,特别说明一下,clk1_1,由于显示模块要使用低频的时钟信号,所以clk1_1的中间变量被设为记满“1111100”才被置为高电平,用以降低频率,延长显示时间。
2、显示电路模块:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycaidengis
port(clk:
instd_logic;
clr:
instd_logic;
led7:
outstd_logic_vector(6downto0);
led16:
outstd_logic_vector(15downto0));
endentity;
architecturecaidengofcaidengis
signaln:
std_logic_vector(9downto0);
signaldisplay:
std_logic_vector(6downto0);
signaldisplay1:
std_logic_vector(15downto0);
begin
process(clk,clr)is
begin
ifclr='1'then--复位信号为高电平,中间量n清零
n<="0000000000";
elsifclk'eventandclk='1'then--否则如遇到时钟上升沿,计数开始
ifn="1111111111"then--计满“1111111111”,将中间量清零
n<="0000000000";
else
n<=n+1;
endif;
ifn>="0000000000"andn<="0111010100"then
display<="1110111";display1<="1010101001010101";
elsifn>="0111010100"andn<="1010101000"then
display<="1111111";display1<="0101010110101010";
elsifn>="1010101000"andn<="1111111111"then
display<="0111001";display1<="1100110000110011";
endif;
endif;
endprocess;
led7<=display;
led16<=display1;
endarchitecturecaideng;
显示模块代码仿真结果:
图4.4显示模块代码仿真结果图
显示模块生成的电路图:
图4.5显示模块生成的电路图
显示模块的时序仿真波形图:
图4.6显示模块的时序仿真波形图
观察此波形,可以看到,当遇到时钟上升沿信号的时候,计数开始,当计数在n=>"0000000000"与n<="0111010100"之间的时候,数码管显示“1110111”即字母A,LED灯显示出"1010101001010101"(高电平发光)花样。
当计数在n=>"0111010100"与n<="1010101000"之间的时候,数码管显示“1111111”即字母B,LED灯显示出"0101010110101010"花样(高电平发光);当计数在n=>"1010101000"与n<="1111111111"之间的时候,数码管显示“0111001”即字母C,LED灯显示出"1100110000110011"花样(高电平发光)。
五、硬件实现
1、硬件实现步骤
⑴打开QuartusⅡ9.0软件,建立进程,进程的名字和程序的名字相同;
⑵打开新建选择VHDLFile,然后把程序输入进去;
⑶保存文件点击软件页面上方的编译按键进行编译;
⑷编译成功后,进行软件仿真,点击File选择VectorWaveformFile,然后点击鼠标右键选insetnodeorbus键,把脚码输入进去,再进行脚码设定;
⑸然后保存,点击Assigment中的settings选择时序仿真,进行程序的时序仿真;
⑹时序仿真成功后,点击上方AssigmentEditor键进行脚码锁定;脚码锁定中我们用了模式二。
图5.1脚码锁定图
如上图所示,硬件实现选用实验箱模式2方式下完成,在实验过程中clk的引脚选择clock0即外接频率源PIN_L1,频率选择为16384HZ。
复位信号clr引脚用按键1进行控制锁定为PIN_G20,其余数码管的使能端引脚分配见上图。
选择编译按钮,重新编译,编程下载。
在quartusⅡ软件中,选择tools/programmer,选择HardwareSettings,然后添加USB_Blaster。
点击”addfile”按钮添加需要配置的caideng.sof文件,点击start按钮下载代码到芯片,即可观察到硬件实验结果。
在实验箱上,我们观察到实验结果按我们所设计的那样显示,即可显示我们预先设定的三种花型A、B、C和LED灯花样显示并且能够按要求进行固定频率的变换显示,并当显示不同的花型和LED灯花样显示时扬声器发出了不同的声音。
当按下复位键时我们可以看到数码显示管显示暂停,且扬声器不再发出响声。
2.硬件仿真结果
调节工作方式为模式2,程序下载完成后,然后下清零按键,电路按照我们预先设定好的状态开始工作。
下面是硬件仿真图:
图5.2硬件仿真结果图示一
图5.3硬件仿真结果图示二
图5.4硬件仿真结果图示三
六、设计心得
通过本次两周的课程设计,我对EDA这门课程有了初步的了解。
通过与同学探讨,终于把设计过程中所遇到的问题都解决了,并加深了对循环彩灯控制系统的设计原理和设计思路的了解。
同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。
做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。
不过本次设计也存在一些不足,暴露了自己对EDA的掌握还有所欠缺。
在设计过程中,分频分的频率太小的话,扬声器的声音体现不出显示不同花型和不同LED灯花样时的区别;频率太大的话,数码管显示速度太快,显示不明显。
在反复调试中,发现在16384HZ频率下工作,数码管显示花型,LED灯花样显示比较明显,扬声器发出的声音也较清晰。
总之,通过这次两周的课程设计,我学到了不少的东西。
发现了自己存在的一些问题:
1对EDA编程语言的熟练程度不够,经常出现语法和句式的错误。
2编程的思路不是很清晰,对分模块设计的思想理解不够。
3仿真调试时代码出现的错误不知如何解决。
不过还好,在设计的过程中,和同学的交流,让我对这些自身存在的问题认识的更深刻,在以后的学习中,我一定注意这些问题,并逐渐克服,争取学好这门课程。
七.参考文献
⑴XX文库,循环彩灯控制系统的设计;
⑵VolneiA.Pedroni.VHDL数字电路设计教程.电子工业出版社;
⑶杭州康芯电子有限公司.EDA技术实验讲义;
⑷刘洪喜,陆颖编著.《VHDL电路设计实用教程》清华大学出版社
⑸李国丽、朱维勇、何剑春.《EDA与数字系统设计》.2版.机械工业出版社2009
附录1:
总程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycaidengis
port(clk:
instd_logic;
clr:
instd_logic;
speak:
outstd_logic;
led7:
outstd_logic_vector(6downto0);
led16:
outstd_logic_vector(15downto0));
endentity;
architectureoneofcaidengis
signalclk1:
std_logic;
signalclk2:
std_logic;
signalclk3:
std_logic;
signalclk4:
std_logic;
signaln:
std_logic_vector(9downto0);
signaldisplay:
std_logic_vector(6downto0);
signaldisplay1:
std_logic_vector(15downto0);
begin
process(clk,clr)
variablea:
std_logic_vector(6downto0);
begin
ifclr='1'then——复位信号为高电平,将CLK1置为低电平
clk1<='0';
elsif(clk'eventandclk='1')then——如果遇到时钟上升沿,进行计数
ifa="1111100"then——如果计满“1111100”将a清零
a:
="0000000";
clk1<='1';——且将clk1置为高电平
else——否则就计数继续
a:
=a+1;
clk1<='0';
endif;
endif;
endprocess;
process(clk,clr)
variableb:
std_logic_vector(1downto0);
begin
if(clr='1')then——复位信号
clk2<='0';
else
if(clk'eventandclk='1')then——时钟上升沿,计数
ifb="10"then——计满清零且将clk2置为高电平
b:
="00";
clk2<='1';
else——否则就继续计数
b:
=b+1;
clk2<='0';
endif;
endif;
endif;
endprocess;
process(clk,clr)
variablec:
std_logic_vector(1downto0);
begin
ifclr='1'then
clk3<='0';
else
if(clk'eventandclk='1')then
ifc="01"then
c:
="00";
clk3<='1';
else
c:
=c+1;
clk3<='0';
endif;
endif;
endif;
endprocess;
process(clk,clr)
variabled:
std_logic_vector(1downto0);
begin
ifclr='1'then
clk4<='0';
else
if(clk'eventandclk='1')then
ifd="11"then
d:
="00";
clk4<='0';
else
d:
=d+1;
clk4<='1';
endif;
endif;
endif;
endprocess;
process(clk1,clr)is
begin
if(clr='1')then--复位信号为高电平,中间量n清零
n<="0000000000";
elsif(clk1'eventandclk1='1')then--否则如遇到时钟上升沿,计数开始
ifn="1111111111"then--计满“1111111111”,将中间量清零
n<="0000000000";
else
n<=n+1;
endif;
ifn>="0000000000"andn<="0111010100"then
display<="1110111";display1<="1010101001010101";speak<=clk2;
elsifn>="0111010100"andn<="1010101000"then
display<="1111111";display1<="0101010110101010";speak<=clk4;
elsifn>="1010101000"andn<="1111111111"then
display<="0111001";display1<="1100110000110011";speak<=clk3;
endif;
endif;
endprocess;
led7<=display;
led16<=display1;
endarchitectureone;
附录2:
设计生成的电路图
附表:
程序生成电路总图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 彩灯 循环 控制系统 设计 报告