NST1001温度传感器驱动-FPGA

本文介绍了在毕设中采用的纳芯微NST1001温度传感器,作为替代常见传感器的选择。NST1001具有TO-92S和DFN2L两种封装,工作电压范围1.65V~5.5V,单线接口,转换时间为50ms。其应用电路简单,仅需上拉电阻和滤波电容。通过计数传感器输出的脉冲并转换为温度值,无需复杂初始化和读写操作。同时,提供了NST1001的Verilog代码示例,用于读取温度数据。
摘要由CSDN通过智能技术生成

        做毕设的时候有一个温度检测模块,为了降重没有用已经被用到可以称为泛滥的QT18B20和DS18B20,而是选择了相对少见的纳芯微高精度、双引脚数字脉冲输出温度传感器NST1001。

1.1  NST1001温度传感器主要参数

        该温度传感器拥有两种封装,分别是TO-92S封装和DFN2L超小封装,如图1.1所示;两种封装的引脚功能表1.1所示。

d58209dedb154fbd824e5d176c3f5008.png

1.1 NST1001的两种封装

1.1 NST1001TO-92S封装引脚功能

管脚名称

描述

TO-92S封装

DQ

供电及数据输出引脚

NC

悬空

GND

接地

DFN2L超小封装

DQ

供电及数据输出引脚

GND

接地或下拉电阻到地

NST1001的主要性能参数如下表1.2所示:

1.2 NST1001主要性能参数

性能

参数

工作电压

工作电流

1.65V~5.5V

30uA

接口方式

单线接口

工作温度

-50℃~+150℃

单次温度转换时间

50ms

1.2  NST1001温度传感器应用电路

        NST1001温度传感器使用起来非常简单,不像其他传统的数字温度传感器在使用时还需要进行初始化和读、写操作,只需要在使用NST1001时的单次温度转换时间后接受其输出的数字脉冲信号并对脉冲进行计数,再将其转换为温度值即可。

        如图1.2所示,该温度传感器的应用电路同样十分简单,在使用时只需要在DQ引脚和FPGA芯片管脚之间接上一个上拉电阻,GND管脚直接接地即可。如果想要降低外部电路对NST1001工作时的干扰,还可以在电路上加上一个滤波电容。

b3f3dbc3d5e14954ad4d701222b19da8.png

图1.2 NST1001应用电路图和输出波形图

        NST1001的时序图如图1.3所示,只需要记录Tdata时期的下降沿个数就可以轻松获得温度数值。

e557807757ce4ea3ae06c6e5b79d76c9.png

 图1.3 NST1001时序图

温度传感器读取温度代码如下:

module nst1001(
    input           clk     ,
    input           rst_n   ,
    input           i_temp  ,

    output [7:0]    o_temp
);

    parameter delay_time = 150000;

    wire            temp_neg;
    reg    [17:0]   dly_3ms_cnt;
    reg             temp_cnt_start ;
    reg             temp_d1,temp_d2,temp_d3;
    reg    [11:0]   temp_cnt;
    reg    [11:0]   temp_cnt_cur;

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        temp_d1 <= 0;
        temp_d2 <= 0;
        temp_d3 <= 0;
    end
    else begin
        temp_d1 <= i_temp;
        temp_d2 <= temp_d1;
        temp_d3 <= temp_d2;
    end
end

assign temp_neg = temp_d3 && ~temp_d2;
//空闲时dly_3ms_cnt的值不断自增,每隔3ms其值被置0,无下降沿temp_cnt一直为0,temp_cnt_cur不变(默认为0);
//温度转换完成后,每次出现下降沿后时dly_3ms_cnt值置为0,temp_cnt计下降沿个数;
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)
        dly_3ms_cnt <= 0;
    else if(temp_neg)
        dly_3ms_cnt <= 0;
    else if(temp_cnt_start)
        dly_3ms_cnt <= 0;
    else 
        dly_3ms_cnt <= dly_3ms_cnt + 1;
end

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)
        temp_cnt_start <= 0;
    else if(dly_3ms_cnt == delay_time - 1)
        temp_cnt_start <= 1;
    else
        temp_cnt_start <= 0;
end
//温度转换完成后,每次出现下降沿后时dly_3ms_cnt值置为0,temp_cnt计下降沿个数;
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)
        temp_cnt <= 0;
    else if(temp_neg)
        temp_cnt <= temp_cnt + 1;
    else if(temp_cnt_start)
        temp_cnt <= 0;
end

//若3ms内无下降沿则温度转换完成,此时temp_cnt_start值为1,将dly_3ms_cnt值置为0且temp_cnt_cur此时取temp_cnt的值(下降沿个数);
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)
        temp_cnt_cur <= 0;
    else if(temp_cnt_start)begin
        if((temp_cnt >0) && (temp_cnt < 3202))
            temp_cnt_cur <= temp_cnt;
    end 
end

//temp = num*0.0625 - 50.0625; 0.0625 = 1/16;
//由temp = num*0.0625 - 50.0625可知将temp_cnt右移四位(/16或x0.0625)再-50就可以得到环境温度值。
assign o_temp = temp_cnt_cur[11:4] - 6'd50;

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值