FPGA项目(7)--基于FPGA的洗衣机设计

        本次所实现的功能如下:

        1.洗衣机有三个状态:正转  反转  暂停(分别用三个LED指示)

        2.工作流程为:正转20S-->暂停10S-->反转20S-->暂停10S

        3.洗衣机当前所处的状态会在数码管第三位显示出来(1表示正转 2表示反转 3表示暂停)

        4.洗衣机的工作时间可以设置,单位为分钟。(默认工作时间为1分钟)

        5.预设值的工作时间也在数码管显示出来  (数码管的第一位  第二位)

        6.预设值的工作时间到了以后  蜂鸣器报警  用于提示已经完成洗衣

        设计思路与讲解:

        还是采用分层设计的方式,首先写了一个洗衣机逻辑控制的文件,数码管显示部分是直接例化的一个已经写好的数码管显示模块。详细分析如下:

        首先进行模块的输入输出端口定义:时钟和复位是必须要的,然后就是三个led灯端口,一个蜂鸣器端口,以及四位八段数码管的端口

        接下来定义时钟分频系数,因为洗衣机的倒计时是以秒为单位的,而系统时钟是50M,从50M分频到1HZ,所用的分频系数就是50_000_000

 

         再定义几个分频时用到的变量,对系统时钟进行分频,得到1HZ的信号:

         分频模块如下:

        

         当hz_cnt计数到HZ_NUM的一半时,对clk_hz取反,就能得到占空比为50的频率为1HZ的方波。

        然后就是时间的控制逻辑了:

         复位的时候,秒计数器sec为0,time_flag为0(这个变量用于标记洗衣机是否已经完成了洗衣操作,当到达所设置的洗衣时间时,该变量为1).正常情况下,sec每过一秒就自增1(因为这个模块的驱动时钟是clk_hz),如果sec加到了59,但是分钟数还是大于1,说明洗衣未完成,则sec清0,进行下一轮计数,否则,sec保持不动,将time_flag标记为1,用于指示洗衣机已经完成洗衣。

        

         对于分钟控制模块,刚复位的时候,分钟数默认为1(默认洗衣机的洗衣时间为1分钟),如果sec加到59了,分钟数就自减1;如果洗衣机的洗衣时间只剩下一分钟了,而且此时sec又加到了58(如果是59的话会出现bug),那么minute就清0,代表洗衣时间已经结束了。

        接下来是蜂鸣器的控制:

         只要time_flag为1,也就是洗衣完成了,蜂鸣器就报警。

        Led的控制也比较简单:

         主要就是根据sec所处的不同时段,对不同的led状态进行赋值,并对状态变量status赋值

        最后显示部分,是将要显示的各个数字提取出来,传递到数码管模块进行显示。

        

 

        关于数码显示的具体内容,可以参考:

        https://blog.csdn.net/guangali/article/details/130754726?spm=1001.2014.3001.5501

        洗衣机模块的完整代码如下:

        

module xiyiji(
input					clk,
input					reset,
output	 reg			led1,		//正转指示灯		高电平亮
output	 reg			led2,		//反转指示灯
output	 reg			led3,		//暂停指示灯
output	 reg			beep,		//蜂鸣器,时间到时报警				低电平响
output     [3:0]     seg_sel,        // 数码管位选,最左侧数码管为最高位
output     [6:0]     seg_led         // 数码管段选	
);


parameter	HZ_MUN=26'd50_000_000;   //分频到1S的分频数

reg	[25:0]	hz_cnt;					//分频计数器
reg			clk_hz;					//分频得到的1HZ信号

reg	[5:0]	sec;					//秒信号
reg	[3:0]	status;					//洗衣机当前状态显示   1.正转   2.反转   3.暂停
reg			time_flag;				//定时时间到 该标志置为1

wire [15:0]	data;					//要在数码管显示的数据
reg	 [5:0]	minute;					//预置的分钟数
wire [3:0]	minute_ge;				//分钟个位
wire [3:0]	minute_shi;				//分钟十位
//分频模块
always @(posedge clk or negedge reset) begin
	if(!reset)
		hz_cnt<=26'd0;
	else if(hz_cnt==HZ_MUN/2-1)
		begin
		hz_cnt<=26'd0;
		clk_hz<=~clk_hz;
		end
	else
		hz_cnt<=hz_cnt+1;
end

//秒控制模块
always @(posedge clk_hz or negedge reset) begin
	if(!reset)
	    begin
		sec<=6'd0;
		time_flag<=1'b0;
		end
	else if(sec==6'd59 && minute>1)					//一个周期走完后   秒清0
			sec<=6'd0;
	else if(minute<=6'd1 && sec==6'd58)
			begin
			sec<=6'd58;
			time_flag<=1'b1;
			end
	else
			sec<=sec+1;		
end

//分钟控制模块
always @(posedge clk_hz or negedge reset ) begin
	if(!reset)
		minute<=6'd1;
	else if(sec==6'd59)
		minute<=minute-1;
	else if(minute==6'd1 && sec==6'd58)
		minute<=6'd0;
	else 
		minute<=minute;
end


//蜂鸣器模块
always @(posedge clk or negedge reset) begin
	if(!reset)
		beep<=1;
	else if(time_flag==1)			//蜂鸣器为低电平时 响
		beep<=0;
	else
		beep<=1;
end
//led指示模块
always @(*) begin
	if(sec<20)   		//正转
		begin
		led1=1;
		led2=0;
		led3=0;
		status=4'd1;
		end
	else if(sec<30)		//暂停
		begin
		led1=0;
		led2=0;
		led3=1;
		status=4'd3;
		end
	else if(sec<50)		//反转
		begin
		led1=0;
		led2=1;
		led3=0;
		status=4'd2;
		end
	else				//暂停
		begin
		led1=0;
		led2=0;
		led3=1;
		status=4'd3;
		end
end

assign	minute_ge=minute%10;
assign	minute_shi=minute/10;
assign data={4'd0,status,minute_shi,minute_ge};

seg_led seg_led_inst(
.clk            (clk),
.rst_n          (reset),
.data           (data),
.seg_sel        (seg_sel),
.seg_led        (seg_led)   
 );
 
endmodule

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 设计一个全自动洗衣机控制器,它具有三阀门分别是冷水、 热水阀门 和排(实验中用 3个 LED 代替 ),当控制输入为逻辑 ,当控制输入为逻辑 '1' '1' '1' 时 阀门打开。一个马 阀门打开。一个马 达用 于洗涤和脱水(实验中达用 于洗涤和脱水(实验中3个 LED 代替),控制编码 代替),控制编码 代替),控制编码 代替),控制编码 为 2位二进制数,具体如下表所示。系统有 位二进制数,具体如下表所示。系统有 6个数码管,高 3位分别显示
以太网和USB是现代计算机上最常用的两种接口之一。以太网用于连接局域网或互联网,而USB用于连接外部设备,如鼠标、键盘、打印机等。两种接口之间的转换是很常见的需求,特别是在嵌入式系统中,需要将以太网数据转换为USB数据,或将USB数据转换为以太网数据。 基于FPGA的以太网-USB协议转换器是一种实现这种转换的方法。FPGA是一种可编程逻辑器件,可以通过编程实现各种功能。使用FPGA实现以太网-USB协议转换器可以提供高速、低延迟和灵活性等优势。 该转换器的设计需要考虑以下几个方面: 1. 硬件接口:需要设计以太网接口和USB接口的连接方式。以太网接口可以使用RJ45接口,USB接口可以使用USB Type-A或USB Type-B接口。 2. 协议转换:需要实现以太网协议和USB协议之间的转换。以太网协议使用TCP/IP协议栈,而USB协议使用USB协议栈。需要实现这两个协议栈之间的转换。 3. 数据传输:需要实现数据从以太网接口到USB接口的传输。数据可以通过DMA(直接内存访问)方式传输,以提高传输速度和效率。 4. 时钟同步:需要实现以太网接口和USB接口之间的时钟同步,以确保数据传输的正确性和稳定性。 5. 错误处理:需要实现错误处理机制,以处理传输中的错误和异常情况,如丢包、重传、校验错误等。 基于FPGA的以太网-USB协议转换器可以应用于各种嵌入式系统中,如工业自动化、医疗设备、智能家居等。该转换器可以提供高速、可靠的数据传输,满足各种应用场景的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值