一、DHT11性能指标
工作电压范围:3.3V-5.5V
工作电流 :平均0.5mA
输出:单总线数字信号
测量范围:湿度20%-90%RH,温度0~50℃
精度 :湿度±5%,温度±2℃
分辨率 :湿度1%,温度1℃ (由于精度,数码管读取到个位)
典型应用电路:
二、原理分析
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
实物图