基于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的洗衣机控制器 定时器

相关推荐
博览鸿蒙3 天前
FPGA开发使用的语言
fpga开发·fpga
明德扬3 天前
机器人多摄像头如何做FPGA多路视频聚合?
学习·fpga开发·fpga
JoYER_cc3 天前
FPGA 调试实录:LED 闪烁程序从踩坑到仿真验证的完整经验总结
fpga开发
ktd0074 天前
复旦微开发环境搭建流程备忘录
fpga开发
ERROR:994 天前
陈工,试试Agent开发FPGA
fpga开发
威嵌神州4 天前
复旦微 FMQL100TAI 开发 8 问:仿真器、系统、接口高频问题解答
人工智能·嵌入式硬件·fpga开发
北京青翼科技4 天前
青翼基于PCIe的VU13P FPGA信号处理板
fpga开发·fpga开发板·图像处理卡·pcie板卡
szxinmai主板定制专家4 天前
NXP LS1046A 硬件方案: LS1046A+FPGA 异构加速架构实践
大数据·图像处理·人工智能·嵌入式硬件·fpga开发
Riwuarua5 天前
从近似0基础开始FPGA开发 -- part.14 JESD204协议、IP核与嵌入式初始化
fpga开发·jesd
第二层皮-合肥5 天前
Vivado 自动生成的 AXI‑Lite 从机 IP 的操作步骤
fpga开发