基于VHDL语言的简易洗衣机控制器

电子课程设计

——简易洗衣机控制器设计

学院:

班级: 姓名: 学号: 指导老师:

2013年12月

目 录

第一部分:设计任务与要求„„„„„„„„„„„„„„„1 第二部分:总体框图„„„„„„„„„„„„„„„„„„1 第三部分:选择器件„„„„„„„„„„„„„„„„„„2 第四部分:功能模块„„„„„„„„„„„„„„„„„„3 4.1时间预置编码寄存模块(settime)„„„„„„„„„3 4.2减法计数器模块(counter)„„„„„„„„„„„„4 4.3数码管显示模块(showtime )„„„„„„„„„„„7 4.4时序电路模块(analyse)„„„„„„„„„„„„„9 4.5译码器模块(move )„„„„„„„„„„„„„„„1

1

第五部分:总体设计电路图„„„„„„„„„„„„„„„13

5.1总体(顶层)设计电路图„„„„„„„„„„„„13 5.2顶层文件仿真„„„„„„„„„„„„„„„„13 5.3管脚分配图„„„„„„„„„„„„„„„„„14 5.4硬件实验效果图„„„„„„„„„„„„„„„„14 第六部分:课程设计心得体会„„„„„„„„„„„„„„15

简易洗衣机控制器设计

一、设计任务与要求

设计一个洗衣机洗涤程序控制器,控制洗衣机的电动机按下图所示的规律运

转:

用两位数码管预置洗涤时间(分钟数) ,洗涤过程在送入预置时间后开始运转,洗涤中按倒计时方式对洗涤过程作计时显示,用LED 表示电动机的正、反转,如果定时时间到,则停机并发出音响信号。

二、总体框图

RUN REV PAUSE

K5

K6

K1 K2 K3 K4

各个部分的具体功能描述如下:

(一)预设时间和编码电路(settime ):接受用户通过按钮预置的时间信息,编码

成八位之后转给减法计数器。

(二)减法计数器电路(counter ):接收编码之后的预置时间信息,向电机运转

控制电路传递运行信号,并将预置时间信息和剩余时间信息发给数码管显示电路进行实时显示。

(三)数码管显示电路(showtime ):接收减法计数器电路传来的时间信息,进行

实时译码显示。

(四)电机运转时序控制电路(analyse ):接收运行起止信号,安排电机运行状态并编码输出。

(五)译码器(move ):接收电机运行状态信号,译码后实时控制电机的正传、反转和暂停。

三、选择器件

1、pc 机一台。

2、CPLD/FPGA适配器板:标准配置EPF10K10LC84-4接口板,下载接口是数字芯片的下载接口(DIGITAL JTAG),主要用于CPLD/FPGA芯片的数据下载。

3、实验箱:装有七段数码管及蜂鸣器等,七段数码管字形及真值表如下 七段数码管字形如下:

七段数码管真值表如下:

四、功能模块

4.1时间预置编码寄存模块(settime)

1、时间预置编码寄存模块settime 如图1所示,time_input为通过开发板上拨码开关K1、K2、K3、K4输入的信号,load 为输入确认信号。本模块将输入的四位时间信号编码成八位二进制数输出到减法计数器电路。

图1 时间预置编码寄存模块settime

2、仿真图

图2 时间预置编码寄存模块仿真图

用K1、K2、K3、K4给time_input输入一个二进制数0111,让load 有效,输出time_set为00000111。

3、时间预置编码寄存模块源代码 library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity settime is port (

load:in std_logic;

time_input:in std_logic_vector(3 downto 0); time_set:out std_logic_vector(7 downto 0) );

end settime;

architecture settime of settime is

signal p1:std_logic_vector(7 downto 0); begin

process(load) begin

if(load'event and load='1') then

case time_input is

when "0000"=>p1p1p1p1p1p1p1p1p1p1p1

4.2减法计数器模块(counter)

1、减法计数模块counter 如图3所示,本模块中clk 为系统时序脉冲信号,start 为系统开始运行的信号,time_set接收编码之后的预置时间信息,向电机运转控制电路传递运行信号,并将预置时间信息和剩余时间信息发给数码管显示电路进行实时显示。time_remain为输出到数码管显示电路的时间信号,time_over为系统运行结束信号, 可以用来控制蜂鸣器的通断。

图3 减法计数模块

2、仿真图

图4 减法计数模块仿真图

3、减法计数模块源程序 library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; entity counter is port (

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 );

end counter;

architecture counter of counter is begin

process(clk)

variable time_second:integer range 0 to 59 :=59;

begin

if(clk'event and clk='1') then

if(start='0') then

if(time_remain(7 downto 0)=0) then

time_remain

time_remain(7 downto 4)

time_second:=59; time_over

if(time_over='1') then

if(time_second=0 and time_remain(7 downto 0)=0) then

time_over

if(time_second=0) then

if(time_remain(3 downto 0)=0) then time_remain(7 downto 4)

time_remain(7 downto 4)

time_second:=time_second-1; end if; end if;

end if; end if; end if; end process; end counter;

4.3数码管显示模块(showtime )

1、数码管显示模块showtime 如图5所示,本模块clk 为系统时序脉冲信号,time_remain接收减法计数器电路传来的时间信息,进行实时译码显示,a,b,c,d,e,f,g 分别对应数码管的七段,minute 和second 分别位选两个数码管,显示十位和个位。

图5 数码管显示模块

2、仿真图

图6 数码管显示模块仿真图

3、数码管显示模块源程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; entity showtime is 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 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; begin

process(clk) begin

if(clk'event and clk='1') then

choose

minute

bcd

minute

bcd

case bcd is

when "0000"=>temptemp

when "0010"=>temp

when "0011"=>temptemptemptemptemptemptemptemp

a

end process; end showtime;

4.4时序电路模块(analyse)

1、时序电路模块analyse 如图7所示,本模块由start 控制使能控制,通过时钟的输入进行计算当前系统所处的状态,并进行编码输出电机的运转状态,out_1为高位时表示电机正转,out_2为高位时表示电机反转。由于在显示以及输入的时候只有分钟,故在模块内部设计了一个秒的计时变量。

图7 时序电路模块

2 、仿真图

3、时序电路模块analyse 源程序 library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; entity analyse is port (

clk,start,time_over:in std_logic; out_1,out_2:out std_logic );

end analyse;

architecture analyse of analyse is begin

process(clk)

variable state:std_logic;

variable wash_time:integer:=0; variable wait_time:integer:=0; begin

if(clk'event and clk='1') then

if(start='0') then

wash_time:=0; wait_time:=0; state:='0';

out_1

if(time_over='1') then

if(wash_time=20)

then

if(wait_time=10) then

wash_time:=0;

state:=not state; else

wait_time:=wait_time+1; end if;

else

wash_time:=wash_time+1; wait_time:=0; end if; end if;

if (wash_time=20) then

out_1

if(state='0') then

out_1

out_1

4.5译码器模块(move )

1、译码器模块move 如图9所示,out_1和out_2接收时序电路模块的信号对信号进行译码,安排电机运行状态即正转(RUN )、反转(REV )、暂停(PAUSE ),并进行输出。此模块较为简单,设计基本没什么难度。

图9 译码器模块

2、仿真图

图10 译码器模块仿真图

3、译码器模块move 源程序 library ieee;

use ieee.std_logic_1164.all;

entity move is port (

out_1,out_2:in std_logic;

REV,RUN,PAUSE:buffer std_logic ); end move;

architecture move of move is

signal choose:std_logic_vector(1 downto 0); begin

choose(1)

case choose is

when "00"=>REVREVREVREV

REV

五、总体设计电路图

5.1总体(顶层)设计电路图

图11 各模块连结后的电路图

系统运行过程如下:在系统进行运行之前,使用K 按钮预置洗衣机运转时间,此时用户设定的时间通过数码管时时显示出来,计时设备选取的精度是分钟级,也就是说用户可以设定洗衣时间是多少分钟,范围为00-99。然后用户可以给出开始信号,系统开始运转并开始从预设时间倒计时,重复“正传->暂停->反转->暂停”的循环过程直至剩余时间变为零,剩余时间为零时,time_over指示报警信号。数码管在系统的整个运行过程中时时显示剩余运转时间。

本设计在电路中加入了扫描信号,输入到减法模块,时序电路模块,实时显示模块。由于扫描信号非常高,在我们看来,输出在数码管上的数字都是连续的两位数字,由预置时间开始以一分钟减一的速度递减。当数码管显示为零时,洗衣停止。

5.2顶层文件仿真

由上图可以看出:当预置号时间,启动start ,数码管显示预置时间,电机开始以正转=>暂停=>反转=>暂停为周期进行循环,一个周期正好费时一分钟,一个周期结束,数码管显示减一,依次循环,直至数码管显示时间为零,洗衣结束。

5.3 管脚分配图

5.4硬件实验效果图

六、课程设计心得体会

二周的课程设计终于做完了,在这二周的课设中我感觉我学到了蛮多东西。 首先,我学会了如何对一个大的课题进行分析——将大的整体划分为许多小的部分,直到各个部分容易设计出来。关于这个洗衣机控制器,就是用模块化层次化的设计方法进行系统层的设计,这样分解下来,设计会更容易点,思路也比较简单。洗衣机控制器主要就只有三个状态,要实现几种状态的多次循环的改变,其他的还有计时和数码显示的功能,通过每个模块的设计最后组装即可完成系统级的设计。在设计的时候,如果特别要注意各个模块之间接口的设计,要是接口不对,模块之间就没法实现组装。

其次,这次课程设计让我感受到了我对所学习的内容是多么的不熟练,在编程的时候还要老是去翻书。我记忆在深刻的是在编写程序时,看了一遍又一遍书但在编写的过程中还是出错了,最后只好对着书编写。但我觉的出现问题并不是很要紧,这些问题能提醒我那些地方没有学好,只要我重视这些地方将其巩固我想我将能学到许多的知识。通过这次设计,对于VHDL 的设计方法大致有了一些技巧性的了解,位以后的硬件设计打下了基础,对FPGA 的编程、定时器和计数器的设计都熟悉起来,加深了对时序组合电路的印象。

最后,我感觉我对Quartus I I 软件的使用熟练了许多。我虽然以前在试验的时候使用过Quartus I I 这个软件,但用的时间毕竟不长,对其不太熟练,经过这次做课设我对这个软件运用熟练很多,这对以后的学习一定有很大的帮助。我想在面对一个问题时不能存在侥幸心理,只要我们认真对待它,我们就能学到东西。通过在网上进行各种资料的查询,也发现了其实FPGA 的设计具有较好的前景,其功能的强大和设计方法的简单可靠。具有较强的适应能力和可移植性。


相关文章

  • 课程设计Ⅱ摘要正文
  • 汽车尾灯控制器的设计与实现 (陕西理工学院电信工程系通信083班,陕西 汉中 723003) 指导教师:侯宝生 [摘 要] 本课题主要是基于可编程逻辑器件,使用硬件描述语言VHDL.系统设计采用自顶向下的设计方法,顶层设计采用原理图设计方式 ...

  • 出租车计费系统设计
  • 西 论 文 南大学网络教育学院 毕 业 论 文 题 目: 出租车计费系统设计 学 生 学 号 类 型 网络教育 专 业 电气工程及自动化 层 次 专升本 指导教师 日 期 西南大学网络教育学院 毕业论文(设计)评定表 出租车计费系统的设计 ...

  • 数字秒表的设计与实现实验报告
  • 电 子 科 技 大 学 <数字秒表课程设计> 姓 名: xxx 学 号: 学 院: 指导老师:xx 1 摘要 EDA 技术作为电子工程领域的一门新技术,极大的提高了电子系统设计的效率和可靠性.文中介绍了一种基于FPGA 在ISE ...

  • 多路彩灯控制器
  • 目录 前 言---------------------------------------------------------------5 第1章 方案论证----------------------------------------- ...

  • 基于VHDL的三层电梯控制器的标准设计
  • 广西工学院 毕业设计(论文)任务书 课题名称 电梯控制器的VHDL实现 院 系 电气学院 专 业 电子信息科学与技术 班 级 电科113班 学 号 [1**********]3 [1**********]5 姓 名 莫中桥 李柳 指导教师 ...

  • 用PLC控制的交通信号灯
  • 用PLC 控制的交通信号灯 摘要:当今时代是一个自动化时代,交通灯控制等很多行业的设备都与计算机密切相关.因此,一个好的交通灯控制系统,将给道路拥挤.违章控制等方面给予技术革新.随着大规模集成电路及计算机技术的迅速发展,以及人工智能在控制技 ...

  • 数控分频器
  • EDA 课程大作业 课程名称:EDA 技术实用教程-VHDL 版 成 绩: 设计题目: 数控分频器 院 系: 电子信息与电气工程学院 姓名学号: 专业班级: 指导教师 2013年5月 摘 要:随着EDA 技术的高速发展, 以大规模和超大规模 ...

  • 课程设计心得和体会
  • 第六章 课程设计总结 经过近二周的单片机课程设计,终于完成了我的频率计的设计,基本达到设计要求. 对于此次课程设计,有许多的感触与体会,遇到的难题多,学习到的知识也就更多. 第一,硬件电路首先遇到了对试验箱内部硬件电路不了解,经过试验箱上面 ...

  • 出租车计费系统的设计
  • 设计目的 随着出租车行业的发展,对出租车计费器的要求也越来越高,用户不仅要求计费器性能稳定,计费准确,有防作弊功能:同时还要求其具有车票资料打印.IC卡付费和电脑串行通信功能.不同国家和地址的计费方式存在差异,如有些地区有夜间收费及郊区收费 ...

© 2024 范文参考网 | 联系我们 webmaster# 12000.net.cn