基于FPGA的DHT11加湿器控制

一、DHT11性能指标
工作电压范围:3.3V-5.5V
工作电流 :平均0.5mA
输出:单总线数字信号
测量范围:湿度20%-90%RH,温度0~50℃
精度 :湿度±5%,温度±2℃
分辨率 :湿度1%,温度1℃ (由于精度,数码管读取到个位)
典型应用电路:
在这里插入图片描述
二、原理分析
DHT11通讯过程
在这里插入图片描述

S0:初始状态
S1:数据接受标志置0
S2:主机拉低18ms
S3:主机拉高40us
S4:从机启动,接收到的40个bit初始化,置0
S5:从机发送信号
S6:判断高电平持续时间,如果大于40us,则接受bit位为1并循环

从状态0到状态6总共花费时间粗略在1s以下,因此,对于主机使能信号,1s发送一次,即DHT11采集时间为1s一次就能把40个bit数据全部读出来。

状态机代码(1s采集一次)

 always @(posedge clk)
begin
	case(state)
	0: begin
			link<=0;
			data_r<=1;//初始为1
			cnt_1s<=cnt_1s+1;
			if(cnt_1s[26]==1)
				begin
					cnt_1s<=0;
					state<=1;
				end
		end
	1: begin
			data_r<=0;
			if(pulse==1) //使能启动转换
				begin
					cnt_18ms<=0;
					link<=1;
					data_r<=0; //总线为0
					state<=2;
				end
		end
	2: begin
			cnt_18ms<=cnt_18ms+1;
			if(cnt_18ms[20]==1) //使能启动转换
				begin
					cnt_18ms<=0;
					cnt_40us<=0;
					link<=0;
					data_r<=1; //总线为1
					state<=3;
				end
		end
	3: begin
			cnt_40us<=cnt_40us+1;
			if(cnt_40us[11]==1) 
				begin
					cnt_40us<=0;
					state<=4;
				end
		end
	
	4: begin
			if(data_up==1)
				begin
					get_data<=40'd0;
					num<=0;
					state<=5;
				end
		end
	5:begin
			if(data_up==1)
			begin
				cnt_40us<=0;
				state<=6;
			end
		end
	6:begin
		cnt_40us<=cnt_40us+1;
		if(cnt_40us[11]==1)
			begin
				cnt_40us<=0;
				num<=num+1;
			if(data)
				get_data<={get_data[38:0],1'b1}; //串行
			else
				get_data<={get_data[38:0],1'b0};
			if(num==39)
				begin
					num<=0;
					data_redy<=1;
					state<=1;
				end
			else
					state<=5;
			end
		end
	default:  state <= 0;   
   endcase         
end 

实物图
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值