基于FPGA的洗衣机控制器电子定时器

文章目录

功能描述

一、框架

二、verilog代码

控制模块实现

三、视频上板效果展示



功能描述

(1)定时启动正转20秒暂停10秒反转20秒暂 停10秒,定时未到回到"正转20秒暂停10秒......",定时到则停止; 若定时到,则停机发出音响信号;

(2)用两个数码管显示洗涤的预置时间(默认10分钟),再用两个数码管按倒计时方式对各个洗涤状态过程作计时显示,直到 时间到停机;(3)洗涤过程由"开始"信号开始;

(4)三只LED灯表示"正转","反转"、"暂停"三个状态。

(5)用动态扫描控制四个数码管的输出

一、框架

输入:时钟、复位、开始按键

输出:LED指示灯 数码管段选和位选

这个板子段选是38译码器,所以sel是3位bit

二、verilog代码

控制模块实现

主要思想就是通过两层状态机进行控制:

首先控制空闲状态、工作状态以及结束状态。

其中围绕工作状态展开进行二次状态设计,正转、反转以及暂停等等。

Matlab 复制代码
module control(
      input       clk,
      input       rst_n,
      input       key_start,
      
      output      wire        led_R,
      output      wire        led_L,
      output      wire        led_P,
      output      reg [7:0]   data_time,
      output      reg [7:0]   sec_time
      
    );
    
    //����״̬�����С�������ֹͣ
    parameter   IDLE           =3'd0;
    parameter   WORKING        =3'd1;
    parameter   OVER           =3'd2;
    
    //����״̬�µ�״̬����ת ֹͣ ��ת
    parameter   W_IDLE             =4'd0;
    parameter   R_ROTATE           =4'd1;
    parameter   PAUSE1             =4'd2;
    parameter   L_ROTATE           =4'd3;
    parameter   PAUSE2             =4'd4;
    
    
    reg [2:0]   state_all;
    reg [3:0]   state;
    
    //10����
//    reg [7:0]   data_time;
//    reg [7:0]   sec_time;//��
    reg [25:0]  count;
    
    assign led_R=(state_all==WORKING)?(state==R_ROTATE)?1'b1:1'b0:1'b0;
    assign led_L=(state_all==WORKING)?(state==L_ROTATE)?1'b1:1'b0:1'b0;
    assign led_P=(state_all==WORKING)?(state==PAUSE1 || state==PAUSE2)?1'b1:1'b0:1'b0;
    //10����
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        data_time<=8'h10;
    end
    else if(state_all==WORKING && state==PAUSE2 && count==49999999 && sec_time==8'h00)begin
        if(data_time[3:0]==4'h0 && data_time[7:4]>4'h0)begin
            data_time[3:0]<=4'h9;
            data_time[7:4]<=data_time[7:4]-4'd1;
        end
        else if(data_time[3:0]>4'h0 && data_time[7:4]>=4'h0)begin
            data_time[3:0]<=data_time[3:0]-4'd1;
            data_time[7:4]<=data_time[7:4];
        end
        else if(data_time[3:0]==4'h0 && data_time[7:4]==4'h0)begin
            data_time[3:0]<=data_time[3:0];
            data_time[7:4]<=data_time[7:4];
        end
    end
    else if(state_all==IDLE || state_all==OVER )begin
        data_time<=8'h10;
    end
    end    
Matlab 复制代码
   
    //��ת�ͷ�ת����ͣ������
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        sec_time<=8'h20;
    end
    else if(count==49999999 && (state==R_ROTATE || state==L_ROTATE))begin
        if(sec_time[3:0]==4'h0 && sec_time[7:4]>4'h0)begin
            sec_time[3:0]<=4'h9;
            sec_time[7:4]<=sec_time[7:4]-4'd1;
        end
        else if(sec_time[3:0]>4'h0 && sec_time[7:4]>=4'h0)begin
            sec_time[3:0]<=sec_time[3:0]-4'd1;
            sec_time[7:4]<=sec_time[7:4];
        end
        else if(sec_time[3:0]==4'h0 && sec_time[7:4]==4'h0)begin
            sec_time<=8'h10;
        end
    end
    else if(count==49999999 && (state==PAUSE1 || state==PAUSE2))begin
        if(sec_time[3:0]==4'h0 && sec_time[7:4]>4'h0)begin
            sec_time[3:0]<=4'h9;
            sec_time[7:4]<=sec_time[7:4]-4'd1;
        end
        else if(sec_time[3:0]>4'h0 && sec_time[7:4]>=4'h0)begin
            sec_time[3:0]<=sec_time[3:0]-4'd1;
            sec_time[7:4]<=sec_time[7:4];
        end
        else if(sec_time[3:0]==4'h0 && sec_time[7:4]==4'h0)begin
            sec_time<=8'h20;
        end
    end
    else if(state==W_IDLE)begin
        sec_time<=8'h20;
    end
    end    
    
    //1��������
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        count<=26'd0;
    end
    else if(state==R_ROTATE || state==PAUSE1|| state==L_ROTATE|| state==PAUSE2)begin
        if(count<49999999)begin
            count<=count+1;
        end
        else begin
            count<=26'd0;
        end
    end
    else begin
        count<=26'd0;
    end
    end
    
    
    
    //��״̬�л�
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        state <= W_IDLE;
        end
    else if(state_all==WORKING)begin
        case(state)
        W_IDLE:begin
            state<=R_ROTATE;
        end
        R_ROTATE:begin
            if(count==49999999 && sec_time==8'h00)begin
                state<=PAUSE1;
            end
            else begin
                state<=R_ROTATE;
            end
        end
        PAUSE1:begin
            if(count==49999999 && sec_time==8'h00)begin
                state<=L_ROTATE;
            end
            else begin
                state<=PAUSE1;
            end
        end
        L_ROTATE:begin
            if(count==49999999 && sec_time==8'h00)begin
                state<=PAUSE2;
            end
            else begin
                state<=L_ROTATE;
            end
        end
        PAUSE2:begin
            if(count==49999999 && sec_time==8'h00)begin
                state<=W_IDLE;
            end
            else begin
                state<=PAUSE2;
            end
        end
        default:state <= W_IDLE;
        endcase
    end
    else begin
        state <= W_IDLE;
    end
    end    
    
    //�ܹ���״̬�л�
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        state_all <= IDLE;
        end
    else begin
        case(state_all)
        IDLE:begin
            if(key_start==1'b1)begin
                state_all<=WORKING;
            end
            else begin
                state_all<=IDLE;
            end
        end
        WORKING:begin
            if(data_time==8'h00)begin
                state_all<=OVER;
            end
            else begin
                state_all<=WORKING;
            end
        end
        OVER:begin
                state_all<=IDLE;
        end
        default:state_all <= IDLE;
        endcase
    end
    
    
    end
endmodule

三、视频上板效果展示

基于fpga的洗衣机控制器 定时器

相关推荐
技术小白爱FPGA9 小时前
使用verilog 实现cordic 算法 ---- 向量模式
算法·fpga开发
G2突破手25912 小时前
MIPI 详解:C-PHY
fpga开发·mipi
csdn_gddf10238439813 小时前
XY2-100的Verilog实现
fpga开发
沐欣工作室_lvyiyi16 小时前
基于fpga的数字频率计(论文+源码)
stm32·单片机·深度学习·物联网·fpga开发·毕业设计
9527华安1 天前
FPGA实现UltraScale GTH光口视频转USB3.0传输,基于FT601+Aurora 8b/10b编解码架构,提供2套工程源码和技术支持
fpga开发·音视频·aurora·8b/10b·usb3.0·ft601·ultrascale gth
fei_sun1 天前
【FPGA】模型机下载FPGA设计
fpga开发
晓晓暮雨潇潇2 天前
FPGA开发技能(10)热电偶测温ADS1118方案
fpga开发·verilog·热电偶·ads1118·温度测试方案
zidan14123 天前
XILINX硬件设计-(1)LVDS接口总结
fpga开发
啄缘之间3 天前
verilog练习:i2c slave 模块设计
学习·fpga开发·verilog·uvm
nature_forest3 天前
quartus24.1版本子模块因时钟问题无法综合通过,FPGA过OOC问题复盘
fpga开发