基于VHDL语言的简易洗衣机控制器Word格式文档下载.docx
- 文档编号:20627542
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:17
- 大小:24.58KB
基于VHDL语言的简易洗衣机控制器Word格式文档下载.docx
《基于VHDL语言的简易洗衣机控制器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的简易洗衣机控制器Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
一、设计任务与要求
设计一个洗衣机洗涤程序控制器,控制洗衣机的电动机按下图所示的规律运
转:
时间到
用两位数码管预置洗涤时间(分钟数,洗涤过程在送入预置时间后开始运转,洗涤中按倒计时方式对洗涤过程作计时显示,用LED表示电动机的正、反转,如果定时时间到,则停机并发出音响信号。
二、总体框图
RUNREVPAUSE
time_overclkK5start
K6load
K1K2K3K4
各个部分的具体功能描述如下:
(一预设时间和编码电路(settime:
接受用户通过按钮预置的时间信息,编码
译码驱动模块(move
clkout_1out_2
start时序电路模块(analyse
clktime_over
start十进制减法计数器模块(counter
洗涤预置时间编码寄存电路模块(settime
报警信号
时间显示模块(showtime
定时启动停止
正转暂停反转暂停
成八位之后转给减法计数器。
(二减法计数器电路(counter:
接收编码之后的预置时间信息,向电机运转
控制电路传递运行信号,并将预置时间信息和剩余时间信息发给数码管显示电路进行实时显示。
(三数码管显示电路(showtime:
接收减法计数器电路传来的时间信息,进行
实时译码显示。
(四电机运转时序控制电路(analyse:
接收运行起止信号,安排电机运行状态
并编码输出。
(五译码器(move:
接收电机运行状态信号,译码后实时控制电机的正传、反转
和暂停。
三、选择器件
1、pc机一台。
2、CPLD/FPGA适配器板:
标准配置EPF10K10LC84-4接口板,下载接口是数字芯片的下载接口(DIGITALJTAG,主要用于CPLD/FPGA芯片的数据下载。
3、实验箱:
装有七段数码管及蜂鸣器等,七段数码管字形及真值表如下
七段数码管字形如下:
七段数码管真值表如下:
四、功能模块
4.1时间预置编码寄存模块(settime
1、时间预置编码寄存模块settime如图1所示,time_input为通过开发板上拨码开关K1、K
2、K
3、K4输入的信号,load为输入确认信号。
本模块将输入的四位时间信号编码成八位二进制数输出到减法计数器电路。
图1时间预置编码寄存模块settime
2、仿真图
图2时间预置编码寄存模块仿真图
用K1、K2、K3、K4给time_input输入一个二进制数0111,让load有效,输出time_set为00000111。
3、时间预置编码寄存模块源代码
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysettimeis
port
(
load:
instd_logic;
time_input:
instd_logic_vector(3downto0;
time_set:
outstd_logic_vector(7downto0
;
endsettime;
architecturesettimeofsettimeis
signalp1:
std_logic_vector(7downto0;
begin
process(load
if(load'
eventandload='
1'
then
casetime_inputis
when"
0000"
=>
p1<
="
00000000"
0001"
00000001"
0010"
00000010"
0011"
00000011"
0100"
00000100"
0101"
00000101"
0110"
00000110"
0111"
00000111"
1000"
00001000"
1001"
00001001"
whenothers=>
endcase;
endif;
endprocess;
time_set<
=p1;
4.2减法计数器模块(counter
1、减法计数模块counter如图3所示,本模块中clk为系统时序脉冲信号,start为系统开始运行的信号,time_set接收编码之后的预置时间信息,向电机运转控制电路传递运行信号,并将预置时间信息和剩余时间信息发给数码管显示电路进行实时显示。
time_remain为输出到数码管显示电路的时间信号,time_over为系统运行结束信号,可以用来控制蜂鸣器的通断。
图3减法计数模块
图4减法计数模块仿真图
3、减法计数模块源程序
entitycounteris
clk,start:
instd_logic_vector(7downto0;
time_remain:
bufferstd_logic_vector(7downto0;
time_over:
bufferstd_logic
endcounter;
architecturecounterofcounteris
process(clk
variabletime_second:
integerrange0to59:
=59;
if(clk'
eventandclk='
if(start='
0'
if(time_remain(7downto0=0
time_remain<
=time_set;
else
time_remain(7downto4<
=time_remain(3downto0;
time_remain(3downto0<
=time_set(3downto0;
endif;
time_second:
time_over<
='
if(time_over='
if(time_second=0andtime_remain(7downto0=0then
if(time_second=0
if(time_remain(3downto0=0
=time_remain(7downto4-1;
=time_remain(7downto4;
=time_remain(3downto0-1;
time_second:
=time_second-1;
4.3数码管显示模块(showtime
1、数码管显示模块showtime如图5所示,本模块clk为系统时序脉冲信号,time_remain接收减法计数器电路传来的时间信息,进行实时译码显示,a,b,c,d,e,f,g分别对应数码管的七段,minute和second分别位选两个数码管,显示十位和个位。
图5数码管显示模块
图6数码管显示模块仿真图
3、数码管显示模块源程序
entityshowtimeis
clk:
minute,second:
outstd_logic;
a,b,c,d,e,f,g:
outstd_logic
endshowtime;
architectureshowtimeofshowtimeis
signaltemp:
std_logic_vector(6downto0;
signalbcd:
std_logic_vector(3downto0;
signalchoose:
std_logic;
choose<
=notchoose;
if(choose='
minute<
second<
bcd<
=time_remain(7downto4;
else
=time_remain(3downto0;
process(bcd
casebcdis
temp<
1111110"
0110000"
1101101"
1111001"
0110011"
1011011"
1011111"
1110000"
1111111"
1111011"
a<
=temp(6;
b<
=temp(5;
c<
=temp(4;
d<
=temp(3;
e<
=temp(2;
f<
=temp(1;
g<
=temp(0;
4.4时序电路模块(analyse
1、时序电路模块analyse如图7所示,本模块由start控制使能控制,通过时钟的输入进行计算当前系统所处的状态,并进行编码输出电机的运转状态,out_1为高位时表示电机正转,out_2为高位时表示电机反转。
由于在显示以及输入的时候只有分钟,故在模块内部设计了一个秒的计时变量。
图7时序电路模块
2、仿真图
3、时序电路模块analyse源程序
entityanalyseis
clk,start,time_over:
out_1,out_2:
endanalyse;
architectureanalyseofanalyseis
variablestate:
variablewash_time:
integer:
=0;
variablewait_time:
wash_time:
wait_time:
state:
out_1<
out_2<
if(wash_time=20
if(wait_time=10
=notstate;
=wait_time+1;
=wash_time+1;
if(wash_time=20
if(state='
4.5译码器模块(move
1、译码器模块move如图9所示,out_1和out_2接收时序电路模块的信号对信号进行译码,安排电机运行状态即正转(RUN、反转(REV、暂停(PAUSE,并进行输出。
此模块较为简单,设计基本没什么难度。
图9译码器模块
图10译码器模块仿真图
3、译码器模块move源程序
entitymoveis
REV,RUN,PAUSE:
endmove;
architecturemoveofmoveis
std_logic_vector(1downto0;
choose(1<
=out_1;
choose(0<
=out_2;
process(choose
casechooseis
00"
REV<
RUN<
PAUSE<
10"
01"
=not(out_1orout_2;
endprocess;
五、总体设计电路图5.1总体(顶层)设计电路图图11各模块连结后的电路图系统运行过程如下:
在系统进行运行之前,使用K按钮预置洗衣机运转时间,此时用户设定的时间通过数码管时时显示出来,计时设备选取的精度是分钟级,也就是说用户可以设定洗衣时间是多少分钟,范围为00-99。
然后用户可以给出开始信号,系统开始运转并开始从预设时间倒计时,重复“正传->
暂停->
反转->
暂停”的循环过程直至剩余时间变为零,剩余时间为零时,time_over指示报警信号。
数码管在系统的整个运行过程中时时显示剩余运转时间。
本设计在电路中加入了扫描信号,输入到减法模块,时序电路模块,实时显示模块。
由于扫描信号非常高,在我们看来,输出在数码管上的数字都是连续的两位数字,由预置时间开始以一分钟减一的速度递减。
当数码管显示为零时,洗衣停止。
5.2顶层文件仿真13
由上图可以看出:
当预置号时间,启动start,数码管显示预置时间,电机开始以正转=>
暂停=>
反转=>
暂停为周期进行循环,一个周期正好费时一分钟,一个周期结束,数码管显示减一,依次循环,直至数码管显示时间为零,洗衣结束。
5.3管脚分配图5.4硬件实验效果图14
六、课程设计心得体会二周的课程设计终于做完了,在这二周的课设中我感觉我学到了蛮多东西。
首先,我学会了如何对一个大的课题进行分析——将大的整体划分为许多小的部分,直到各个部分容易设计出来。
关于这个洗衣机控制器,就是用模块化层次化的设计方法进行系统层的设计,这样分解下来,设计会更容易点,思路也比较简单。
洗衣机控制器主要就只有三个状态,要实现几种状态的多次循环的改变,其他的还有计时和数码显示的功能,通过每个模块的设计最后组装即可完成系统级的设计。
在设计的时候,如果特别要注意各个模块之间接口的设计,要是接口不对,模块之间就没法实现组装。
其次,这次课程设计让我感受到了我对所学习的内容是多么的不熟练,在编程的时候还要老是去翻书。
我记忆在深刻的是在编写程序时,看了一遍又一遍书但在编写的过程中还是出错了,最后只好对着书编写。
但我觉的出现问题并不是很要紧,这些问题能提醒我那些地方没有学好,只要我重视这些地方将其巩固我想我将能学到许多的知识。
通过这次设计,对于VHDL的设计方法大致有了一些技巧性的了解,位以后的硬件设计打下了基础,对FPGA的编程、定时器和计数器的设计都熟悉起来,加深了对时序组合电路的印象。
最后,我感觉我对QuartusII软件的使用熟练了许多。
我虽然以前在试验的时候使用过QuartusII这个软件,但用的时间毕竟不长,对其不太熟练,经过这次做课设我对这个软件运用熟练很多,这对以后的学习一定有很大的帮助。
我想在面对一个问题时不能存在侥幸心理,只要我们认真对待它,我们就能学到东西。
通过在网上进行各种资料的查询,也发现了其实FPGA的设计具有较好的前景,其功能的强大和设计方法的简单可靠。
具有较强的适应能力和可移植性。
15
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 语言 简易 洗衣机 控制器