温度传感器NST175手册阅读

news2024/11/25 2:57:40

温度传感器NST175手册阅读

首先看芯片的输入和输出:主要关注IIC接口,毕竟是要驱动这个芯片读取温度。在编写此博客时还未对改温度传感器进行调试,只是阅读手册,把需要重点关注的地方标记出来。

一、芯片管脚

image-20240617214527475

image-20240617214420614

二、温度输出格式

接下来查看它的寄存器配置,翻译手册:

每个温度测量转换的数字输出存储在只读温度寄存器中。NST175的温度寄存器是一个12位的只读寄存器,它存储了最新转换的输出。必须读取两个字节才能获得数据,并列于表4.5和表4.6中。前12位用于表示温度,所有剩余的位都等于零。温度的数据格式列于表4.1中。负数用二进制补码(2‘s comlement)格式表示。在通电或重位后,温度寄存器读取0°C,直到第一次转换完成.

image-20240617215317953

用户可以通过寻址配置寄存器并相应地设置分辨率位,来获得9、10、11或12位的分辨率。对于9位、10位或11位的分辨率,将使用温度寄存器中的最有效位(MSBs),并将未使用的最小有效位(LSBs)设置为零。

NST175支持快速(最多400 kHz)和高速(最多2 MHz)模式的传输协议。所有的数据字节首先被传输到MSB上。

温度输出格式:

image-20240617215229671

三、NST175设备地址:

要与NST175通信,主必须首先通过从地址字节为从设备地址。从地址字节由七个地址位和一个指示执行读或写操作的意图的方向位组成。NST175具有三个地址引脚,允许在一个总线接口上对多达27个设备进行寻址。表4.2描述了用于正确连接多达27个设备的引脚逻辑电平。A1表示脚连接到电源(VDD);0表示脚连接到GND;float表示脚未连接。引脚A0、A1和A2的状态在每条总线通信上进行采样,并且必须在接口上的任何活动之前进行设置。

image-20240617215759710

image-20240618071705876

硬件配置A2 A1 A0 = 0 Float 1,所以器件地址是:0101001,一共7bit。还有1bit是读写位,读为1写为0,所以器件地址加上读写位一共8bit,值为0101_0011=0x53表示FPGA对NST175进行读操作;值为0101_0010=0x52表示FPGA对NST175进行写操作;

四、NST175读写寄存器操作

image-20240617220036190

寄存器字节首先被发送到MSB,然后是LSB。即先写高位。

写时序:

image-20240618060941786

image-20240617220840103

**读时序:**读时序需要写入两次IIC设备地址,第一次写入是为了改变指针寄存器里面的值,从而访问需要访问的寄存器,这个操作是往IIC设备里面写,读写标志位应该为0(写);第二次的IIC设备地址,读写标志位应该设置为读(1),后面2byte数据是IIC设备返还给FPGA的数据,这些数据是从寄存器读出的。

image-20240618073058659

1)指针寄存器:

指针寄存器用于指向访问的寄存器

image-20240617221548853

寄存器对应的地址如图:

image-20240617221635493

温度寄存器:0000_0000 = 0x00
配置寄存器:0000_0001 = 0x01
低温限制寄存器:0000_0010 = 0x02
高温限制寄存器:0000_0011 = 0x03
产品ID寄存器:0000_0111 = 0x07
2)温度寄存器:

NST175的温度寄存器是一个12位的只读寄存器,它存储了最新转换的输出。必须读取两个字节才能获得数据,如表4.5和表4.6所示。字节1是最重要的字节,其次是字节2,即最不重要的字节。前12位用于指示温度,所有剩余的位等于零。如果不需要该信息,则不必读取最小的字节。在通电或重置值之后,温度寄存器读取0°C,直到第一次转换完成。

image-20240617221940745

3)配置寄存器:

配置寄存器是一个8位的读/写寄存器,用于存储控制温度传感器的工作模式的位。读取和写操作首先执行MSB。NST175的配置寄存器的格式如表4.7所示,然后是寄存器位的分解。配置寄存器的通电或复位值均为等于0的位(上电后全部位置为0)。

image-20240617222212348

  • SD:配置关闭模式

    NST175的关闭模式允许用户通过关闭除串行接口以外的所有设备电路来节省最大功率,这将电流消耗减少到通常小于0.1 μA。当SD位为1时,启用关闭模式;当当前转换完成时,设备关闭。当SD等于0时,设备保持连续转换状态。

    SD=1:关闭模式
    SD=0:连续模式
    
  • TM:温度控制模式

    NST175的温控器模式位向设备指示是在比较器模式(TM = 0)还是在中断模式(TM = 1)下运行。有关比较器和中断模式的更多信息,请参阅上限和下限寄存器部分。

    TM=0:比较模式
    TM=1:中断模式
    
  • POL:极性配置

    NST175的极性位允许用户调整警报引脚输出的极性。如果POL位设置为0(默认值),则警报销将变为活动低。当POL位设置为1时,警报销变高,警报销的状态反转。警报销在各种模式下的操作如图4.8所示。

    image-20240618061719726

POL=0:测量温度超过高温限制寄存器的值时,警报引脚输出0
POL=1:测量温度超过高温限制寄存器的值时,警报引脚输出1
  • F1/F2:故障队列

故障条件定义为当测量的温度超过用户在Thigh和Tlow寄存器中设置的自定义限制时。此外,还可以使用故障队列对生成警报所需的故障条件数进行编程。提供故障队列是为了防止由于环境噪声而产生的错误警报。故障队列需要连续的故障测量,以触发警报功能。表4.8定义了可编程在设备中触发警报条件的测量故障数量。有关Thigh和TLOW寄存器格式和字节顺序,请参阅“上限和下限寄存器”部分

image-20240617224036297

F1 F2=0 0:测量1次
F1 F2=0 1:连续测量2次
F1 F2=1 0:连续测量4次
F1 F2=1 1:连续测量6次
  • R1/R0:转换器分辨率

转换器分辨率位控制内部ADC转换器的分辨率。这种控制允许用户通过编程更高分辨率或更快的转换时间来最大化效率。表4.9确定了分辨率位以及分辨率与转换时间之间的关系

image-20240617224223860

R1 R2 = 0 0:分辨率为9bit,0.5℃
R1 R2 = 0 1:分辨率为10bit,0.25℃
R1 R2 = 1 0:分辨率为11bit,0.125℃
R1 R2 = 1 1:分辨率为12bit,0.0.0625℃
  • OS:一次性测量模式

    NST175采用了一次性的温度测量模式。当设备处于关闭模式时,向OS位写入一个1将开始一次温度转换。在单次转换完成后,设备返回到关机状态。当不需要连续的温度监测时,此特性有助于降低NST175的功耗。当读取配置寄存器时,OS总是读取为零。

    要和关闭模式搭配使用
    OS = 1:关闭模式下,往OS位写入1,就开始单次温度转换,转换完毕之后,NST175进入关机在状态
    

配置寄存器配置的值:

config[7:0]=8'b0111_0011;//0x73,配置为连续转换模式、比较模式、极性POL=0、故障队列为01--连续测量2次、分辨率设置我i12bit、OS=0
4)高低温限制寄存器

在比较器模式(TM = 0)中,当温度等于或超过Thigh上的值时,NST175的警报销被激活,并根据故障位F1和F0产生连续数量的故障数。对于相同数量的故障,直到温度低于指示的TLOW值时,警报销将保持激活值。在中断模式(TM = 1)中,当温度等于或超过Thigh时,警报针将处于激活状态。在发生任何寄存器的读取操作,或设备成功响应SMBus警报响应地址之前,警报销一直保持活动状态。如果设备处于关闭模式,警报销也会被清除。当警报销被清除时,它只有在温度低于TLOW时才会再次被激活。当温度降至低于TLOW时,警报销将被激活并保持激活,直到被任何寄存器的读取操作或对SMBus警报响应地址的成功响应清除。当警报销被清除时,上述循环重复,当温度等于或超过Thigh时,警报销被激活。此外,还可以通过使用常规呼叫重置命令重置设备来清除警报销。此操作还可以通过将设备返回到比较器模式(TM = 0)来清除设备中的内部寄存器的状态。

这两种操作模式都如图4.8所示。表4.10、表4.11、表4.12和表4.13描述了Thigh和TLOW寄存器的格式。首先发送最重要的字节,然后是最不重要的字节。Thigh和TLOW的通电复位值为:THIGH = 80°C and TLOW = 75°C

Thigh和TLOW的数据格式与温度寄存器相同。

image-20240618060419575

image-20240618060531338

温度、Thigh和TLOW寄存器的所有12位都用于所有转换器分辨率的警报功能的比较。即使转换器配置为9位分辨率,Thigh和TLOW中的三个LSB也会影响警报输出。

5)产品ID寄存器: PRODID: Product ID Register (Read-Only) Pointer Address: 07h

image-20240618060818500

网上前辈写的代码可以借鉴,是用c来写的,如果是Nios配置的话可以参考:

#include "STC15Fxxxx.H"
//#include "oled.h"

/*************	本地常量声明	**************/
#define MAIN_Fosc		11059200L	//定义主时钟
#define	BaudRate1		9600UL	//选择波特率

#define	Timer1_Reload	(65536UL -(MAIN_Fosc / 4 / BaudRate1))		//Timer 1 重装值, 对应300KHZ
#define	Timer2_Reload	(65536UL -(MAIN_Fosc / 4 / BaudRate1))		//Timer 2 重装值, 对应300KHZ
#define uchar unsigned char
#define uint  unsigned int

#define Slave_Id  0x90Slave_Id,芯片地址IO配置,对应关系请查询Spec 
#define Temp_Reg  0x00温度数值寄存器,深度为2byte
#define Conf_Reg  0x01配置寄存器,深度为1byte

sbit OLED_SCL = P3^2;//时钟 D0(SCLK?
sbit OLED_SDIN = P3^3;//D1(MOSI) 数据

sbit Alert = P5^4;
sbit Alert_Led =P5^5;


#define SCLK_Clr() OLED_SCL=0
#define SCLK_Set() OLED_SCL=1

#define SDIN_Clr() OLED_SDIN=0
#define SDIN_Set() OLED_SDIN=1

#define Alert_Led_On()  Alert_Led=0
#define Alert_Led_Off() Alert_Led=1



/*************	本地变量声明	**************/
unsigned char T_flag = 0;
unsigned char Temp_H = 0,Temp_L = 0;  //TL:底八位 TH:高八位
bit	B_TX1_Busy;	//发送忙标志

/*****************************************************
//延时1us
******************************************************/
void delayus(uint i)
{
	while(i--);
}

/*****************************************************
//延时1ms
******************************************************/
void delayms(uint ms)
{
	unsigned int i;
	 do{
	      i = MAIN_Fosc / 13000;
		  while(--i)	;   //14T per loop
     }while(--ms);
}

/**********************************************
//IIC Start
**********************************************/
void IIC_Start()
{
	SCLK_Set() ;
	SDIN_Set();
	SDIN_Clr();
	SCLK_Clr();
}

/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{
	SCLK_Set() ;
	SDIN_Clr();
	SDIN_Set();
}

/**********************************************
//IIC Master Ack
**********************************************/
void IIC_Ack()
{
	SCLK_Clr();
	SDIN_Clr();
	delayus(5); //delay 5uS
	SCLK_Set();	
}
/**********************************************
//IIC Wait Slave Ack
**********************************************/
void IIC_Wait_Ack()
{
	SCLK_Set() ;
	SCLK_Clr();
}

/**********************************************
// IIC Write byte
**********************************************/
void Write_IIC_Byte(unsigned char IIC_Byte)
{
	unsigned char i;
	unsigned char m,da;
	da=IIC_Byte;
	SCLK_Clr();
	for(i=0;i<8;i++)		
	{
		m=da;
		m=m&0x80;
		if(m==0x80)
		{SDIN_Set();}
		else 
		{SDIN_Clr(); }
		
		da=da<<1;
		SCLK_Set();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		SCLK_Clr();
	}
}

/**********************************************
// IIC Write byte
**********************************************/
unsigned char Read_IIC_Byte()
{
	unsigned char i;
	unsigned int da = 0;
	
	SCLK_Clr();
	_nop_();
	_nop_();
	_nop_();
	SDIN_Set();

	for(i=0;i<8;i++)	//8	
	{
		da=da<<1 ;
		SCLK_Set();
		//delayus(5);
		if(OLED_SDIN == 1)
		{da++;}
		SCLK_Clr();
	}
	IIC_Ack();

	return da;
}


void SendData(char dat)
{
    if(!B_TX1_Busy)		//发送空闲
    {
        B_TX1_Busy = 1;		//标志发送忙
        SBUF = dat;	//发一个字节
        while(!TI);
        TI = 0;
        ES = 1;
    }
}

void Uart_Init()
{
    B_TX1_Busy = 0;	
	
	P3M0 = 0xff;
    P3M1 = 0xff;

    S1_8bit();				//8位数据
    S1_USE_P30P31();		//UART1 使用P30 P31口	默认
    AUXR &= ~(1 << 4);	//Timer stop		波特率使用Timer2产生
    AUXR |= 0x01;		//S1 BRT Use Timer2;
    AUXR |=  (1 << 2);	//Timer2 set as 1T mode
    TH2 = (u8)(Timer2_Reload >> 8);
    TL2 = (u8)Timer2_Reload;
    AUXR |=  (1 << 4);	//Timer run enable

	delayms(100);	
	
    REN = 1;	//允许接收
    ES  = 1;	//允许中断
    INT1 = 1;
    IT1 = 1;                    
    EA = 1;		//允许全局中断
	EX1 = 0;
}

void read_temp()   
{	
	unsigned int Data = 0;	 
	IIC_Start();  		 
	Write_IIC_Byte(Slave_Id);            //Slave address,SA0=0	   90
	IIC_Wait_Ack();	
	Write_IIC_Byte(Temp_Reg);			//write command
	IIC_Wait_Ack();
	IIC_Stop();
	
	delayms(50);//等待温度准换完成,连续温度转换模式,此句可忽略。

	IIC_Start();
	Write_IIC_Byte((Slave_Id+1);            //Slave address,SA0=0		91
	IIC_Wait_Ack();
	Temp_H = Read_IIC_Byte();		// MSB
	IIC_Ack();							
	Temp_L = Read_IIC_Byte();		//LSB
	//IIC_Ack();		
	IIC_Stop();
			
	if(Temp_H>127)//温度为负值
	{
		T_flag = 0;
		Data = Temp_H*256 + Temp_L;
		Data >>= 4;
		Data=~Data;
		Data++;
		Data <<= 4;
		Temp_H = Data/256;
		Temp_L = Data%256;
						
	}
	else
	{	
	  	T_flag = 1;
		Temp_L >>= 4;
		Temp_L <<= 4;			
	}									
}

void  Temp_Init()   
{		
	IIC_Start();  		 			   //先
	Write_IIC_Byte(Slave_Id);          //0x90  Slave address,SA0=0	 
	IIC_Wait_Ack();	
	Write_IIC_Byte(Conf_Reg);		   //0x01  配置寄存器 write command
	IIC_Wait_Ack();
	Write_IIC_Byte(0x60);              // 分辨率最高
	IIC_Wait_Ack();
	IIC_Stop();									
}

void main(void)
{
	Uart_Init();//配置串口
	Temp_Init();//配置最高12bit分辨率,0.0625℃.如不需要配置,此行可忽略。default分辨率是9bit,0.5℃

    while (1)
    {		

		read_temp();//读取温度数据

		//读取 Temp_H Temp_L 的温度数据; 实际温度数值 = (Temp_H*256+Temp_L)/256,Temp_H和Temp_L 需要转为十进制。
	
		Temp_H=0;
		Temp_L=0;
		delayms(5);
	  
    }
}
/********************* UART1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
    if(RI)
    {
        RI = 0;
      //RX1_Buffer[0] = SBUF;		//保存一个字节
    }

    if(TI)
    {
        TI = 0;
        B_TX1_Busy = 0;		//清除发送忙标志
    }
}

--晓凡  2024618日于武汉书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【分享】WinRAR如何加密压缩文件?

WinRAR除了用来解压缩文件&#xff0c;还可以作为一款加密软件&#xff0c;给压缩文件设置密码保护&#xff0c;今天一起来看看&#xff0c;WinRAR的3种加密方法。 方法1&#xff1a;设置单次加密 如果偶尔需要给压缩文件设置密码&#xff0c;可以使用单次加密方法。 首先&am…

YOLOv10涨点改进:改进检测头(Partial_C_v10Detect)检测头结构创新,实现涨点

目录 1,YOLOv10介绍 1.1 C2fUIB介绍 1.2 PSA介绍 1.3 SCDown 1.Partial C v10Detect原理介绍 1.1 Partial Convolution 3.v10Detect二次创新引入到yolov10 3.1 修改ultralytics/nn/modules/head.py 第一处修改:PConv加入以下代码 1,YOLOv10介绍 论文:https://arxiv.or…

Python数据分析-对驾驶安全数据进行了预测

一、研究背景和意义 随着汽车保有量的不断增加&#xff0c;交通事故已成为全球范围内的重大公共安全问题。每年因交通事故造成的人员伤亡和财产损失给社会带来了巨大的负担。为了提高驾驶安全&#xff0c;减少交通事故的发生&#xff0c;许多研究致力于探索影响驾驶安全的因素…

IRIS论文阅读笔记

这是ICLR2023一篇world model的论文&#xff0c;提出了一个称为IRIS的world model方法模型仍然是分为两部分&#xff0c;一部分是模拟世界的world model&#xff0c;包括预测下一帧的观测&#xff0c;预测当前reward&#xff0c;预测是否terminate的三个输出&#xff1b;第二部…

echarts legend 背景色渐变

问题与本文无关&#xff1a;如果检测软件显示loadsh.js 的版本是4.17.10 装element-ui 2.15.8版本以下&#xff0c;2.15.6经过测试可以 代码&#xff1a; <template><div class"levelMain"><div class"survey-head"><div class"…

信号与系统实验MATLAB-实验1-信号的MATLAB表示及信号运算

实验1-信号的MATLAB表示及信号运算 一、实验目的 1、掌握MATLAB的使用&#xff1b; 2、掌握MATLAB生成信号波形&#xff1b; 3、掌握MATLAB分析常用连续信号&#xff1b; 4、掌握信号运算的MATLAB实现。 二、实验内容 编写程序实现下列常用函数&#xff0c;并显示波形。…

OpenMMlab AI实战营第七期培训

OpenMMlab AI实战营第七期培训 OpenMMlab实战营第七次课2023.2.10学习参考一、全流程的语义分割实战1.回顾**语义分割**、**实例分割**、**全景分割**2.代码模板的全流程3.数据集推荐&#xff1a;4.代码全流程 OpenMMlab实战营 第七次课2023.2.10 此次实战营的积分规则介绍&a…

LabView_波形控件

波形图表 将一定数量的数据点存储在缓冲区&#xff0c;并通过这种方式存储并显示这些数据点。当缓冲区被填满后&#xff0c;波形图表将会用新的数据点覆盖缓冲区中存在时间最久的数据点。 当数据点可用时&#xff0c;波形图表将显示已有的数据点外加最新接收到的数据点 。 您可…

Vatee万腾平台:创新科技,助力企业腾飞

在全球化竞争日益激烈的今天&#xff0c;企业如何借助科技力量实现转型升级&#xff0c;已成为摆在众多企业家面前的重大课题。Vatee万腾平台凭借其卓越的创新科技和专业的服务能力&#xff0c;成为众多企业实现腾飞的得力助手。 一、创新科技&#xff0c;引领企业前行 Vatee万…

解读自然语言处理:技术、应用与未来展望

引言 自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是计算机科学、人工智能和语言学的一个跨学科领域&#xff0c;致力于实现人与计算机之间通过自然语言进行有效沟通的能力。NLP 的核心任务是理解、解释和生成人类语言&#xff0c;使计…

【GlobalMapper精品教程】086:批量修改符号的样式

跟ArcGIS一样,Globalmapper也可以批量修改符号的样式,如样式、填充颜色、轮廓等等。 文章目录 一、加载实验数据二、土地利用符号化三、批量修改符号样式四、注意事项一、加载实验数据 订阅专栏后,从私信查收专栏配套的完整实验数据包,打开data086.rar中的土地利用数据,如…

[C#]使用深度学习算法opencvsharp部署RecRecNet广角图像畸变矫正校正摄像广角镜头畸变图像

【论文地址】 https://arxiv.org/abs/2301.01661 【训练源码】 https://github.com/KangLiao929/RecRecNet 【参考源码】 https://github.com/hpc203/recrecnet-opencv-dnn 【算法介绍】 广角镜头在VR技术中显示出诱人的应用&#xff0c;但它会在捕获的图像中引入严重的径…

AI早班车

全球AI新闻速递 1.国内团队制作AI短片《凤鸣山海》亮相北京电影节 国内团队制作AI短片《凤鸣山海》亮相北京电影节“光影未来”电影科技单元。独特的中国玄幻题材&#xff0c;朱雀、玄武、白虎、青龙&#xff0c;四大神兽栩栩如生 2.字节跳动拒绝出售TikTok&#xff0c;如果败…

Pycharm怎么默认终端连接远程服务器

因为经常需要从宿舍到学校内通勤&#xff0c;期间所有连接都会中断&#xff0c;所以每次开SSH特别麻烦&#xff0c;每次终端自动切换到本地&#xff1a; 每次都得点一下Start SSH Session 想要默认终端连接远程服务器&#xff0c;需要点File->Setting->Tools->SSH T…

【Linux】MySQL下载与安装

1. 下载压缩包 官网下载 2. 解压 上传并解压好放在指定位置 创建soft文件夹 mkdir /soft上传文件&#xff0c;在该目录下再创建一个mysql文件夹&#xff0c;将安装包解压到新文件夹中 mkdir /soft/mysql-8.3.0 tar -xvf mysql-8.3.0-1.el9.x86_64.rpm-bundle.tar -C mysq…

【系统架构设计师】二、操作系统知识(存储管理|设备管理|文件管理)

目录 一、存储管理 1.1 分区存储管理 1.1.1 概念 1.1.2 系统分配内存的算法(可变分区) 1.1.3 逻辑页 1.1.4 页面置换算法 1.1.5 快表 1.2 分段存储管理 1.3 段页式存储 二、设备管理 2.1 概述 2.2 I/O软件 2.3 设备管理技术 三、文件管理 3.1 概述 3.2 文件的类…

超大场景的三维模型(3D)轻量化的主要技术方法

超大场景的三维模型&#xff08;3D&#xff09;轻量化的主要技术方法 超大场景的三维模型在虚拟现实、游戏开发和可视化应用等领域具有重要的价值和应用前景。然而&#xff0c;由于其庞大的数据量和复杂的几何结构&#xff0c;给数据存储、传输和渲染带来了挑战。为了提高超大场…

湖北科技学院2024年成人高等继续教育招生简章

湖北科技学院&#xff0c;这所坐落在荆楚大地的高等学府&#xff0c;一直以来都是培养各类专业人才的重要基地。随着社会的快速发展&#xff0c;终身学习的理念深入人心&#xff0c;成人高等继续教育作为满足广大成年人提升学历、增强职业技能的重要途径&#xff0c;受到了越来…

生成式人工智能如何改变客户服务

生成式人工智能不仅重新定义了品牌与客户的互动方式&#xff0c;还重新定义了品牌如何优化内部资源&#xff0c;以提供更加个性化和高效的服务。 了解在就业和效率方面的挑战和机遇&#xff0c;使用生成式人工智能工具进行客户服务和支持任务。 生成式人工智能不仅重新定义了品…

【Linux进程通信】Linux进程间的无声对话:匿名管道与命名管道技术

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a;我们已经知道了进程和文件的基本理论&#xff0c;知道了进程和文件的重要性。进程具有独立性&#xff0c;所以两个进程不能直接通信&#xff0c;那么进程间应该怎样通信呢&#xff1f;我们今天来解开其…