名称:豆浆机控制器设计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;
源代码
扫描文章末尾的公众号二维码