豆浆机控制器设计Verilog代码Quartus仿真

本文详细介绍了使用Verilog语言设计的豆浆机控制器,包括启动信号处理、模式选择(五谷、米糊、果蔬汁、豆浆等)、电机控制(不转、高速、慢速)和加热丝控制功能。代码在Quartus环境下进行了仿真,展示了状态机和部分关键代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

名称:豆浆机控制器设计Verilog代码Quartus仿真(文末获取)

软件:Quartus

语言:Verilog

代码功能:

豆浆机控制器设计

1、具有启动信号

2、可以模式选择,有五谷、米糊、果蔬汁、豆浆等模式

3、具有电机控制,分为不转,高速,慢速

4、具有加热丝控制,控制加热,不加热

1.工程文件

2.程序文件

3.程序运行

4.状态图

5.Testbench

6.仿真图

部分代码展示:

module Soybean_Milk_machine(
input clk_in,//100Hz
input start,//启动信号
input [1:0] M,//模式选则:0-五谷;1-米糊;2-果蔬汁;3-干豆浆
output reg motor_PWM,//电机控制,不转,高速,慢速
output reg heat//加热丝控制,不加热,加热
);
reg [7:0] clk_cnt=0;//1Hz
always@(posedge clk_in)
if(clk_cnt>=8'd49)
clk_cnt<=8'd0;
else
clk_cnt<=clk_cnt+8'd1;
reg clk=0;//1Hz
always@(posedge clk_in)
if(clk_cnt==8'd49)
clk<=~clk;
else
clk<=clk;
parameter S1=5'd0;//初始状态
parameter S2=5'd1;//五谷豆浆
parameter S3=5'd2;//米糊
parameter S4=5'd3;//果蔬汁
parameter S5=5'd4;//加热时间1分半(90s),加热,电机不转
parameter S6=5'd5;//磨浆时间3分(180s),电机高速转,不加热
parameter S7=5'd6;//报警状态
parameter S8=5'd7;//磨浆时间3分(180s),电机慢速转,不加热
parameter S9=5'd8;//干豆浆
parameter S5_2=5'd9;//加热时间1分半(90s),加热,电机不转
parameter S5_3=5'd10;//加热时间1分半(90s),加热,电机不转
parameter S5_4=5'd14;//加热时间1分半(90s),加热,电机不转
parameter S5_5=5'd12;//加热时间1分半(90s),加热,电机不转
parameter S5_6=5'd15;//加热时间1分半(90s),加热,电机不转
parameter S5_7=5'd16;//加热时间1分半(90s),加热,电机不转
parameter S5_8=5'd21;//加热时间1分半(90s),加热,电机不转
parameter S5_9=5'd22;//加热时间1分半(90s),加热,电机不转
parameter S5_10=5'd23;//加热时间1分半(90s),加热,电机不转
parameter S6_2=5'd11;//磨浆时间3分(180s),电机高速转,不加热
parameter S6_3=5'd18;//磨浆时间3分(180s),电机高速转,不加热
parameter S6_4=5'd19;//磨浆时间3分(180s),电机高速转,不加热
parameter S6_5=5'd20;//磨浆时间3分(180s),电机高速转,不加热
parameter S8_2=5'd13;//磨浆时间3分(180s),电机高速转,不加热
parameter S8_3=5'd17;//磨浆时间3分(180s),电机高速转,不加热
reg [4:0] state=5'd0;
//延迟90s
reg [7:0] S5_count=8'd0;
always@(posedge clk)
if(state==S5 || state==S5_2 || state==S5_3 || state==S5_4
              || state==S5_5 || state==S5_6 || state==S5_7
|| state==S5_8 || state==S5_9 || state==S5_10)
S5_count<=S5_count+8'd1;
else
S5_count<=8'd0;
//延迟180s
reg [7:0] S6_count=8'd0;
always@(posedge clk)
if(state==S6 || state==S8 || state==S6_2 || state==S8_2 
   || state==S6_3 || state==S8_3 || state==S6_4 || state==S6_5)
S6_count<=S6_count+8'd1;
else
S6_count<=8'd0;
//状态机
always@(posedge clk)
case(state)
S1:
if(start==1 && M==2'b00)
state<=S2;//五谷豆浆
else if(start==1 && M==2'b01)
state<=S3;//米糊
else if(start==1 && M==2'b10)
state<=S4;//果蔬汁
else if(start==1 && M==2'b11)
state<=S9;//干豆浆
else
state<=S1;//初始状态
S2:
state<=S5;
S5://加热时间1分半(90s),加热,电机不转
if(S5_count>=8'd90)
state<=S6;
else
state<=S5;
S6://磨浆时间3分(180s),电机高速转,不加热
if(S6_count>=8'd180)
state<=S5_2;
else
state<=S6;
S5_2://加热时间1分半(90s),加热,电机不转
if(S5_count>=8'd90)
state<=S8;
else
state<=S5_2;
S8://磨浆时间3分(180s),电机慢速转,不加热
if(S6_count>=8'd180)
state<=S5_3;
else
state<=S8;
S5_3://加热时间1分半(90s),加热,电机不转
if(S5_count>=8'd90)
state<=S7;
else
state<=S5_3;
S3:
state<=S5_4;  
S5_4://加热时间1分半(90s),加热,电机不转
if(S5_count>=8'd90)
state<=S6_2;
else
state<=S5_4;
S6_2://磨浆时间3分(180s),电机高速转,不加热
if(S6_count>=8'd180)
state<=S5_5;
else
state<=S6_2;
S5_5://加热时间1分半(90s),加热,电机不转
if(S5_count>=8'd90)
state<=S8_2;
else
state<=S5_5;
S8_2://磨浆时间3分(180s),电机慢速转,不加热
if(S6_count>=8'd180)
state<=S5_6;
else
state<=S8_2;
S5_6://加热时间1分半(90s),加热,电机不转
if(S5_count>=8'd90)
state<=S8_3;
else
state<=S5_6;
S8_3://磨浆时间3分(180s),电机慢速转,不加热
if(S6_count>=8'd180)
state<=S5_7;
else
state<=S8_3;
S5_7://加热时间1分半(90s),加热,电机不转
if(S5_count>=8'd90)
state<=S7;
else
state<=S5_7;
源代码

 扫描文章末尾的公众号二维码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值