基于STM32CUBEMX驱动TMOS模块STHS34PF80(1)----获取ID

概述

STHS34PF80 是一款非冷却、工厂校准的红外运动和存在检测传感器,工作波长在 5 µm 至 20 µm 之间。
STHS34PF80 传感器设计用于测量视野内物体发出的红外辐射量。该信息由 ASIC 进行数字处理,可以对其进行编程以监控运动、存在或过热状况。
凭借其卓越的灵敏度,STHS34PF80 可以在最远 4 米的距离内检测到人体的存在,而无需光学镜头。
STHS34PF80 采用小型 3.2 x 4.2 x 1.455(最大)mm 10 引脚 LGA 封装。

最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:6_15061293 。
在这里插入图片描述
STHS34PF80是一种红外传感器,可用于检测静止和移动物体的存在,以及过温条件。它使用独特的TMOS技术测量物体的红外辐射,以便在物体位于视场内时检测其存在或运动。
在传感器上沉积了一个光学带通滤波器,将其工作范围限制在5微米到20微米的波长范围内,使其不对可见光和其他频段敏感。
传感器基于一组连接在一起并作为单个感应元件运作的浮动真空热晶体管MOS(TMOS)矩阵。得益于ST独特的MEMS制造技术,实现了先进的热隔离,使传感器能够将最小的温度变化转化为电信号,然后将这些信号馈送给ASIC。
传感器分为两个部分,一个暴露于红外辐射,另一个被屏蔽。通过在两个部分之间进行差分读数,可以消除传感器自加热的影响。
STHS34PF80集成了高精度温度传感器,用于测量环境温度并测量物体的精确红外辐射。
ASIC还实现了专门的智能处理,以检测/区分静止和移动物体,并可以断言专用中断。
可用不同的输出数据速率(ODR),范围从0.25赫兹到30赫兹,以及单次测量模式。
STHS34PF80配备了I²C / 3线SPI接口,并采用了与SMD安装兼容的OLGA 3.2 x 4.2 x 1.455 mm 10L封装。
封装所保证的视场为80°。
在这里插入图片描述

样品申请

https://www.wjx.top/vm/OhcKxJk.aspx#

视频教程

https://www.bilibili.com/video/BV11u4y1X7JY/

基于STM32CUBEMX驱动TMOS模块STHS34PF80(1)----获取ID

完整代码下载

https://download.csdn.net/download/qq_24312945/88216813

所有功能

● 主要特性
○ 高灵敏度红外存在和运动检测传感器
○ 对于尺寸为 70 x 25 cm² 的物体,在不使用镜头的情况下可达 4 米
○ 集成硅红外滤光片
○ SMD 友好
○ 能够检测静止物体
○ 能够区分静止和移动的物体
○ 80° 视野
○ 工厂校准
○ 低电量
○ 用于存在/运动检测的嵌入式智能算法
● 电气规格
○ 电源电压:1.7V 至 3.6V
○ 电源电流:10μA
○ 2 线 I²C / 3 线 SPI 串行接口
○ 可编程 ODR(0.25 Hz 至 30 Hz)
○ 一击模式
● 传感规格
○ 红外灵敏度:2000 LSB/°C
○ RMS 噪声:25 LSB rms
○ 工作波长:5 µm 至 20 µm
○ 本地温度传感器精度:±0.3℃
● 包装规格
○ LGA 10 引线,3.2 x 4.2 x 1.455(最大)毫米
○ 符合 ECOPACK 和 RoHS 标准
在这里插入图片描述

接口

STHS34PF80模块接口的示意图如下所示,支持IIC或者SPI通讯。
在这里插入图片描述

最小系统图

在这里插入图片描述

生成STM32CUBEMX

串口配置

查看原理图,PA9和PA10设置为开发板的串口。
在这里插入图片描述

配置串口。
在这里插入图片描述

IIC配置

在这个应用中,STS34PF80模块通过I2C(IIC)接口与主控器通信。具体来说,STS34PF80模块的I2C引脚连接到主控器的PB6(引脚B6)和PB7(引脚B7)两个IO口。

在这里插入图片描述

配置IIC为普通模式,速度为100k。
在这里插入图片描述

IO口设置

STS34PF80IO设置如下所示。
在IIC模式下CS需要给个高电平。
在这里插入图片描述
官方提供IIC接线如下所示。
在这里插入图片描述
在这里插入图片描述

需要把PA8配置为输出模式,默认高电平,配置PA7为输入模式。

在这里插入图片描述

串口重定向

打开魔术棒,勾选MicroLIB

在这里插入图片描述

在main.c中,添加头文件,若不添加会出现 identifier “FILE” is undefined报错。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

函数声明和串口重定向:

/* USER CODE BEGIN PFP */
int fputc(int ch, FILE *f){
    
    
	HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
	return ch;
}
/* USER CODE END PFP */

模块地址

STHS34PF80模块的默认设备地址为1011010(0x5A)。设备地址是用来识别和通信特定设备的标识符。通过将VL6180模块的设备地址设置为1011010(0x5A),您可以确保与该模块进行正常的通信和控制。
在这里插入图片描述

参考demo

这里参考ST在GITHUB上发布的案例来进行修改。
https://github.com/STMicroelectronics/sths34pf80-pid/blob/master/sths34pf80_reg.c
物体存在检测demo。
https://github.com/STMicroelectronics/STMems_Standard_C_drivers/blob/master/sths34pf80_STdC/examples/sths34pf80_tmos_presence_detection.c

IIC写函数

参考例程序中对应的驱动程序为sths34pf80_write_reg(),如下所示。
在这里插入图片描述
由上面表格可以得知,地址为101 1010(0x5A),如果是写操作,那么具体的地址为1011 0100(0xB4)。

/**
  * @brief  读取数据
  *
  * @param  add   模块地址
  * @param  reg   寄存器地址
  * @param  data  buffer 缓冲区
  * @param  len   读取长度
  * @retval ret   正常返回HAL_OK
  *
  */
uint8_t sths34pf80_read_reg(uint8_t add,uint8_t reg,  uint8_t * data, uint8_t len)
{
    
    
	uint8_t ret;
	ret=HAL_I2C_Mem_Read(&hi2c1 ,(add<<1)|1,reg,I2C_MEMADD_SIZE_8BIT,data,len,0xffff);

	return ret;
}

IIC读函数

参考例程序中对应的驱动程序为sths34pf80_read_reg(),如下所示。
在这里插入图片描述

由上面表格可以得知,地址为101 1010(0x5A),如果是读操作,那么具体的地址为1011 0101(0xB5)。

/**
  * @brief  写入数据
  *
  * @param  add   模块地址
  * @param  reg   寄存器地址
  * @param  data  buffer 缓冲区
  * @param  len   写入长度
  * @retval ret   正常返回HAL_OK
  *
  */
uint8_t sths34pf80_write_reg(uint8_t add,uint8_t reg, uint8_t * data, uint8_t len)
{
    
    
		uint8_t ret;
		HAL_I2C_Mem_Write(&hi2c1 ,(add<<1)|0,reg,I2C_MEMADD_SIZE_8BIT,data,len,0xffff);
	return ret;

}

参考程序初始化

在这里插入图片描述

获取ID

参考例程序中对应的获取ID驱动程序,如下所示。
在这里插入图片描述

获取ID可以查看0x0F,读出来的值应该为0xD3。
在这里插入图片描述

读取函数如下所示。

/**
  * @brief  获取设备ID
  *
  * @param  add      设备地址
  * @param  val      设备ID.
  * @retval ret   		正常返回HAL_OK
  *
  */

uint8_t STHS34PF80_getChipID(uint8_t add)
{
    
    
  uint8_t temp[1]={
    
    0};
	sths34pf80_read_reg(add,STHS34PF80_WHO_AM_I,temp,1);
  return temp[0];
}

主函数

  /* USER CODE BEGIN 2 */

	uint8_t STHS34PF80_ID =STHS34PF80_getChipID(STHS34PF80_ADDRESS);
	printf("STHS34PF80_ID=0x%x\n",STHS34PF80_ID);	
	
  /* USER CODE END 2 */

猜你喜欢

转载自blog.csdn.net/qq_24312945/article/details/132264784
今日推荐