ST意法半导体
直播中

杨帆

7年用户 1379经验值
私信 关注
[问答]

lsm6dsox传感器数据以轮询模式读取,读取速度过快的原因?

支持团队。

在我的测试环境中,传感器数据是在 while 循环中以轮询模式读取的。
传感器 ODR 设置为 1667Hz。
因此,预计每 1/1667 秒读取一次传感器数据。
但看起来传感器数据每 1/1873 秒读取一次。
(5 分钟内,每个传感器数据被读取 562,000 次。)
它比我预期的要快得多。
你能检查一下我是被误解了还是做错了什么?
下面是 read 函数,它在 while 循环中被调用。
  • static void motion_data_read(uint8_t index)
  • {
  •     axis3bit16_t data_raw_acceleration;
  •     axis3bit16_t data_raw_angular_rate;
  •     do{
  •         /* Read acceleration field data */
  •         lsm6dsox_acceleration_raw_get(&lsm_ctx, data_raw_acceleration.u8bit);
  •     }while(0 == memcmp(&motion_data[0], data_raw_acceleration.u8bit, sizeof(uint8_t)*6));
  •     do{
  •         /* Read angular rate field data */
  •         lsm6dsox_angular_rate_raw_get(&lsm_ctx, data_raw_angular_rate.u8bit);
  •     }while(0 == memcmp(&motion_data[3], data_raw_angular_rate.u8bit, sizeof(uint8_t)*6));
  •     motion_data[0] = data_raw_acceleration.i16bit[0];
  •     motion_data[1] = data_raw_acceleration.i16bit[1];
  •     motion_data[2] = data_raw_acceleration.i16bit[2];
  •     motion_data[3] = data_raw_angular_rate.i16bit[0];
  •     motion_data[4] = data_raw_angular_rate.i16bit[1];
  •     motion_data[5] = data_raw_angular_rate.i16bit[2];
  • }





回帖(1)

云静京

2023-1-13 14:55:00
请首先注意,标称值在 1667Hz 时的 ODR 可能相差大约 +-2%,因此它实际上可能或多或少为 1700Hz。
1873Hz 有点太快了,但由于您是在异步模式下读取设备,
确定ODR的实际价值;您应该获取数据就绪信号(例如使用示波器),并检查此中断频率。
要启用 DRDY 信号,您必须按如下方式配置 LSM6DSOX 设备:


  • 1. Write INT1_CTRL = 01h // Acc data-ready interrupt on INT1

您可以参考 Github 上的 C 示例,尤其是lsm6dsox_read_data_int.c文件。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分