• 正文
  • 相关推荐
申请入驻 产业图谱

洗衣机控制系统 FPGA设计 Verilog Quartus

2小时前
138
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:洗衣机控制系统 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

开发板/平台:DE2-115

功能介绍

本项目实现了一个基于 FPGA 的洗衣机控制系统,使用 Verilog 编写并在 Quartus 工程中完成设计。系统模拟洗衣机的完整工作流程,包括启动、洗涤、暂停、清洗、暂停、脱水、暂停和结束等阶段,并通过 LED 与数码管直观显示当前状态和剩余时间。

设计支持 4 种工作模式:正常模式、单独洗涤、单独清洗和单独甩干。正常模式用于演示完整洗衣流程,单独模式便于分别验证洗涤、清洗、甩干控制逻辑。用户可通过按键完成复位、启动、模式切换和停止控制,mode_led 用于显示当前模式。

系统使用 50MHz 主时钟,内部实现精确到秒的倒计时控制。4 位数码管以分:秒格式显示剩余时间,LED 分别模拟电机正转、暂停、反转和结束提示。该设计适合用于 FPGA 课程设计、数字逻辑综合实验、状态机设计学习以及开发板综合验证。

运行环境

开发语言:Verilog

开发软件:Quartus

目标开发板:DE2-115

主要时钟:50MHz

工程内容包含 Quartus 工程文件、Verilog 源码、管脚约束、编译输出文件、仿真相关文件和设计文档。

设计思路

系统采用模块化设计思路,将洗衣机控制任务拆分为顶层互联、流程控制和显示驱动三个部分。顶层模块负责统一对外接口,将 50MHz 时钟、复位、启动、模式切换和停止按键接入控制逻辑,同时把控制模块输出的时间数据送入显示模块,最终驱动 LED 和 4 位数码管。

核心控制部分围绕有限状态机实现。系统包含空闲、启动、洗涤、暂停、清洗、脱水、结束以及单独洗涤、单独清洗、单独甩干等状态,通过 start_n、mode_key、stop_key 等按键完成状态切换。正常模式下按洗涤、暂停、清洗、暂停、脱水、暂停、结束的顺序执行;单独模式下则只执行对应功能,便于独立测试或演示某一段流程。

时间控制使用 50MHz 主时钟分频产生 1 秒节拍,再由分钟和秒钟计数器实现倒计时显示。正常模式总流程按分钟秒钟方式显示剩余时间,洗涤、清洗、甩干以及各暂停阶段均由控制模块统一调度。

电机动作通过 LED 进行模拟显示。洗涤阶段按正转、暂停、反转的周期运行;清洗阶段采用另一组正转、暂停、反转节奏;甩干阶段持续正转。结束后 end_led 点亮,提示流程完成。

模块结构

系统主要由 3 个 Verilog 模块组成:

1. wash_machine:顶层模块,负责系统接口定义、显示模块和控制模块的实例化,以及分钟、秒钟等内部信号连接。

2. wash_ctrl:洗衣机控制模块,负责核心状态机、模式选择、倒计时控制、电机动作控制和 LED 状态输出。

3. display:数码管显示模块,负责将分钟、秒钟时间转换为 4 位数码管显示所需的段码输出,用于显示剩余时间。

开发板验证

本设计支持 DE2-115 开发板验证,工程中已完成对应的 Quartus 管脚约束与分配,可直接结合板载按键、LED 和数码管进行功能观察。

上板操作时,先按下复位键使系统进入初始状态。若选择正常洗衣流程,直接按下 start 键,系统开始执行完整流程:洗涤、暂停、清洗、暂停、脱水、暂停并最终结束。运行过程中 4 位数码管显示剩余分钟和秒钟,LED 用于指示正转、暂停、反转以及结束状态。

若需要单独执行洗涤、清洗或甩干,可在复位后通过 mode_key 切换模式,mode_led 显示当前模式:00 为正常模式,01 为单独洗涤,10 为单独清洗,11 为单独甩干。选择模式后按 start 键启动,对单独模式可通过 stop_key 停止。

演示视频

配套演示视频展示了洗衣机控制系统的运行过程,可用于观察复位、启动、模式切换、倒计时显示、LED 状态指示以及结束提示等功能表现。

演示视频请点击左下角阅读原文查看。

仿真图/仿真说明/设计文档图片

设计文档中包含工程文件、程序编译、RTL 图、管脚分配、Testbench、整体仿真图、控制模块和显示模块等内容,可用于理解工程结构、状态机实现和显示驱动逻辑。仿真相关文件位于 ModelSim 仿真目录,可作为功能验证和二次修改时的参考。

部分代码

以下展示顶层模块 wash_machine 的部分代码,完整源码请下载压缩包查看。

module wash_machine(
	clk_50M,
	reset_n,
	start_n,
	mode_key,
	stop_key,
	end_led,
	led_1,
	led_2,
	led_3,
	HEX0,
	HEX1,
	HEX2,
	HEX3,
	mode_led
);


input wire	clk_50M;    // 50MHz 时钟信号
input wire	reset_n;    // 复位信号,低电平有效
input wire	start_n;    // 启动按键,低电平有效
input wire	mode_key;   // 模式切换按键
input wire	stop_key;   // 停止按键
output wire	end_led;    // 结束指示灯
output wire	led_1;      // 电机正转指示灯
output wire	led_2;      // 电机暂停指示灯
output wire	led_3;      // 电机反转指示灯
output wire	[7:0] HEX0; // 数码管0,显示秒个位
output wire	[7:0] HEX1; // 数码管1,显示秒十位
output wire	[7:0] HEX2; // 数码管2,显示分个位
output wire	[7:0] HEX3; // 数码管3,显示分十位
output wire	[1:0] mode_led; // 模式指示灯

wire	[7:0] minute_time; // 分钟时间
wire	[7:0] second_time; // 秒钟时间


// 实例化显示模块,用于驱动数码管显示剩余时间
display	b2v_inst(
	.clk(clk_50M),
	.minute_time(minute_time),
	.second_time(second_time),
	.HEX0(HEX0),
	.HEX1(HEX1),
	.HEX2(HEX2),
	.HEX3(HEX3));


// 实例化洗衣机控制模块,负责核心逻辑控制
wash_ctrl	b2v_inst2(
	.clk_50M(clk_50M),
	.reset_n(reset_n),
	.start_n(start_n),
	.mode_key(mode_key),
	.stop_key(stop_key),
	.end_led(end_led),
	.led_1(led_1),
	.led_2(led_2),
	.led_3(led_3),
	.minute_out(minute_time),
	.mode_led(mode_led),
	.second_out(second_time));
	


endmodule

代码获取:点击【来源:www.hdlcode.com

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

本站代码库拥有大量 Verilog/VHDL的FPGA代码资源:hdlcode.com。代码有详细注释、演示视频、仿真图等资料,适合入门学习

微信公众号