软件: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
							阅读全文
							
						
					
								
								
								
275