基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据

这篇具有很好参考价值的文章主要介绍了基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

STHS34PF80传感器项目种修改 Arduino 脚本,重新移植到STM32的MCU中。
该项目基于STHS34PF80 IR温度传感器,能够检测环境和物体温度,并且在最大4米范围内检测存在和运动。有一个Arduino脚本,显示如何为基本环境和物体温度测量配置传感器,并如何配置嵌入式功能算法,并使用它们检测存在和运动。脚本允许连续或一次性模式,允许更改低通滤波器和检测阈值以实现各种检测行为。脚本利用内嵌的中断引擎来检测温度数据的就绪状态,以及通知存在和运动事件。
本节将在上节代码中继续配置,通过获取模块的状态标志位来检测是否有人体存在。
最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:6_15061293 。
基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

视频教学

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

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据

样品申请

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

参考Demo

hthttps://github.com/kriswiner/STHS34PF80/tree/main

完整代码下载

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

参考程序获取数据

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

获取数据标志位

使用状态寄存器(STATUS,地址为23h)来检查何时有新的数据集可用。这里的数据集可能包括多种数据输出:物体温度、环境温度,以及可能的其他几个由嵌入式智能算法生成的输出(如存在检测、动作检测和环境温度冲击检测)。

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

参考文档设置如下所示。

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

修改如下。

/**
  * @brief  获取DRDY
  *
  * @param  add      设备地址
  * @param  val      设备ID.
  * @retval ret   		正常返回HAL_OK
  *
  */	
	
uint8_t STHS34PF80_getDataReadyStatus(uint8_t add)
{
	uint8_t temp = 0;//STHS34PF80_STATUS->0x23
	sths34pf80_read_reg(add, STHS34PF80_STATUS, (uint8_t *)&temp, 1);

   return temp;
  }	

使用数据准备就绪信号

FUNC_STATUS 寄存器(地址为25h)是一个只读寄存器,它包含了设备的嵌入式智能算法的状态标志。

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

PRES_FLAG: 这是一个存在检测标志。当检测到存在时,此位变为1;当没有检测到存在时,此位变回0。默认值为0。
(0: 没有检测到存在;1: 检测到存在)
MOT_FLAG: 这是一个运动检测标志。当检测到运动时,此位变为1;当没有检测到运动时,此位变回0。默认值为0。
(0: 没有检测到运动;1: 检测到运动)
TAMB_SHOCK_FLAG: 这是一个环境温度冲击检测标志。当检测到环境温度冲击时,此位变为1;当没有检测到环境温度冲击时,此位变回0。默认值为0。
(0: 没有检测到环境温度冲击;1: 检测到环境温度冲击)

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

参考文档设置如下所示。

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

获取代码如下所示。

/**
  * @brief  清零DRDY
  *
  * @param  add      设备地址
  * @param  val      设备ID.
  * @retval ret   		正常返回HAL_OK
  *
  */
uint8_t STHS34PF80_getFuncStatus(uint8_t add)
{
	uint8_t temp = 0;//STHS34PF80_FUNC_STATUS->0x25
	sths34pf80_read_reg(add, STHS34PF80_FUNC_STATUS, (uint8_t *)&temp, 1);

   return temp;
  }

嵌入式智能数字算法的输出数据

在4.5.4节中,描述了嵌入式智能数字算法的输出数据。这些数据包括存在检测、运动检测和环境冲击检测的输出数据,分别发送到TPRESENCE_H (3Bh) 和 TPRESENCE_L (3Ah) 寄存器,TMOTION_H (3Dh) 和 TMOTION_L (3Ch) 寄存器,以及 TAMB_SHOCK_H (3Fh) 和 TAMB_SHOCK_L (3Eh) 寄存器。
这些数据没有内在的物理意义,只是嵌入式智能数字算法用来断言相应的标志。

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划
基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划
获取代码如下所示。

/**
  * @brief  					嵌入式智能数字算法产生的存在检测输出数据
  *
  * @param  add      设备地址
  * @param  val      设备ID.
  * @retval ret   		正常返回HAL_OK
  *
  */	
	

int16_t STHS34PF80_readPresence(uint8_t add)
{
	uint8_t rawData[2];  //STHS34PF80_TPRESENCE_L->0x3A
	sths34pf80_read_reg(add, STHS34PF80_TPRESENCE_L, (uint8_t *)&rawData[0], 2);	

	return (int16_t)(((int16_t)rawData[1]) << 8 | rawData[0]);			
  }

/**
  * @brief  					嵌入式智能数字算法产生的运动检测输出数据
  *
  * @param  add      设备地址
  * @param  val      设备ID.
  * @retval ret   		正常返回HAL_OK
  *
  */	
int16_t STHS34PF80_readMotion(uint8_t add)
{
	uint8_t rawData[2];  //STHS34PF80_TMOTION_L->0x3C
	sths34pf80_read_reg(add, STHS34PF80_TMOTION_L, (uint8_t *)&rawData[0], 2);	

	return (int16_t)(((int16_t)rawData[1]) << 8 | rawData[0]);				

  }

/**
  * @brief  					嵌入式智能数字算法产生的环境冲击输出数据
  *
  * @param  add      设备地址
  * @param  val      设备ID.
  * @retval ret   		正常返回HAL_OK
  *
  */	
int16_t STHS34PF80_readAmbShock(uint8_t add)
{
	uint8_t rawData[2]; //STHS34PF80_TAMB_SHOCK_L->0x3E
	sths34pf80_read_reg(add, STHS34PF80_TAMB_SHOCK_L, (uint8_t *)&rawData[0], 2);	

	return (int16_t)(((int16_t)rawData[1]) << 8 | rawData[0]);			

  }	

4.5.3节中提供了一个简单的例子,展示了如何从传感器获取物体温度数据(以最低有效位LSB表示)并将其转换为摄氏度°C。
该例子的过程也适用于获取环境温度数据。

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

代码如下所示。文章来源地址https://www.toymoban.com/news/detail-677345.html

/**
  * @brief  
  *
  * @param  add      视场内对象发出的红外辐射量(未补偿)
  * @param  val      设备ID.
  * @retval ret   		正常返回HAL_OK
  *
  */	
int16_t STHS34PF80_readObjTemp(uint8_t add)
{
	uint8_t rawData[2];  //STHS34PF80_TOBJECT_L->0x26
	sths34pf80_read_reg(add, STHS34PF80_TOBJECT_L, (uint8_t *)&rawData[0], 2);	

	return (int16_t)(((int16_t)rawData[1]) << 8 | rawData[0]);	
  }

4.5.2节描述了如何获取环境温度数据,并在哪些寄存器中这些数据可以被找到。
寄存器存储:环境温度数据被发送到TAMBIENT_H(29h)和TAMBIENT_L(28h)寄存器中。其中,TAMBIENT_H存储了环境温度值的最高有效字节(MSB),而TAMBIENT_L存储了最低有效字节(LSB)。
数据格式:通过拼接TAMBIENT_H和TAMBIENT_L,可以得到完整的环境温度输出数据。这个值被表示为一个16位的有符号二进制补码数字。
单位转换:每个环境温度输出样本可以通过一个灵敏度值(在这个例子里是100 LSB/°C)来转换成摄氏度。公式如下:

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

应用场景:环境温度数据代表了与设备热耦合的环境的实际温度。这些数据可用于校正由于与传感器热耦合的环境温度变化而导致的物体温度输出数据的变化(详见4.6节)。

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

代码如下所示。

/**
  * @brief  
  *
  * @param  add      环境温度数据
  * @param  val      设备ID.
  * @retval ret   		正常返回HAL_OK
  *
  */		
	
	
int16_t STHS34PF80_readAmbTemp(uint8_t add)
{
	uint8_t rawData[2];//STHS34PF80_TAMBIENT_L->0x28
	sths34pf80_read_reg(add, STHS34PF80_TAMBIENT_L, (uint8_t *)&rawData[0], 2);	

   return (int16_t)(((int16_t)rawData[1]) << 8 | rawData[0]);
}

补偿后的物体温度数据存储在TOBJ_COMP_L(38h)和TOBJ_COMP_H(39h)寄存器中。其中,TOBJ_COMP_H包含最高有效字节(MSB),TOBJ_COMP_L包含最低有效字节(LSB)。
需要注意的是,即使补偿算法处于活动状态,26h和27h寄存器中仍然包含原始物体温度数据。如果补偿没有激活,38h和39h寄存器会与26h和27h寄存器对齐。
补偿后的物体温度数据(以LSB为单位)与使用的光学系统的透射率成比例。您可以通过实际的灵敏度值来转换这些补偿后的数据,以获得相应的摄氏度值。不过,这些补偿后的数据并不实际代表视场内物体的温度。
如果启用了增益减小功能(见第4.7节),则不能启用嵌入式补偿算法。

基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据,单片机,传感器,stm32cube,tmos,STM32C011,STHS34PF80,人体检测,红外感应,stm32cubemx,嵌入式算法,原力计划

代码如下所示。

/**
  * @brief  					嵌入式智能数字算法产生的视场内物体发射的红外辐射量输出数据(已经经过环境温度补偿)
  *
  * @param  add      设备地址
  * @param  val      设备ID.
  * @retval ret   		正常返回HAL_OK
  *
  */		
int16_t STHS34PF80_readCompObjTemp(uint8_t add)
{
	uint8_t rawData[2];//STHS34PF80_TOBJ_COMP_L->0x38
	sths34pf80_read_reg(add, STHS34PF80_TOBJ_COMP_L, (uint8_t *)&rawData[0], 2);	

	return (int16_t)(((int16_t)rawData[1]) << 8 | rawData[0]);		
  }	
	

主程序

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
//		printf("PA7=%d",HAL_GPIO_ReadPin  ( GPIOA, GPIO_PIN_7));
//		if(HAL_GPIO_ReadPin  ( GPIOA, GPIO_PIN_7))
//		{
		
			status = STHS34PF80_getDataReadyStatus(STHS34PF80_ADDRESS);		
		
			if(FUNCTIONS) 
			{		
				funcstatus = STHS34PF80_getFuncStatus(STHS34PF80_ADDRESS);				
				if(funcstatus & 0x04) printf("(存在)Presence detected !\n");
				if(funcstatus & 0x02) printf("(运动)Motion detected !\n");
				if(funcstatus & 0x01) printf("(环境温度冲击)T Shock detected !\n");				
			}
		
			if(status & 0x04)   // when data ready		
			{
				Presence = STHS34PF80_readPresence(STHS34PF80_ADDRESS);//嵌入式智能数字算法产生的存在检测输出数据
				Motion =   STHS34PF80_readMotion(STHS34PF80_ADDRESS); // 嵌入式智能数字算法产生的运动检测输出数据
				AmbTemp =  STHS34PF80_readAmbTemp(STHS34PF80_ADDRESS);//环境温度数据
				ObjTemp =  STHS34PF80_readObjTemp(STHS34PF80_ADDRESS);//视场内对象发出的红外辐射量(未补偿)
				CompObjTemp =  STHS34PF80_readCompObjTemp(STHS34PF80_ADDRESS);//嵌入式智能数字算法产生的视场内物体发射的红外辐射量输出数据(已经经过环境温度补偿)				
				AmbShock = STHS34PF80_readAmbShock(STHS34PF80_ADDRESS);//嵌入式智能数字算法产生的环境冲击输出数据

				printf("(原始数据)Raw counts\n");
				printf("(视场内对象发出的红外辐射量(未补偿))STHS34PF80 ObjTemp = %d\n",ObjTemp);  
				printf("(视场内物体发射的红外辐射量输出(经过环境温度补偿))STHS34PF80 Compensated ObjTemp = %d\n",CompObjTemp);  				
				printf("(环境温度)STHS34PF80 AmbTemp = %d\n",AmbTemp);  
				printf("(存在检测)STHS34PF80 Presence = %d\n",Presence);  
				printf("(运动检测输出)STHS34PF80 Motion = %d\n",Motion);  
				printf("(环境冲击输出)STHS34PF80 AmbShock = %d\n",AmbShock);  

				printf("(环境温度)STHS34PF80 Ambient Temperature = %.2f\n",(float)(AmbTemp) / 100.0f); //环境温度数据
				printf("(对象温度)STHS34PF80 Object Temperature = %.2f\n",((float)(ObjTemp) / (float)(ObjSense) ) ); 
	
			}
		
//		}			
		
		
		HAL_Delay(1000);		
				
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

到了这里,关于基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【CubeMX配置STM32驱动超声波模块(HC-SR04)】

    一、CubeMX配置STM32 1、选择定时器 选择 输入捕获模式 预分频设置为71,向上计数,自动重装值65535 然后将名字改为 ECHO 2、配置TRIG口 这里的端口使用其它空闲的IO口是可以的,设置为输出模式,其它配置不需要改变,最主要的是 User Label 那儿,需要设置为 TRIG ,因为驱动函数里

    2024年02月02日
    浏览(43)
  • 基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲

    在步进电机控制过程中,为了实现精确的位置和速度控制,经常需要输出指定数量的脉冲。这就需要使用定时器功能来生成PWM脉冲信号。本文将详细介绍如何利用STM32CUBEMX配置定时器以输出指定数量的PWM脉冲。 定时器是STM32微控制器的一个重要功能模块,可用于生成各种定时

    2024年02月14日
    浏览(34)
  • STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕

    📌相关篇《【STM32CubeIDE】STM32F103硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕》 ✨驱动效果就不做演示了,和上面的相关篇一样,主要是为了方便使用MDK Keil开发的使用。所以花了点时间从上面的工程当中做了分离,重新使用STM32CubeMX配置一个方便二次开发移植使用和配置的工程。本

    2024年02月03日
    浏览(37)
  • 基于STM32的SYN6288语音播报模块驱动实验(代码开源)

    前言: 本文为手把手教学  SYN6288 语音播报模块的驱动实验,本教程的  MCU  采用 STM32F103ZET6 。通过  CubeMX  软件配置 UART 串口协议驱 SYN6288 模块进行规定的语音播报。考虑到  SYN6288 模块的集成化与智能化很高,所以该模块的使用是极其便利的。( 文末代码开源! ) 硬件

    2024年02月13日
    浏览(33)
  • 基于STM32的SYN6288语音播报模块驱动实验(代码开源)_syn6288语音模块

    SYN6288 中文语音合成芯片是北京宇音天下科技有限公司于2010年初推出的一款性/价比更高,效果更自然的一款中高端语音合成芯片。 SYN6288 通过异步串口( UART )通讯方式,接收待合成的文本数据,实现文本到语音(或TTS语音)的转换。 宇音天下于 2002 年最早研制出国内首款

    2024年04月25日
    浏览(53)
  • 【CubeMX配置STM32驱动MPU6050】

    一、使用CubeMX进行相关配置 1、配置OLED的IIC接口 OLED的具体使用方法我就不细说了,我前面的文章里面有讲OLED的,如果有需要可以去看看。 2、配置MPU6050的接口 我用MPU6050使用的是 软件IIC (其实是只找到软件IIC的驱动),所以我们只需要配置两个GPIO口就可以实现对MPU6050的控

    2024年02月12日
    浏览(36)
  • Hx711称重模块+STM32+CubeMX

    提示:以下是本篇文章正文内容,下面案例可供参考 传感器连接hx711,hx711连接STM32,如下图所示 1)数据线DT设置为Input 2)时钟线SCK设置为Output 打开串口并选择中断,其他配置保持不变 注:根据官方给出的程序写ReadCount,红色框程序要稍微改一下。将ADSK=1;与ADSK=0;看作一个数

    2024年02月01日
    浏览(29)
  • 【STM32+CUBEMX】TMC5160电机驱动简要配置

    TMC5160简介                 1.1、引脚图          1.2、关键引脚                1.2.1 模式选择引脚                  1.2.2 时钟和SPI引脚                   1.2.3 驱动使能引脚  2.SPI发送数据结构         发送到 TMC5160 的每个数据报由一个地

    2024年02月06日
    浏览(37)
  • STM32CubeMX ULN2003步进电机驱动

    一、28BYJ-48 步进电机  28BYJ-48是一款5线单极步进电机,运行电压为5V。 根据数据表,当28BYJ-48电机在全步模式下运行时,每步对应于11.25°的旋转。这意味着每转有32步 (360°/11.25° = 32)。 如上图所示,步距角=5.625°/64 意思就是每64个脉冲步进电机就会转5.625度,因此我们很容易得

    2024年01月18日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包