欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

FPGA(14) 实验综合9 DS18B20温度传感

程序员文章站 2022-03-13 17:24:48
...

FPGA(13) 实验综合8 红外遥控

DS18B20简介

一种数字温度传感器,输出数字信号表示温度,体积小,抗干扰能力强,精度高

测量温度范围从负五十五到正一百二十五。精度正负五度,最大转换时间750ms

其命令分为ROM型和RAM型

ROM型指对其内部自带的64位ROM进行操作:包括读取、匹配、跳过、搜索、报警搜索。其内部ROM主要存储,DS18B20的ID号,便于同时操作多个DS18B20.。

ROM完后就是RAM,其内部结构如下图

如果使用寄生电源,总线控制器必须在发出温度转换后立即启动强上拉,并保持500ms

FPGA(14) 实验综合9 DS18B20温度传感

数据格式

最高位为符号位,默认十一位温度值(BYTE0中八位,BYTE1中四位),最低四位是小数位

低11位取补码再从二进制转换为十进制后再乘以0.0625得到所测实际温度,BYTE1前5位同时变化且均为1时,温度为负数

初始化序列

FPGA(14) 实验综合9 DS18B20温度传感
每次写操作至少60us,在两次写操作之间需要至少1us恢复时间,写操作起始于主机拉低数据总线。
在拉低期间进行采集数据

FPGA(14) 实验综合9 DS18B20温度传感
读操作同样需要60us,读操作之间至少需要1us的恢复时间:读操作由主机发起,至少拉低总线1us。
主机发起读操作后,由从机确定单总线上高低电平。
与写操作的区别在于 :读操作时会在拉低总线的15us内读取数据,因此主机需要在15us内采样

部分代码

符号位判断

always @(posedge clk_1us or negedge rst_n) begin
    if(!rst_n) begin
        sign  <=  1'b0;
        data1 <= 11'b0;
    end
    else if(org_data[15] == 1'b0) begin
        sign  <= 1'b0;
        data1 <= org_data[10:0];
    end
    else if(org_data[15] == 1'b1) begin
        sign  <= 1'b1;
        data1 <= ~org_data[10:0] + 1'b1;
    end
end

温度转换与输出

assign data2 = (data1 * 11'd625)/ 7'd100;
always @(posedge clk_1us or negedge rst_n) begin
    if(!rst_n)
        temp_data <= 20'b0;
    else
        temp_data <= data2;
end
相关标签: 嵌入式