这两天测试了一下板载的IIS2DH加速度传感器,这是一款低功耗的3轴加速度计,低功耗时能达到2uA,在工业领域广泛应用。从原理图上看,也是连接了SPI3接口,如图1所示:
图1
除了INT2和CS引脚需要重新配置,其他的配置和上一篇是相同的,在CubeMx中很方便重新建立工程文件。想着测试应该是很顺利的,但是能读Device ID,不能读取数据,一度不知道什么原因。隔了一天发现,是CS引脚在程序中搞错了,很多问题往往都是粗心大意导致的。来看软件,初始定义还是参考官方的例程,库也是使用官方的,这样测试比较节省时间。
初始化如下:
- dev_ctx .write_reg = platform_write ;
- dev_ctx .read_reg = platform_read ;
- dev_ctx .handle = &hspi3 ;
- HAL_Delay(10);
-
- // IIS2DH_ReadID(&Obj ,&whoamI);
- iis2dh_device_id_get(&dev_ctx, &whoamI);
- //
- // IIS2DH_Init(&Obj);
- iis2dh_block_data_update_set(&dev_ctx , PROPERTY_ENABLE);
- /* Set Output Data Rate to 1Hz */
- iis2dh_data_rate_set(&dev_ctx , IIS2DH_ODR_1Hz);
- /* Set full scale to 2g */
- iis2dh_full_scale_set(&dev_ctx , IIS2DH_2g);
- // /* Enable temperature sensor */
- iis2dh_temperature_meas_set(&dev_ctx, IIS2DH_TEMP_ENABLE);
- // /* Set device in continuous mode with 12 bit resol. */
- iis2dh_operating_mode_set(&dev_ctx , IIS2DH_HR_12bit);
复制代码
读取加速度数据如下:
- iis2dh_xl_data_ready_get(&dev_ctx , &ddbyte );
- if(ddbyte )
- {
- /* Read accelerometer data */
- memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
-
- iis2dh_acceleration_raw_get(&dev_ctx , data_raw_acceleration);
-
- acceleration_mg[0] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[0]);
-
- acceleration_mg[1] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[1]);
-
- acceleration_mg[2] = iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[2]);
- }
复制代码
读取温度数据如下:
iis2dh_temp_data_ready_get(&dev_ctx , &ddbyte );
if (ddbyte)
{
/* Read temperature data */
memset(&data_raw_temperature, 0x00, sizeof(int16_t));
iis2dh_temperature_raw_get(&dev_ctx, &data_raw_temperature);
temperature_degC =iis2dh_from_lsb_hr_to_celsius(data_raw_temperature);
}
测量结果如图2所示:
图2
有一些功能还没测试,要深入学习才有所得。
|
這個時候測功耗意義不大吧
共同学习