GX0011脉冲式温度传感器,兼容NST1001、CT1721,替代传统NTC热敏电阻,附STM32程序

 一、资源说明 

 二、基本参数

 三、参考驱动

 四、注意事项

 一、资源说明

        GX0011 单线脉冲输出数字温度传感器支持计数式通信,仅需单根信号线即可同时完成芯片供电和通信输出功能,有效降低MCU开销和成本。中科银河芯自主研发设计的产品GX0011可直接替代NTC热敏电阻,无需任何外部感温单元即可实现12位(0.0625℃)温度输出,在-50°C~ +150°C的正常工作范围内,测温精度误差< ±1℃,并具有良好的温度线性度曲线,适用于通信、计算机、消费电子、环境、工业和仪器仪表等应用场景。

二、基本参数

 三、参考驱动

1、GX0011引脚功能

 2、GX0011单点应用

        GX0011 支持两种连接方式:上拉连接和下拉连接。需要注意的是,当采用下拉连接时,脉冲将从 GND 引脚(即拉电阻侧)输出,且总线极性与上拉连接方式相反,上电时 GND 引脚为低电平,温度转换完成后 GND 引脚周期发送高脉冲(占空比 25%)。

         在单点应用中,上位机 MCU 仅需要一个 GPIO 口来对脉冲次数进行计数,可以有效节省 GPIO 资源。单点应用参考电路如下:

3、 GX0011零待机功耗应用

        零待机功耗应用方案占用两个 GPIO口。其中,GPIO0 用于脉冲计数,GPIO1 用于使能和关断 GX0011。当 GPIO1 拉高(下拉连接则为拉低),GX0011 使能并开始正常工作;当 GPIO 拉低(下拉连接则为拉高),芯片关断实现零待机功耗。

 4、GX0011多点应用

        在多点应用中,所有 GX0011 共享 GPIO0 作为脉冲计数端口,并且共用同一上下拉电阻。通过将 GPIO1 到GPIOn 中的一个拉低(下拉连接则为拉高)可以使能相应的 GX0011 测温节点。其余不用节点必须设置为高阻(或 两脚短接)状态。注意:如果同时使能两个及以上节点,相互之间会产生数据冲突。

5、GX0011脉冲通信时序 

6、GX0011驱动程序(基于STM32)

6.1 GX0011.h 
#ifndef _GX0011_H
#define _GX0011_H

#include "stm32f10x.h"
#include "delay.h"

#define GX0011_DQ 	PAin(0)	 	//GX0011数据输入脚

void GX0011_Init(void);
void GET_TEMP_GX0011(void);

#endif

6.2 GX0011.c
#include "stm32f10x.h"
#include "GX0011.h"
#include "delay.h"

void GX0011_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_ICInitTypeDef  TIM_ICInitStructure;  
 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); 
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 
	
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				 
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 		 
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
 	TIM_TimeBaseStructure.TIM_Period = 10000-1;                         //和此配置关系不大
	TIM_TimeBaseStructure.TIM_Prescaler =(72-1); 	   
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 

	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;  
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;		//下降沿捕获
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;	 
	TIM_ICInitStructure.TIM_ICFilter = 0x00;							//不滤波
	TIM_ICInit(TIM2, &TIM_ICInitStructure);
 						
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
	NVIC_Init(&NVIC_InitStructure);  
	
}

void TIM2_IRQHandler(void)
{ 		    	 
 	if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET)
	{	  
		TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);	//清除捕获中断标志 	
		
		GX0011CNT = GX0011CNT + 1;
		hightime = 0;		 		     	    					   
	}    
}


//*****本demo使用定时器捕获功能计数,也可以使用外部中断计数*****//

uint8_t 	hightime = 0;	  //高电平时间		    
uint16_t    GX0011CNT = 0;	  //捕获GX0011脉冲的次数	

void GET_TEMP_GX0011(void)
{	
	u32 _time=0;
	GX0011CNT = 0;
	hightime = 0;
	
	TIM_Cmd(TIM2,ENABLE ); 	  //使能定时器
	TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);
		
	while(1)                  //等待转换结束
	{
		if(GX0011CNT > 0) break;
		delay_us(1);	
		_time++;
		if(_time>=500000) break;	
	}
	
	while(1)                 //高电平持续时间大于50us则判断脉冲发送结束
	{
		if(GX0011_DQ)	 hightime++;	
		else hightime = 0;
		if(hightime >= 50) break;
		delay_us(1);	
	}
	
	TIM_Cmd(TIM2,DISABLE );  //关闭定时器	
	TIM_ITConfig(TIM2,TIM_IT_CC1,DISABLE);
	
    al_debug_log("脉冲数:%d",GX0011CNT);
		
	if(GX0011CNT != 0)
		g_sysconfig.gx0011 = GX0011CNT * 0.0625 - 50.0625;
	else
		g_sysconfig.gx0011 = 0;
}

四、注意事项

 1、DQ通信引脚必须加上拉电阻,建议1~10K,一般选择4.7K即可;

友情提示:

欢迎各位伙伴咨询、测试GX0011,有任何问题可随时交流沟通。 
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐