• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

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

07/08 08:00
275
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240122143123K8.doc

共1个文件

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

软件:Quartus

语言:Verilog

代码功能:

豆浆机控制器设计

1、具有启动信号;

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

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

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

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

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;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=608

  • 2-240122143123K8.doc
    下载

相关推荐