基于纳芯微NST461的双通道温度采集评估板的设计
该项目使用了NST461,实现了双通道温度采集评估板的设计,它的主要功能为:温度采集。
标签
温度采集
NST461
双通道温度采集评估板
金玉其中
更新2025-12-02
18
KiCad文件
全屏

任务介绍

本项目基于纳芯微NST461-DQNR高精度温度传感器设计双通道温度采集模块,任务分为基础与扩展两部分。基础任务要求通过NST461的本地温度传感器及远程二极管接口(兼容NPN/PNP晶体管或衬底二极管)实现双通道温度采集,传感器利用12位ADC实现0.0625℃分辨率的温度数据读取,并通过I2C接口将数据传输至任意单片机。单片机需配置串口通信功能,将采集的温度数据实时输出至上位机软件,生成动态温度曲线图以验证数据稳定性。额外任务要求使用12指神探逻辑分析仪捕获I2C总线上的SCL/SDA信号波形,对比规格书中时序参数(如起始条件、停止条件、ACK响应时序),形成包含波形截图等内容的分析报告部分,为优化总线布局和信号完整性提供依据。

硬件介绍

本次用的传感器是NST461-DQNR,一款小尺寸高精度12C接口远程和本地数字温度传感器。NST461是一款远程温度传感器监视器,内置本地温度传感器。其远程温度传感器连接的晶体管通常是低成本的NPN或PNP类型晶体管或衬底热晶体管及二极管,这些器件是微控制器、微处理器或FPGA必不可少的组成部分。片上12bit的模数转换可以为本地和远程温度传感器提供高达0.0625℃的分辨率。NST461可兼容IC和 SMBus的接口,最多支持9个设备的可编程引脚地址,并具有可编程警报和SMBus重置功能。NST461包括了串联电阻消除、可编程非理想因子(n因子)、可编程的偏移量、可编程的温度限值、可编程数字滤波器、二极管故障检测和温度报警等功能,提高了输出精度与抗噪性,为热监测提供了可靠的解决方案。NST461的工作电压范围为2.1V至3.6 V,温度范围为-40℃至125℃,是通信、计算、仪表和工业等众多应用中多位置、高精度温度测量的理想选择。

测试工具使用的是12指神探逻辑分析仪,主要固件使用的是pico-coder提供的开源项目sigrok-pico和他自己编译的Pulseview软件版本识别到设备和显示波形。

image.png

主控单元使用的是基于STM32U385的一个功能板,STM32U385是今年新出的一个单片机,STM32U385 意法半导体(STMicroelectronics)推出的基于Arm® Cortex®-M33 内核的超低功耗微控制器,属于STM32U3系列。该系列在能效、性能、安全性和成本效益之间实现了理想平衡‌。这个开发板也是咱们论坛的活动设计的一款核心板,通过全引脚的引出可以非常迅速的进行原型设计。

方案框图与设计思路


0

其中主要的引脚部分包括四部分,最终的效果在PC软件上进行体现,U385功能主板通过IIC驱动NST461传感器,这个时候逻辑分析仪实施监控引脚状态。最终的数据通过串口发送到PC上,第三方软件对数据进行处理。

原理图与PCB

我们为了实现对NST461的驱动,这里我们绘制了一个双通道的温度采集板,实际上就是对NST461本地温度和远程温度进行采集,这里实现的就是双通道的温度采集。


0

在原理图设计方面我们对部分设计点增加了探针以应对调试过程的电压测量;


0

PCB上通过结构设计把远程温度采集尽量和本地温度进行了一下分离,并通过不覆铜的方式减少影响。

实物图如下:

image.png

软件流程图


0

单片机初始化主要包括时钟初始化,本次测试使用的接口初始化,包括IIC接口和串口打印接口;

传感器初始化主要包括接口的适配和初始的配置;

循环采集主要是对本地温度和远程温度的采集;

调试软件说明

单片机的调试我们用到的是MDK进行代码代码方面的调试,初始化代码生成使用的是STM32CubeMX;

逻辑分析仪使用的是Pulseview软件进行抓取和查看;

串口使用的开源的串口工具,带波形绘制功能;

关键代码说明

我们这次的IIC的的动作主要包括读和写两部分,写操作需要先写地址紧跟着写数据,读操作是通过先写地址再读数据,所以我们实现了一下这两个基本操作与IIC模块的适配:

void Send_Data(uint8_t REGADDR,uint8_t data)
{
uint8_t Data[2] = {0};

Data[0] = REGADDR;
Data[1] = data;
HAL_I2C_Master_Transmit(&hi2c1,(I2C_ADDR << 1), Data, 2, 1000);

}

void Read_Data(uint8_t REGADDR,uint8_t *data)
{
HAL_I2C_Master_Transmit(&hi2c1,(I2C_ADDR << 1), ®ADDR, 1, 1000);
HAL_I2C_Master_Receive(&hi2c1, (I2C_ADDR << 1), data, 1, 1000);


}

然后就是初始化部分,这里我们其实际上读取了一下温度操作,发现远端和本地数据同环境差距较大,尝试通过偏移寄存器进行调整,结果更大了,可以与我们用的三极管有关,所以初始化就不要更改了,或者说是把偏移调整为0:

void NST461_Init(void)
{
Read_Data(0xFE,&NST461.ID);
Read_Data(0x04,&NST461.ConRate);

Send_Data(0x11,0x00);
Send_Data(0x12,0x00);
Send_Data(0x23,0x00);

}

然后就是获取温度的函数,这里主要是本地温度和远程温度,分快来写的,都是12位的数据需要进行合成:

uint16_t Read_LOCAlTempData(void)
{
uint8_t TempH = 0;
uint8_t TempL = 0;
uint16_t data = 0;

Read_Data(0x00,&TempH);
Read_Data(0x15,&TempL);

data = TempH;
data = (data<<4) | (TempL>>4);


data = data*10/16;
return data;
}

uint16_t Read_REMOTETempData(void)
{
uint8_t TempH = 0;
uint8_t TempL = 0;
uint16_t data = 0;

Read_Data(0x01,&TempH);
Read_Data(0x10,&TempL);

data = TempH;
data = (data<<4) | (TempL>>4);


data = data*10/16;
return data;
}

效果展示

我们通过构建的系统进行数据采集,实物连接效果如下:

image.png


下面使我们通过十二指逻辑分析仪采集的部分波形:

采样周期内的整体采集间隔:


0

初始化及首次采集波形:


0

后续循环采集波形(本次和远程温度):


0

可以看到基本是符合预期的

下面是我们通过串口工具采集的部分温度波形(温升后的缓慢下降曲线):


0

遇到的难点及新的体会

本次设计的主要难点实际上是IIC接口的适配调试,以及硬件上的焊接,这两部分算是难点也是重点,第一次遇到这种通过PN结的特性对温度的采集,不过这种也是非常成熟的方式和放大,学到了新的知识。

附件下载
NST461.kicad_pcb
NST461.kicad_sch
U385_NST461.zip
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号