0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32CUBEMX驅動TMOS模塊STHS34PF80(2)----驅動STHS34PF80進行人體檢測

嵌入式單片機MCU開發(fā) ? 來源:嵌入式單片機MCU開發(fā) ? 作者:嵌入式單片機MCU開 ? 2023-12-01 15:29 ? 次閱讀

概述

STHS34PF80 是一款非冷卻、工廠校準的紅外運動和存在檢測傳感器,工作波長在 5 μm 至 20 μm 之間。STHS34PF80 傳感器設計用于測量視野內物體發(fā)出的紅外輻射量。該信息ASIC 進行數(shù)字處理,可以對其進行編程以監(jiān)控運動、存在或過熱狀況。
本章主要驅動STHS34PF80,進行人體檢測。

最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。
在這里插入圖片描述

樣品申請

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

視頻教程

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

完整代碼下載

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

參考Demo

https://github.com/STMicroelectronics/STMems_Standard_C_drivers/blob/master/sths34pf80_STdC/examples/sths34pf80_tmos_data_polling.c

引導

在設備上電后,它會執(zhí)行一個2.5毫秒的引導過程,將校準系數(shù)從嵌入式閃存下載到內部寄存器,并加載AVG_TRIM(10h)、CTRL0(17h)和SENS_DATA(1Dh)寄存器的默認內容。在引導時間內,設備的寄存器不可訪問。
引導完成后,設備會自動配置為電源關閉模式。
在上電后,可以通過將CTRL2(21h)寄存器的BOOT位設置為1,重新啟動引導過程,以重新加載上述寄存器的默認值。不需要切換設備電源線。
在重新啟動時間內,設備的寄存器不可訪問。重新啟動完成后,設備會自動配置為之前的操作模式,并且BOOT位會自動清除為0。

在這里插入圖片描述

溫度測量濾波方式

首先需要設置AVG_TRIM (10h) 寄存器用于配置溫度平均值濾波的參數(shù),以控制環(huán)境溫度和目標溫度測量的平滑度和穩(wěn)定性。在溫度測量中,可能會受到噪聲和干擾的影響,這可能導致短期內測量值的波動。通過應用平均值濾波,可以平滑這些波動,從而得到更加穩(wěn)定的溫度數(shù)據(jù)。AVG_TRIM 寄存器中的設置會決定平均值濾波的級別,從而影響濾波的時間常數(shù)以及平滑度。
這里默認參數(shù)如下

  1. 在AVG_TRIM(10h)寄存器中寫入02h // AVG_T = 8,AVG_TMOS = 32
  2. 在CTRL1(20h)寄存器中寫入07h // ODR = 15 Hz
    在這里插入圖片描述

AVG_T[1:0]: 這個設置位用于選擇環(huán)境溫度的平均值濾波樣本數(shù)。
AVG_TMOS[2:0]: 這個設置位用于選擇目標溫度的平均值濾波樣本數(shù)以及與之相關的噪聲水平。
在這里插入圖片描述

參考demo中將AVG_TMOS [2:0] 和AVG_T[1:0] 分為了2個函數(shù)進行操作。
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

修改后操作如下所示。

/**
  * @brief  Select number of averages for object temperature.[set]
  *
  * @param  ctx      read / write interface definitions
  * @param  val      AVG_TMOS_2, AVG_TMOS_8, AVG_TMOS_32, AVG_TMOS_128, AVG_TMOS_256, AVG_TMOS_512, AVG_TMOS_1024, AVG_TMOS_2048,
  * @retval          interface status (MANDATORY: return 0 - > no Error)
  *
  */
uint8_t sths34pf80_avg_tobject_num_set(uint8_t add, sths34pf80_avg_tobject_num_t val)
{
  sths34pf80_avg_trim_t avg_trim;
  int32_t ret;
  ret = sths34pf80_read_reg(add, STHS34PF80_AVG_TRIM, (uint8_t *)&avg_trim, 1);

  if (ret == HAL_OK)
  {
    avg_trim.avg_tmos = ((uint8_t)val & 0x7U);
    ret = sths34pf80_write_reg(add, STHS34PF80_AVG_TRIM, (uint8_t *)&avg_trim, 1);
  }

  return ret;
}
/**
  * @brief  Select number of averages for ambient temperature.[set]
  *
  * @param  ctx      read / write interface definitions
  * @param  val      AVG_T_8, AVG_T_4, AVG_T_2, AVG_T_1,
  * @retval          interface status (MANDATORY: return 0 - > no Error)
  *
  */
uint8_t sths34pf80_avg_tambient_num_set(uint8_t add, sths34pf80_avg_tambient_num_t val)
{
  sths34pf80_avg_trim_t avg_trim;
  int32_t ret;
  ret = sths34pf80_read_reg(add, STHS34PF80_AVG_TRIM, (uint8_t *)&avg_trim, 1);
  if (ret == HAL_OK)
  {
    avg_trim.avg_t = ((uint8_t)val & 0x3U);
    ret = sths34pf80_write_reg(add, STHS34PF80_AVG_TRIM, (uint8_t *)&avg_trim, 1);		
	}		


  return ret;
}

使用如下所示,這里設置參數(shù)為STHS34PF80_AVG_TMOS_32和STHS34PF80_AVG_T_8。

/* Set averages (AVG_TAMB = 8, AVG_TMOS = 32) */
  sths34pf80_avg_tobject_num_set(STHS34PF80_ADDRESS, STHS34PF80_AVG_TMOS_32);
  sths34pf80_avg_tambient_num_set(STHS34PF80_ADDRESS, STHS34PF80_AVG_T_8);

智能識別算法

STHS34PF80嵌入了智能數(shù)字算法,以支持以下三種檢測模式:
? 存在檢測
? 運動檢測
? 環(huán)境溫度沖擊檢測
這些算法分別使用不同的低通濾波器(LPF_P、LPF_M和LPF_A_T)。此外,存在和運動檢測算法使用另一個共同的低通濾波器(LPF_P_M)。這些濾波器用于生成中間信號(TPRESENCE、TMOTION和TAMB_SHOCK),可以用于對算法本身進行微調。這些濾波器的截止頻率值可以通過它們各自的位范圍進行配置,這些位范圍可以在LPF1(0Ch)和LPF2(0Dh)寄存器中找到,如下所示。
在這里插入圖片描述

寄存器LPF1 (0Ch)和LPF2 (0Dh)如下所示。

在這里插入圖片描述

案例中只是對濾波器進行了讀取以及打印。
在這里插入圖片描述

修改后如下所示。

/* read filters */
  sths34pf80_lpf_m_bandwidth_get(STHS34PF80_ADDRESS, &lpf_m);
  sths34pf80_lpf_p_bandwidth_get(STHS34PF80_ADDRESS, &lpf_p);
  sths34pf80_lpf_p_m_bandwidth_get(STHS34PF80_ADDRESS, &lpf_p_m);
  sths34pf80_lpf_a_t_bandwidth_get(STHS34PF80_ADDRESS, &lpf_a_t);

printf("lpf_m: %02d, lpf_p: %02d, lpf_p_m: %02d, lpf_a_t: %02drn", lpf_m, lpf_p, lpf_p_m, lpf_a_t);
	![在這里插入圖片描述](https://img-blog.csdnimg.cn/5321efc1d74b42098bac6a940073f89b.png)

使用塊數(shù)據(jù)更新(BDU)功能

如果讀取輸出數(shù)據(jù)的時機與數(shù)據(jù)準備信號不同步,強烈建議在CTRL1(20h)寄存器中將BDU(塊數(shù)據(jù)更新)位設置為1。
此功能可以避免讀取與不同采樣相關的寄存器值(輸出數(shù)據(jù)的最高和最低字節(jié))。
在這里插入圖片描述

案例也是設置了BDU。
在這里插入圖片描述

BDU在CTRL1 (20h)寄存器中。
在這里插入圖片描述

修改后的操作如下所示。

/* Set BDU */
  sths34pf80_block_data_update_set(STHS34PF80_ADDRESS, 1);

設置ODR速率

初始化完畢之后需要通過CTRL1(20h)寄存器中的ODR[3:0]位范圍選擇其中一種操作模式(連續(xù)模式),或者在CTRL2(21h)寄存器中將ONE_SHOT位設置為1(單次觸發(fā)模式)。
在這里插入圖片描述

當配置了寄存器LPF1 (0Ch)和LPF2 (0Dh) 的LPF_P、LPF_M和LPF_A_T、LPF_P_M濾波器之后,可以去設置ODR速率。
在這里插入圖片描述

這里設置速率為30HZ。

/* Set ODR */
  sths34pf80_tmos_odr_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_ODR_AT_30Hz);

狀態(tài)寄存器

初始化完畢之后,可以通過狀態(tài)寄存器STATUS (23h)獲取DRDY標志位。數(shù)據(jù)就緒信號由STATUS寄存器的DRDY位表示。當新的數(shù)據(jù)可用時,此位被設置為1,并在讀取FUNC_STATUS(25h)寄存器后被清除。
在這里插入圖片描述

主程序中會去獲取改狀態(tài)位,若為1,則代表數(shù)據(jù)已經(jīng)準備完畢,可以進行獲取和打印。
在這里插入圖片描述

FUNC_STATUS(25h)主要檢測三個標志位:PRES_FLAG、MOT_FLAG 和 TAMB_SHOCK_FLAG,這些標志位用于檢測不同類型的事件。
PRES_FLAG是存在檢測標志位。當存在檢測到人員存在時,此位變?yōu)?。
MOT_FLAG:運動檢測標志位。當檢測到運動時,此位變?yōu)?。
TAMB_SHOCK_FLAG:環(huán)境溫度沖擊檢測標志位。當檢測到環(huán)境溫度沖擊時,此位變?yōu)?。

在這里插入圖片描述

修改完畢主程序如下所示。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    sths34pf80_tmos_drdy_status_get(STHS34PF80_ADDRESS, &status);
    if (status.drdy)
    {
      sths34pf80_tmos_func_status_get(STHS34PF80_ADDRESS, &func_status);
			printf("-- >環(huán)境溫度沖擊檢測標志位 %d - 存在檢測標志位 %d - 運動檢測標志位 %drn",func_status.tamb_shock_flag, func_status.pres_flag, func_status.mot_flag);
   }
			HAL_Delay(1000);

    /* USER CODE END WHILE */

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

main.c

/* USER CODE BEGIN 2 */
  sths34pf80_lpf_bandwidth_t lpf_m, lpf_p, lpf_p_m, lpf_a_t;	
  sths34pf80_tmos_drdy_status_t status;	
  sths34pf80_tmos_func_status_t func_status;	
	
	
	
	
			HAL_Delay(200);	
	printf("123");
	uint8_t STHS34PF80_ID =STHS34PF80_getChipID(STHS34PF80_ADDRESS);
	printf("STHS34PF80_ID=0x%xn",STHS34PF80_ID);	
	if (STHS34PF80_ID != 0xD3)
    while(1);
/* Set averages (AVG_TAMB = 8, AVG_TMOS = 32) */
  sths34pf80_avg_tobject_num_set(STHS34PF80_ADDRESS, STHS34PF80_AVG_TMOS_2048);
  sths34pf80_avg_tambient_num_set(STHS34PF80_ADDRESS, STHS34PF80_AVG_T_8);

  /* read filters */
  sths34pf80_lpf_m_bandwidth_get(STHS34PF80_ADDRESS, &lpf_m);
  sths34pf80_lpf_p_bandwidth_get(STHS34PF80_ADDRESS, &lpf_p);
  sths34pf80_lpf_p_m_bandwidth_get(STHS34PF80_ADDRESS, &lpf_p_m);
  sths34pf80_lpf_a_t_bandwidth_get(STHS34PF80_ADDRESS, &lpf_a_t);

printf("lpf_m: %02d, lpf_p: %02d, lpf_p_m: %02d, lpf_a_t: %02drn", lpf_m, lpf_p, lpf_p_m, lpf_a_t);
	
	  /* Set BDU */
  sths34pf80_block_data_update_set(STHS34PF80_ADDRESS, 1);

  /* Set ODR */
  sths34pf80_tmos_odr_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_ODR_AT_1Hz);

    int32_t cnt = 0;
	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    sths34pf80_tmos_drdy_status_get(STHS34PF80_ADDRESS, &status);
    if (status.drdy)
    {
      sths34pf80_tmos_func_status_get(STHS34PF80_ADDRESS, &func_status);
			printf("-- >環(huán)境溫度沖擊檢測標志位 %d - 存在檢測標志位 %d - 運動檢測標志位 %drn",func_status.tamb_shock_flag, func_status.pres_flag, func_status.mot_flag);
   }
			HAL_Delay(1000);

    /* USER CODE END WHILE */

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2545

    文章

    50445

    瀏覽量

    751031
  • 模塊
    +關注

    關注

    7

    文章

    2655

    瀏覽量

    47292
  • 寄存器
    +關注

    關注

    31

    文章

    5294

    瀏覽量

    119814
  • 人體檢測
    +關注

    關注

    1

    文章

    16

    瀏覽量

    11163
收藏 人收藏

    評論

    相關推薦

    基于STM32CUBEMX驅動TMOS模塊STHS34PF80(1)----獲取ID

    STHS34PF80 是一款非冷卻、工廠校準的紅外運動和存在檢測傳感器,工作波長在 5 μm 至 20 μm 之間。
    的頭像 發(fā)表于 12-01 15:28 ?8069次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅動</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(1)----獲取ID

    基于STM32CUBEMX驅動TMOS模塊STHS34PF80(3)----修改檢測閾值

    用于配置和設置 STHS34PF80 傳感器的一些參數(shù),以便進行存在檢測和運動檢測。
    的頭像 發(fā)表于 12-01 15:30 ?655次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅動</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(3)----修改<b class='flag-5'>檢測</b>閾值

    基于STM32CUBEMX驅動TMOS模塊STHS34PF80(4)----中斷獲取信號

    SHS34PF80的數(shù)據(jù)準備信號提供了一種機制,允許設備在新的測量數(shù)據(jù)可讀取時通知系統(tǒng),并觸發(fā)同步操作,通過正確配置相關寄存器,可以確保系統(tǒng)及時捕獲和處理來自設備的新數(shù)據(jù),從而提高整體性能和響應能力。
    的頭像 發(fā)表于 12-01 15:31 ?6223次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅動</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(4)----中斷獲取信號

    基于STM32CUBEMX驅動TMOS模塊STHS34PF80(5)----配置嵌入式函數(shù)

    STHS34PF80傳感器項目種修改 Arduino 腳本,重新移植到STM32的MCU中。
    的頭像 發(fā)表于 12-01 15:33 ?722次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅動</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(5)----配置嵌入式函數(shù)

    基于STM32CUBEMX驅動TMOS模塊STHS34PF80(6)----獲取狀態(tài)數(shù)據(jù)

    STHS34PF80傳感器項目種修改 Arduino 腳本,重新移植到STM32的MCU中。 該項目基于STHS34PF80 IR溫度傳感器,能夠檢測環(huán)境和物體溫度,并且在最大4米范
    的頭像 發(fā)表于 12-01 15:39 ?592次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅動</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(6)----獲取狀態(tài)數(shù)據(jù)

    STHS34PF80高靈敏度紅外感應器(2)----InfraredPD存在感應檢測

    InfraredPD 主要作用是通過與 STHS34PF80 紅外傳感器配合,提供對存在感應和運動檢測的支持,同時對傳感器獲取的物體溫度數(shù)據(jù)進行環(huán)境溫度變化補償。InfraredPD庫通過
    的頭像 發(fā)表于 10-14 11:10 ?743次閱讀
    <b class='flag-5'>STHS34PF80</b>高靈敏度紅外感應器(<b class='flag-5'>2</b>)----InfraredPD存在感應<b class='flag-5'>檢測</b>

    通過STEVAL-MKI109V3在unico上識別不到STHS34PF80是為什么?怎么處理?

    TMOS測試:通過STEVAL-MKI109V3在unico上識別不到STHS34PF80
    發(fā)表于 03-26 08:31

    意法半導體發(fā)布新型人體存在和移動檢測芯片

    ????????意法半導體發(fā)布新型人體存在和移動檢測芯片。STHS34PF80是一款帶有微加工熱敏晶體管(TMOS)的高集成度、超低功耗的紅外(IR)傳感器,可取代傳統(tǒng)的被動紅外(PI
    的頭像 發(fā)表于 07-28 15:13 ?848次閱讀

    意法半導發(fā)布了新型人體存在和移動檢測芯片:STHS34PF80

    近期,意法半導發(fā)布了新型人體存在和移動檢測芯片:STHS34PF80,它是一款帶有微加工熱敏晶體管(TMOS)的高集成度、超低功耗的紅外(IR)傳感器,可取代傳統(tǒng)的被動紅外(PIR)傳
    的頭像 發(fā)表于 07-30 09:47 ?1653次閱讀

    ST TMOS熱敏紅外傳感器: 精準檢測人員存在和移動

    意法半導發(fā)布新型人體存在和移動檢測芯片。STHS34PF80是一款帶有微加工熱敏晶體管(TMOS)的高集成度、超低功耗的紅外(IR)傳感器,可取代傳統(tǒng)的被動紅外(PIR)傳感技術,提升
    發(fā)表于 08-08 14:48 ?578次閱讀

    ST最新一代高靈敏度 STHS34PF80人體感應檢測方案

    ST TMOS傳感器在人體檢測方面的優(yōu)勢,給智能產(chǎn)品帶來了那些創(chuàng)新和解決了現(xiàn)有產(chǎn)品的哪些技術痛點,以及它的技術原理和應用。 TMOS傳感器是基于ST專有的MEMS技術,用于測量5~20um紅外波長
    的頭像 發(fā)表于 12-06 15:33 ?1110次閱讀
    ST最新一代高靈敏度 <b class='flag-5'>STHS34PF80</b><b class='flag-5'>人體</b>感應<b class='flag-5'>檢測</b>方案

    STHS34PF80人體存在傳感器(1)----獲取人體存在狀態(tài)

    STHS34PF80是一款高性能的紅外(IR)傳感器,特別適用于檢測存在感和運動。其主要特點是高靈敏度,能在沒有透鏡的情況下探測到4米遠的物體(尺寸為70 x 25厘米),并配有集成的硅紅外濾波器
    的頭像 發(fā)表于 01-09 15:51 ?552次閱讀
    <b class='flag-5'>STHS34PF80</b><b class='flag-5'>人體</b>存在傳感器(1)----獲取<b class='flag-5'>人體</b>存在狀態(tài)

    e2studio開發(fā)STHS34PF80人體存在傳感器(1)----獲取人體存在狀態(tài)

    STHS34PF80是一款高性能的紅外(IR)傳感器,特別適用于檢測存在感和運動。其主要特點是高靈敏度,能在沒有透鏡的情況下探測到4米遠的物體(尺寸為70 x 25厘米),并配有集成的硅紅外濾波器
    的頭像 發(fā)表于 01-09 16:00 ?537次閱讀
    e<b class='flag-5'>2</b>studio開發(fā)<b class='flag-5'>STHS34PF80</b><b class='flag-5'>人體</b>存在傳感器(1)----獲取<b class='flag-5'>人體</b>存在狀態(tài)

    基于ST 紅外傳感器STHS34PF80 搭配菲涅爾透鏡針對投影機應用方案

    STHS34PF80 是一款紅外線感測器,可用于偵測靜止和移動物體的存及超溫條件。它采用獨特的 TMOS 技術測量物體的紅外線輻射,當物體位于視野內時檢測其存在或移動。
    的頭像 發(fā)表于 01-30 14:16 ?827次閱讀
    基于ST 紅外傳感器<b class='flag-5'>STHS34PF80</b> 搭配菲涅爾透鏡針對投影機應用方案

    STHS34PF80高靈敏度紅外感應器(1)----獲取人體存在狀態(tài)

    STHS34PF80是一款高性能的紅外(IR)傳感器,特別適用于檢測存在感和運動。其主要特點是高靈敏度,能在沒有透鏡的情況下探測到4米遠的物體(尺寸為70 x 25厘米),并配有集成的硅紅外濾波器
    的頭像 發(fā)表于 10-14 10:36 ?233次閱讀
    <b class='flag-5'>STHS34PF80</b>高靈敏度紅外感應器(1)----獲取<b class='flag-5'>人體</b>存在狀態(tài)