概述
STHS34PF80 是一款非冷卻、工廠校準(zhǔn)的紅外運(yùn)動(dòng)和存在檢測(cè)傳感器,工作波長(zhǎng)在 5 μm 至 20 μm 之間。STHS34PF80 傳感器設(shè)計(jì)用于測(cè)量視野內(nèi)物體發(fā)出的紅外輻射量。該信息由 ASIC 進(jìn)行數(shù)字處理,可以對(duì)其進(jìn)行編程以監(jiān)控運(yùn)動(dòng)、存在或過熱狀況。
本章主要驅(qū)動(dòng)STHS34PF80,進(jìn)行人體檢測(cè)。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請(qǐng):615061293 。
樣品申請(qǐng)
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
引導(dǎo)
在設(shè)備上電后,它會(huì)執(zhí)行一個(gè)2.5毫秒的引導(dǎo)過程,將校準(zhǔn)系數(shù)從嵌入式閃存下載到內(nèi)部寄存器,并加載AVG_TRIM(10h)、CTRL0(17h)和SENS_DATA(1Dh)寄存器的默認(rèn)內(nèi)容。在引導(dǎo)時(shí)間內(nèi),設(shè)備的寄存器不可訪問。
引導(dǎo)完成后,設(shè)備會(huì)自動(dòng)配置為電源關(guān)閉模式。
在上電后,可以通過將CTRL2(21h)寄存器的BOOT位設(shè)置為1,重新啟動(dòng)引導(dǎo)過程,以重新加載上述寄存器的默認(rèn)值。不需要切換設(shè)備電源線。
在重新啟動(dòng)時(shí)間內(nèi),設(shè)備的寄存器不可訪問。重新啟動(dòng)完成后,設(shè)備會(huì)自動(dòng)配置為之前的操作模式,并且BOOT位會(huì)自動(dòng)清除為0。
溫度測(cè)量濾波方式
首先需要設(shè)置AVG_TRIM (10h) 寄存器用于配置溫度平均值濾波的參數(shù),以控制環(huán)境溫度和目標(biāo)溫度測(cè)量的平滑度和穩(wěn)定性。在溫度測(cè)量中,可能會(huì)受到噪聲和干擾的影響,這可能導(dǎo)致短期內(nèi)測(cè)量值的波動(dòng)。通過應(yīng)用平均值濾波,可以平滑這些波動(dòng),從而得到更加穩(wěn)定的溫度數(shù)據(jù)。AVG_TRIM 寄存器中的設(shè)置會(huì)決定平均值濾波的級(jí)別,從而影響濾波的時(shí)間常數(shù)以及平滑度。
這里默認(rèn)參數(shù)如下
- 在AVG_TRIM(10h)寄存器中寫入02h // AVG_T = 8,AVG_TMOS = 32
- 在CTRL1(20h)寄存器中寫入07h // ODR = 15 Hz
AVG_T[1:0]: 這個(gè)設(shè)置位用于選擇環(huán)境溫度的平均值濾波樣本數(shù)。
AVG_TMOS[2:0]: 這個(gè)設(shè)置位用于選擇目標(biāo)溫度的平均值濾波樣本數(shù)以及與之相關(guān)的噪聲水平。
參考demo中將AVG_TMOS [2:0] 和AVG_T[1:0] 分為了2個(gè)函數(shù)進(jìn)行操作。
修改后操作如下所示。
/**
* @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è)置參數(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);
智能識(shí)別算法
STHS34PF80嵌入了智能數(shù)字算法,以支持以下三種檢測(cè)模式:
? 存在檢測(cè)
? 運(yùn)動(dòng)檢測(cè)
? 環(huán)境溫度沖擊檢測(cè)
這些算法分別使用不同的低通濾波器(LPF_P、LPF_M和LPF_A_T)。此外,存在和運(yùn)動(dòng)檢測(cè)算法使用另一個(gè)共同的低通濾波器(LPF_P_M)。這些濾波器用于生成中間信號(hào)(TPRESENCE、TMOTION和TAMB_SHOCK),可以用于對(duì)算法本身進(jìn)行微調(diào)。這些濾波器的截止頻率值可以通過它們各自的位范圍進(jìn)行配置,這些位范圍可以在LPF1(0Ch)和LPF2(0Dh)寄存器中找到,如下所示。
寄存器LPF1 (0Ch)和LPF2 (0Dh)如下所示。
案例中只是對(duì)濾波器進(jìn)行了讀取以及打印。
修改后如下所示。
/* 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ī)與數(shù)據(jù)準(zhǔn)備信號(hào)不同步,強(qiáng)烈建議在CTRL1(20h)寄存器中將BDU(塊數(shù)據(jù)更新)位設(shè)置為1。
此功能可以避免讀取與不同采樣相關(guān)的寄存器值(輸出數(shù)據(jù)的最高和最低字節(jié))。
案例也是設(shè)置了BDU。
BDU在CTRL1 (20h)寄存器中。
修改后的操作如下所示。
/* Set BDU */
sths34pf80_block_data_update_set(STHS34PF80_ADDRESS, 1);
設(shè)置ODR速率
初始化完畢之后需要通過CTRL1(20h)寄存器中的ODR[3:0]位范圍選擇其中一種操作模式(連續(xù)模式),或者在CTRL2(21h)寄存器中將ONE_SHOT位設(shè)置為1(單次觸發(fā)模式)。
當(dāng)配置了寄存器LPF1 (0Ch)和LPF2 (0Dh) 的LPF_P、LPF_M和LPF_A_T、LPF_P_M濾波器之后,可以去設(shè)置ODR速率。
這里設(shè)置速率為30HZ。
/* Set ODR */
sths34pf80_tmos_odr_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_ODR_AT_30Hz);
狀態(tài)寄存器
初始化完畢之后,可以通過狀態(tài)寄存器STATUS (23h)獲取DRDY標(biāo)志位。數(shù)據(jù)就緒信號(hào)由STATUS寄存器的DRDY位表示。當(dāng)新的數(shù)據(jù)可用時(shí),此位被設(shè)置為1,并在讀取FUNC_STATUS(25h)寄存器后被清除。
主程序中會(huì)去獲取改狀態(tài)位,若為1,則代表數(shù)據(jù)已經(jīng)準(zhǔn)備完畢,可以進(jìn)行獲取和打印。
FUNC_STATUS(25h)主要檢測(cè)三個(gè)標(biāo)志位:PRES_FLAG、MOT_FLAG 和 TAMB_SHOCK_FLAG,這些標(biāo)志位用于檢測(cè)不同類型的事件。
PRES_FLAG是存在檢測(cè)標(biāo)志位。當(dāng)存在檢測(cè)到人員存在時(shí),此位變?yōu)?。
MOT_FLAG:運(yùn)動(dòng)檢測(cè)標(biāo)志位。當(dāng)檢測(cè)到運(yùn)動(dòng)時(shí),此位變?yōu)?。
TAMB_SHOCK_FLAG:環(huán)境溫度沖擊檢測(cè)標(biāo)志位。當(dāng)檢測(cè)到環(huán)境溫度沖擊時(shí),此位變?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)境溫度沖擊檢測(cè)標(biāo)志位 %d - 存在檢測(cè)標(biāo)志位 %d - 運(yùn)動(dòng)檢測(cè)標(biāo)志位 %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)境溫度沖擊檢測(cè)標(biāo)志位 %d - 存在檢測(cè)標(biāo)志位 %d - 運(yùn)動(dòng)檢測(cè)標(biāo)志位 %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 */
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2553文章
51467瀏覽量
756977 -
模塊
+關(guān)注
關(guān)注
7文章
2736瀏覽量
47797 -
寄存器
+關(guān)注
關(guān)注
31文章
5372瀏覽量
121301 -
人體檢測(cè)
+關(guān)注
關(guān)注
1文章
16瀏覽量
11226
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(1)----獲取ID
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(1)----獲取ID](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(3)----修改檢測(cè)閾值
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(3)----修改<b class='flag-5'>檢測(cè)</b>閾值](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(4)----中斷獲取信號(hào)
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(4)----中斷獲取信號(hào)](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(5)----配置嵌入式函數(shù)
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(5)----配置嵌入式函數(shù)](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(6)----獲取狀態(tài)數(shù)據(jù)
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(6)----獲取狀態(tài)數(shù)據(jù)](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
STHS34PF80高靈敏度紅外感應(yīng)器(2)----InfraredPD存在感應(yīng)檢測(cè)
![<b class='flag-5'>STHS34PF80</b>高靈敏度紅外感應(yīng)器(<b class='flag-5'>2</b>)----InfraredPD存在感應(yīng)<b class='flag-5'>檢測(cè)</b>](https://file1.elecfans.com/web2/M00/09/67/wKgZomcMgqyAQasOAAg3RW0akGo723.png)
通過STEVAL-MKI109V3在unico上識(shí)別不到STHS34PF80是為什么?怎么處理?
意法半導(dǎo)體發(fā)布新型人體存在和移動(dòng)檢測(cè)芯片
意法半導(dǎo)發(fā)布了新型人體存在和移動(dòng)檢測(cè)芯片:STHS34PF80
ST TMOS熱敏紅外傳感器: 精準(zhǔn)檢測(cè)人員存在和移動(dòng)
ST最新一代高靈敏度 STHS34PF80人體感應(yīng)檢測(cè)方案
![ST最新一代高靈敏度 <b class='flag-5'>STHS34PF80</b><b class='flag-5'>人體</b>感應(yīng)<b class='flag-5'>檢測(cè)</b>方案](https://file.elecfans.com/web2/M00/81/61/pYYBAGOO8CCAJJCOAADNiKkoHt8608.png)
STHS34PF80人體存在傳感器(1)----獲取人體存在狀態(tài)
![<b class='flag-5'>STHS34PF80</b><b class='flag-5'>人體</b>存在傳感器(1)----獲取<b class='flag-5'>人體</b>存在狀態(tài)](https://file1.elecfans.com/web2/M00/BC/9E/wKgaomWc-seAG2mSAAXTNaJZ804747.png)
e2studio開發(fā)STHS34PF80人體存在傳感器(1)----獲取人體存在狀態(tài)
![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)](https://file1.elecfans.com/web2/M00/BC/9E/wKgaomWc-seAG2mSAAXTNaJZ804747.png)
基于ST 紅外傳感器STHS34PF80 搭配菲涅爾透鏡針對(duì)投影機(jī)應(yīng)用方案
![基于ST 紅外傳感器<b class='flag-5'>STHS34PF80</b> 搭配菲涅爾透鏡針對(duì)投影機(jī)應(yīng)用方案](https://file1.elecfans.com/web2/M00/BF/D8/wKgaomW4lEOAMW3eAACv-pfXAFA539.png)
STHS34PF80高靈敏度紅外感應(yīng)器(1)----獲取人體存在狀態(tài)
![<b class='flag-5'>STHS34PF80</b>高靈敏度紅外感應(yīng)器(1)----獲取<b class='flag-5'>人體</b>存在狀態(tài)](https://file1.elecfans.com/web2/M00/BC/9E/wKgaomWc-seAG2mSAAXTNaJZ804747.png)
評(píng)論