一:IIS3DWB树手册
IIS3DWB是一款集成系统,内置一款具备3轴数字振动传感器的产品,该传感器在超宽且平坦的频率范围内具有低噪声特性。其宽频带、低噪声、非常稳定且可重复的灵敏度,以及能够在较广温度范围内运行(最高可达+105%C)的能力,使得该设备特别适用于工业应用中的振动监测。
该器件能够以较低的功耗实现高性能,同时具备数字输出以及诸如FIFO和中断等嵌入式数字功能,这些特性使其成为适用于电池供电的工业无线传感器节点的理想之选
IIS3DWB具备可选择的满量程加速度范围,分别为+2/+4/+8/+16g,并能够测量高达6kHz的加速度,输出数据速率为26.7kHz。该设备内嵌有3kB的先进先出(FIFO)缓冲区,旨在避免数据丢失并限制主机处理器的干预。
二:软件代码:
2.1 初始化过程:
stmdev_ctx_t dev_ctx;
/* Initialize mems driver interface */
dev_ctx.write_reg = platform_write;
dev_ctx.read_reg = platform_read;
dev_ctx.mdelay = platform_delay;
dev_ctx.handle = &SENSOR_BUS;
/* Init test platform */
platform_init();
/* Wait sensor boot time */
platform_delay(BOOT_TIME);
HAL_Delay(100);
/* Check device ID */
iis3dwb_device_id_get(&dev_ctx, &whoamI);
if (whoamI != IIS3DWB_ID)
while (1);
/* Restore default configuration */
iis3dwb_reset_set(&dev_ctx, PROPERTY_ENABLE);
do {
iis3dwb_reset_get(&dev_ctx, &rst);
} while (rst);
/* Enable Block Data Update */
iis3dwb_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
/* Set Output Data Rate */
iis3dwb_xl_data_rate_set(&dev_ctx, IIS3DWB_XL_ODR_26k7Hz);
/* Set full scale */
iis3dwb_xl_full_scale_set(&dev_ctx, IIS3DWB_2g);
/* Configure filtering chain(No aux interface)
* Accelerometer low pass filter path
*/
iis3dwb_xl_filt_path_on_out_set(&dev_ctx, IIS3DWB_LP_ODR_DIV_100);
2.2 数据处理
uint8_t reg;
HAL_Delay(500);
/* Read output only if new xl value is available */
iis3dwb_xl_flag_data_ready_get(&dev_ctx, ®);
if (reg) {
/* Read acceleration field data */
memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
iis3dwb_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
acceleration_mg[0] =
iis3dwb_from_fs2g_to_mg(data_raw_acceleration[0]);
acceleration_mg[1] =
iis3dwb_from_fs2g_to_mg(data_raw_acceleration[1]);
acceleration_mg[2] =
iis3dwb_from_fs2g_to_mg(data_raw_acceleration[2]);
snprintf((char *)tx_buffer, sizeof(tx_buffer),
"ST-IIS3DWB:Acceleration [mg]:%4.2f\t%4.2f\t%4.2f\r\n",
acceleration_mg[0], acceleration_mg[1], acceleration_mg[2]);
tx_com(tx_buffer, strlen((char const *)tx_buffer));
}
HAL_Delay(500);
iis3dwb_temp_flag_data_ready_get(&dev_ctx, ®);
if (reg) {
/* Read temperature data */
memset(&data_raw_temperature, 0x00, sizeof(int16_t));
iis3dwb_temperature_raw_get(&dev_ctx, &data_raw_temperature);
temperature_degC = iis3dwb_from_lsb_to_celsius(data_raw_temperature);
snprintf((char *)tx_buffer, sizeof(tx_buffer),
"ST-IIS3DWB:Temperature [degC]:%6.2f\r\n", temperature_degC);
tx_com(tx_buffer, strlen((char const *)tx_buffer));
}
三:测试截图:

|