洗衣机控制器数字逻辑课程设计报告讲解_第1页
洗衣机控制器数字逻辑课程设计报告讲解_第2页
洗衣机控制器数字逻辑课程设计报告讲解_第3页
洗衣机控制器数字逻辑课程设计报告讲解_第4页
洗衣机控制器数字逻辑课程设计报告讲解_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、石家庄经济学院华信学院数字逻辑课程设计报告题 目 洗衣机控制器姓名学号班号指导老师成绩2014 年 6 月1. 课程设计目的 2. 开发工具选择 3. 设计方案 4 模块描述 5. VHDL 实现 6. 调试仿真 7. 课程设计回顾总结参 考 文 献 附录 1 课程设计目的设计一个洗衣机控制器,控制洗衣机的电机按照下图要求运转用两位数码管预置洗涤时间 (分钟数) ,洗涤过程在送入预置时间后开始运转,洗涤 中按倒计时方式对洗涤过程作计时显示,用 LED表示电动机的正、反转,如果定时时间 到,则停机并发出音响信号。2 开发工具选择( 1)硬件描述语言洗衣机控制器的设计采用了功能强大的 VHDL语言

2、,它具有很强的行为能力描 述,设计方法灵活,可以支持库和模块设计方法。( 2)QuartusII 软件开发工具本设计采用的软件开发工具是美国的 Altera 公司的 QuartusII ,它支持多种 设计输入方法,包括原理图输入、文本输入。( 3)EDA实验开发系统本设计采用的 EDA实验开发系统,主要用于提供可编程逻辑器件的下载电路及 EDA实验开发的外围资源,供硬件验证用。3 设计方案总体思路:洗衣机启动后,将依次经过正转 15s、暂停 5秒、反转 15秒、暂停 5秒四个步骤(状 态)。在实例中,假设定时时间为 40 秒,故经过这四个状态后时间到,停止。 具体实现:此设计问题可分为洗涤预置

3、时间编码寄存电路模块、十进制减法计数器模块、时序 电路模块、译码驱动模块四大部分。设置预置信号 LD,LD 有效后,可以对洗涤时间计数器进行预置数,用数据开关 K1-K10分别代表数字 1,2, 9,0,用编码器对数据开关 K1-K10的电平信号进行编 码,编码器真值表如下表所示,编码后的数据寄存。设置洗涤开始信号 start , start 有效,则洗涤时间计数器进行倒计数,并用数码 管显示, 同时启动时序电路工作。时序电路中含有 15s 定时信号, 5s 定时信号,设为 A、B,A、B 为“0”表示定时时 间未到,为“ 1”表示定时时间到。设置电动机正转信号 run 、反转信号 rev 、

4、暂停信号 Pause,由时序电路的输出 Q2Q1 经译码驱动模块,可使显示信号正确反映电路的工作状态。直到洗涤计时时间到,时序电路异步复位。流程图如下:开始输入时间正转 15s暂停5s反转15s4 模块描述1) 模块一:预设时间和编码电路( yuzhitime) 接受用户通过按钮预置的时间信息,编码成八位之后转给减法计数器。2) 模块二:减法计数器电路( counter)接收编码之后的预置时间信息,向电机运转控制电路传递运行信号,并将预置时间信 息和剩余时间信息发给数码管显示电路进行实时显示( 3) 模块三:数码管显示电路( showtime) 接收减法计数器电路传来的时间信息,进行实时译码显

5、示( 4) 模块四:电机运转时序控制电路( shixu) 接收运行起止信号,安排电机运行状态并编码输出。( 5) 模块五:译码器( move) 接收电机运行状态信号,译码后实时控制电机的正传、反转和暂停。模块一:预设时间和编码电路( yuzhitime)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity yuzhitime is port(load,clk:in std_logic;time_input:in std_logic_vector(3 downto 0); time_set

6、:out std_logic_vector(7 downto 0); end yuzhitime;architecture yuzhitime of yuzhitime is signal p1:std_logic_vector(7 downto 0);begin process(time_input)is begin case time_input iswhen 0000=p1p1p1p1p1p1p1p1p1p1p1p1=00000000; end case;end process; time_set=p1;end yuzhitime;其中, time_input 为通过开发板上按钮输入的信

7、号, load 为输入确认信号。 本模块将输入的四位时间信息编码输出到减法计数器电路。模块二:减法计数器电路( counter)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport(clk,start:in std_logic;time_set:in std_logic_vector(7 downto 0);time_remain:buffer std_logic_vector(7 downto 0); time_over:buffer std_logic);

8、end counter;architecture counter of counter isbeginprocess(clk)variable time_second:integer range 0 to 59:=59;beginif(clkevent and clk=1)thenif(start=0)thenif(time_remain(7 downto 0)=0)then time_remain=time_set;elsetime_remain(7 downto 4)=time_remain(3 downto 0); time_remain(3 downto 0)=time_set(3 d

9、ownto 0); end if;time_second:=59;time_over=1;elseif(time_over=1) thenif(time_second=0 and time_remain(7 downto 0)=0) thentime_over=0;elseif(time_second=0)thenif (time_remain(3 downto 0)=0)thentime_remain(7 downto 4)=time_remain(7 downto 4)-1; time_remain(3 downto 0)=1001;time_second:=59;elsetime_rem

10、ain(7 downto 4)=time_remain(7 downto 4);time_remain(3 downto 0)=time_remain(3 downto 0)-1; time_second:=59;end if;elsetime_second:=time_second-1;end if;end if;end if;end if;end if;end process;end counter;本模块中 clk 为系统时序脉冲信号, start 为系统开始运行的信号, time_set 为从预置时间模块接收到的时间编码信号, time_remain 为输出到数码管显示电路的时间信号,

11、 time_is_up 为系统 运行结束信号。在系统运行的开始时期,用户第一次输入的预置时间会被赋给个位,第二次输入的时间会被赋给十位,可以进行多次输入,以前的会被覆盖。模块三:数码管显示电路( showtime)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity showtime isport(time_remain:in std_logic_vector(7 downto 0); clk:in std_logic;minute,second:out std_logic; a,b,c

12、,d,e,f,g: out std_logic );end showtime;architecture showtime of showtime is signal temp:std_logic_vector(6 downto 0); signal bcd:std_logic_vector(3 downto 0); signal choose:std_logic;beginprocess(clk)beginif(clkevent and clk=1)then choose=not choose; if(choose=1) then minute=0;second=1; bcd=time_rem

13、ain(7 downto 4);elseminute=1;second=0; bcdtemptemptemptemptemptemptemptemptemptemptemp=1111011 ;end case;a=temp(6);b=temp(5);c=temp(4);d=temp(3);e=temp(2);f=temp(1);g=temp(0);end process;end showtime;接收减法计数器电路传来的时间信息,进行实时译码显示,由于我们的实际是可以进行两位的 时间显示的,所以开始的时候是用的两个数码管,后来见到硬件芯片上是只有一个,又修改成了一 个,但为了进行两位的显示,我

14、们就设计了两个小灯,每个小灯分别代表十位和个位,当某个小灯 被点亮时代表当前显示的是对应位的数值,每个一秒转换一次,这样就可以实现两位的显示了。模块四:电机运转时序控制电路( shixu)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shixu isport(clk,start,time_over:in std_logic; q1,q2:out std_logic);end shixu;architecture shixu of shixu isbeginprocess(clk)v

15、ariable state:std_logic; variable wash_time:integer :=0; variable wait_time:integer :=0; beginif(clkevent and clk=1) then if(start=0) thenwash_time:=0;wait_time:=0;state:=0; q1=0;q2=0;else1)if(time_over= thenif(wash_time=20) then if(wait_time=9) thenwash_time:=0; state:=not state; elsewait_time:=wai

16、t_time+1;end if;elsewash_time:=wash_time+1; wait_time:=0;end if;end if;if(wash_time=20)thenq1=0;q2=0;elseif(state=0)then q1=1;q2=0;elseq1=0;q2=1;end if;end if;end if;end if;end process;end shixu;通过时钟的输入进行计算当前系统应该处的状态,并进行编码输出电机的运转状态。由于在显 示以及输入的时候只有分钟,故需要内设一个秒的计时变量。模块五:译码器( move)library ieee;use ieee.

17、std_logic_1164.all;entity move isport(q1,q2: in std_logic;REV ,RUN,PAUSE: buffer std_logic);end move;architecture move of move isbegin REV=q2;RUN=q1;PAUSE=not(q1 OR q2);end move;分析输入的电机转动编码信号,即为思路中的Q1 何 Q2,安排电机运行状态并进行输出。主程序( wash) 用来将各个模块进行组合,从而实现一个可以运行的系统。程序代码如下所示: library ieee;use ieee.std_logic_1

18、164.all;use ieee.std_logic_unsigned.all;use work.all; entity wash is port ( load:in std_logic; time_input:in std_logic_vector(3 downto 0); clk:in std_logic;start:in std_logic;time_set:buffer std_logic_vector(7 downto 0); time_over:buffer std_logic;REV ,RUN,PAUSE: buffer std_logic;a,b,c,d,e,f,g: buff

19、er std_logic; minute,second:buffer std_logic);end wash;architecture wash of wash is component yuzhitime port(load:in std_logic;time_input:in std_logic_vector(3 downto 0); time_set:out std_logic_vector(7 downto 0) );end component;component counterport( clk,start:in std_logic; time_set:in std_logic_ve

20、ctor(7 downto 0); time_remain:buffer std_logic_vector(7 downto 0); time_over:buffer std_logic);end component; component showtime port(time_remain:in std_logic_vector(7 downto 0); clk:in std_logic;minute,second:out std_logic; a,b,c,d,e,f,g: out std_logic);end component;component shixuport(clk,start,t

21、ime_over:in std_logic;q1,q2:out std_logic);end component; component move port(q1,q2: in std_logic; REV ,RUN,PAUSE: buffer std_logic);end component;signal time_remain:std_logic_vector(7 downto 0);signal q1,q2:std_logic;beginyuzhitime1:yuzhitime port map (load,time_input,time_set);counter1:counter port map (clk,star

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论