概述
檢測活動(dòng)和靜止狀態(tài)主要用途是在嵌入式應用中實(shí)時(shí)監控加速度計的活動(dòng)狀態(tài),例如在可穿戴設備、智能手機或安全系統中檢測用戶(hù)的動(dòng)作或設備的位置變化。通過(guò)設置不同的閾值和時(shí)長(cháng),可以精確地確定何時(shí)設備處于靜止狀態(tài),何時(shí)發(fā)生了活動(dòng),從而觸發(fā)相應的操作或警報。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。
視頻教學(xué)
https://www.bilibili.com/video/BV1yj411j7RL/
樣品申請
https://www.wjx.top/vm/OhcKxJk.aspx#
源碼下載
https://download.csdn.net/download/qq_24312945/88593249
生成STM32CUBEMX
用STM32CUBEMX生成例程,這里使用MCU為STM32WB55RG。
配置時(shí)鐘樹(shù),配置時(shí)鐘為32M。
串口配置
查看原理圖,PB6和PB7設置為開(kāi)發(fā)板的串口。
配置串口。
IIC配置
配置IIC為快速模式,速度為400k。
CS和SA0設置
串口重定向
打開(kāi)魔術(shù)棒,勾選MicroLIB
在main.c中,添加頭文件,若不添加會(huì )出現 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 */
參考程序
[https://github.com/STMicroelectronics/lis2dw12-pid]
初始換管腳
由于需要向LIS2DW12_I2C_ADD_H寫(xiě)入以及為IIC模式。
所以使能CS為高電平,配置為IIC模式。
配置SA0為高電平。
stmdev_ctx_t dev_ctx;
lis2dw12_reg_t int_route;
dev_ctx.write_reg = platform_write;
dev_ctx.read_reg = platform_read;
dev_ctx.handle = &SENSOR_BUS;
HAL_GPIO_WritePin(GPIOC, CS_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, SA0_Pin, GPIO_PIN_SET);
獲取ID
我們可以向WHO_AM_I (0Fh)獲取固定值,判斷是否為0x44。
lis2dw12_device_id_get為獲取函數。
對應的獲取ID驅動(dòng)程序,如下所示。
/* Wait sensor boot time */
platform_delay(BOOT_TIME);
/* Check device ID */
lis2dw12_device_id_get(&dev_ctx, &whoamI);
printf("LIS2DW12_ID=0x%x,whoamI=0x%x",LIS2DW12_ID,whoamI);
if (whoamI != LIS2DW12_ID)
while (1) {
/* manage here device not found */
}
復位操作
可以向CTRL2 (21h)的SOFT_RESET寄存器寫(xiě)入1進(jìn)行復位。
lis2dw12_reset_set為重置函數。
對應的驅動(dòng)程序,如下所示。
/* Restore default configuration */
lis2dw12_reset_set(&dev_ctx, PROPERTY_ENABLE);
do {
lis2dw12_reset_get(&dev_ctx, &rst);
} while (rst);
設置傳感器的量程
FS[1:0] - 全量程選擇:這兩個(gè)位用于設置傳感器的量程。量程決定了傳感器可以測量的最大加速度值。例如,量程可以設置為±2g、±4g、±8g或±16g。這允許用戶(hù)根據應用的特定需求調整傳感器的靈敏度。
對應的驅動(dòng)程序,如下所示。
/* Set full scale */
lis2dw12_full_scale_set(&dev_ctx, LIS2DW12_2g);
配置過(guò)濾器鏈
lis2dw12_filter_path_set(&dev_ctx, LIS2DW12_LPF_ON_OUT);:設置加速度計輸出的過(guò)濾器路徑。這里選擇了輸出上的低通濾波器(LPF),用于去除高頻噪聲。
lis2dw12_filter_bandwidth_set:設置加速度計的濾波帶寬,LIS2DW12_ODR_DIV_4 表示濾波器的截止頻率為輸出數據率(ODR)的四分之一。
配置電源模式
lis2dw12_power_mode_set(&dev_ctx, LIS2DW12_CONT_LOW_PWR_12bit);配置電源模式。這里設置為連續低功耗模式,且以 12 位分辨率運行。
設置加速度計的喚醒持續時(shí)間
lis2dw12_wkup_dur_set:設置加速度計的喚醒持續時(shí)間,此處設置為“2”,具體的時(shí)間取決于輸出數據率(ODR)的倒數。
設置進(jìn)入睡眠模式前的持續時(shí)間
lis2dw12_act_sleep_dur_set:設置進(jìn)入睡眠模式前的持續時(shí)間,單位為輸出數據率(ODR)的512分之一秒。
設置喚醒加速度計所需的活動(dòng)閾值
如果設備由于靜止或處于靜止狀態(tài)而進(jìn)入睡眠模式,并且隨后它檢測到超過(guò)WAKE_UP_THS (34h)中設置的閾值的運動(dòng),它將從靜止狀態(tài)過(guò)渡到喚醒狀態(tài)。這意味著(zhù)它將重新開(kāi)始更積極地監測運動(dòng)。
lis2dw12_wkup_threshold_set:設置喚醒加速度計所需的活動(dòng)閾值,這里設置為“2”,每個(gè) LSB(最低有效位)等于全量程的1/64。
配置喚醒中斷函數
lis2dw12_wkup_feed_data_set:配置喚醒中斷函數所使用的數據類(lèi)型?;顒?dòng)/靜止功能可以使用高通濾波或偏移輸出來(lái)確定設備的狀態(tài)。這可以通過(guò)CTRL7 (3Fh)中的USR_OFF_ON_OUT位來(lái)配置。
/* Data sent to wake-up interrupt function */
lis2dw12_wkup_feed_data_set(&dev_ctx, LIS2DW12_HP_FEED);
加速度計檢測活動(dòng)或靜止的模式
lis2dw12_act_mode_set:設置加速度計檢測活動(dòng)或靜止的模式,LIS2DW12_DETECT_ACT_INACT 用于配置設備以檢測活動(dòng)或靜止狀態(tài)。
這些檢測功能的閾值和持續時(shí)間可以通過(guò)兩個(gè)控制寄存器進(jìn)行配置:
WAKE_UP_THS (34h) 用于設置喚醒的閾值水平。
WAKE_UP_DUR (35h) 用于設置喚醒和靜止狀態(tài)的持續時(shí)間。
在WAKE_UP_THS (34h)中設置SLEEP_ON位以啟用靜止狀態(tài)檢測。
/* Config activity / inactivity or stationary / motion detection */
lis2dw12_act_mode_set(&dev_ctx, LIS2DW12_DETECT_ACT_INACT);
啟用喚醒中斷
lis2dw12_pin_int1_route_get 和 lis2dw12_pin_int1_route_set:這兩個(gè)函數配合使用來(lái)獲取和設置中斷路由配置。首先獲取當前的中斷路由配置,然后啟用喚醒中斷(int1_wu),最后將配置寫(xiě)回加速度計。
/* Enable activity detection interrupt */
lis2dw12_pin_int1_route_get(&dev_ctx, &int_route.ctrl4_int1_pad_ctrl);
int_route.ctrl4_int1_pad_ctrl.int1_wu = PROPERTY_ENABLE;
lis2dw12_pin_int1_route_set(&dev_ctx, &int_route.ctrl4_int1_pad_ctrl);
設置輸出數據速率
設置加速度計的數據輸出速率,LIS2DW12_XL_ODR_200Hz 表示每秒輸出200個(gè)數據點(diǎn)。
/* Set Output Data Rate */
lis2dw12_data_rate_set(&dev_ctx, LIS2DW12_XL_ODR_200Hz);
檢測活動(dòng)狀態(tài)
可以不斷地檢查 LIS2DW12 加速度計的狀態(tài),以確定是否檢測到活動(dòng)或靜止(無(wú)活動(dòng))事件。
sleep_state_ia 位,如果該位被設置(通常表示檢測到靜止狀態(tài))。
wu_ia 位,如果該位被設置(通常表示檢測到活動(dòng)狀態(tài))。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
lis2dw12_all_sources_t all_source;
/* Read status register */
lis2dw12_all_sources_get(&dev_ctx, &all_source);
/* Check if Activity/Inactivity events */
if (all_source.wake_up_src.sleep_state_ia)
{
printf("Inactivity Detectedrn");
}
if (all_source.wake_up_src.wu_ia) {
printf("Activity Detectedrn");
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
演示
審核編輯:湯梓紅
-
mems
+關(guān)注
關(guān)注
128文章
3774瀏覽量
189311 -
加速度計
+關(guān)注
關(guān)注
6文章
679瀏覽量
45548 -
三軸加速度計
+關(guān)注
關(guān)注
1文章
23瀏覽量
13293 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
269瀏覽量
14505
發(fā)布評論請先 登錄
相關(guān)推薦
e2studio開(kāi)發(fā)三軸加速度計LIS2DW12(3)----檢測活動(dòng)和靜止狀態(tài)
![e2studio<b class='flag-5'>開(kāi)發(fā)</b>三軸<b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(3)----<b class='flag-5'>檢測</b><b class='flag-5'>活動(dòng)</b><b class='flag-5'>和靜止</b><b class='flag-5'>狀態(tài)</b>](https://file1.elecfans.com/web2/M00/BB/B7/wKgZomWdATmALKAuAAwfgh199Hs054.png)
e2studio開(kāi)發(fā)三軸加速度計LIS2DW12(4)----測量?jì)A斜度
![e2studio<b class='flag-5'>開(kāi)發(fā)</b>三軸<b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(4)----測量?jì)A斜度](https://file1.elecfans.com/web2/M00/BB/B7/wKgZomWdATmALKAuAAwfgh199Hs054.png)
兩軸加速度計和三軸加速度計的使用區別?
MSP430F5508對LIS2DH12三軸加速度計的驅動(dòng)設計
請問(wèn)兩軸加速度計和三軸加速度計的使用區別是什么?
LIS2DW12如何保留引腳功能?
LIS2DW12定向位問(wèn)題求解
是否可以使用LIS2DW12加速度計進(jìn)行傾斜角度檢測呢?
關(guān)于LIS2HH12TR讀加速度計的問(wèn)題求解
LIS2DW12相關(guān)資料分享
LIS2DW12的應用筆記
用于汽車(chē)應用的AIS2DW12超低功耗3軸加速度計
LIS2DW12 3D數字加速度計應用筆記
![<b class='flag-5'>LIS2DW12</b> 3D數字<b class='flag-5'>加速度計</b>應用筆記](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
e2studio開(kāi)發(fā)三軸加速度計LIS2DW12(1)----輪詢(xún)獲取加速度數據
![e2studio<b class='flag-5'>開(kāi)發(fā)</b>三軸<b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(1)----輪詢(xún)獲取<b class='flag-5'>加速度</b>數據](https://file1.elecfans.com/web2/M00/BB/B7/wKgZomWdATmALKAuAAwfgh199Hs054.png)
三軸加速度計LIS2DW12開(kāi)發(fā)(4)----測量?jì)A斜度
![三軸<b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b><b class='flag-5'>開(kāi)發(fā)</b>(4)----測量?jì)A斜度](https://file1.elecfans.com/web2/M00/B6/5B/wKgaomV_r-iAepqCAAWLtF9tlFw290.png)
評論