当前位置: 首页 > news >正文

QMI8658 - 姿态传感器学习笔记 - Ⅲ

文章目录

    • 1.复位
      • 1.1 上电复位:
      • 1.2 推荐工作条件
    • 2. 校准(COD)
      • 2.1 校准步骤
      • 2.2 校准注意事项:
      • 2.3 校准状态指示
      • 2.4 校准参数更新
    • 3. 自检
      • 3.1 加速度计自检
      • 3.2 陀螺仪自检
    • 4. Ctrl9
      • 4.1 写Ctrl9
      • 4.2 读Ctrl9
      • 4.3 Ctrl9详细命令说明
    • 5. 中断
      • 5.1 同步采样模式
      • 5.2 非同步采样模式
    • 6. 民间EVB评估板
      • 6.1 [**模块获取链接**](https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-12236672109.13.81875d44YDxChS&id=719601687670)
      • 6.2 模块资料更新记录

1.复位

1.1 上电复位:

通过将 VDD 和 VDDIO 线从断电状态(VDD = 0V,VDDIO = 0V)驱动到有效工作范围来初始化上电复位。 详见 3.2。 上电复位过程从 VDDIO 开始,并且 VDD 在最终电平的 1% 以内。
触发复位(上电复位和软件复位)后,QMI8658 将运行复位过程。 UI 寄存器、内部 RAM、FIFO 将设置为默认值,模拟和数字电路将被禁用。

1.2 推荐工作条件

符号参数MINTYPEMAX单位
VDD供电电压1.711.83.6V
VDDIOIO脚供电电压1.711.83.6V
V(IL)数字低电平输入电压0.3*VDDIOV
V(IH)数字高电平输入电压0.7*VDDIO0.3+VDDIOV
V(OL)数字低电平输出电压0.1*VDDIOV
V(OH)数字高电平输出电压0.9*VDDIOV

2. 校准(COD)

支持陀螺仪X轴和Y轴的按需校准。 基于内部集成功能,QMI8658A可以校准陀螺仪X轴和Y轴的内部增益,从而获得更精确的灵敏度,并在QMI8658A芯片上更紧密地分布X轴和Y轴灵敏度。
请注意, 陀螺仪的 Z 轴不受 COD 影响。

2.1 校准步骤

  1. 设置 CTRL7.aEN = 0 和 CTRL7.gEN = 0,禁用加速度计和陀螺仪。
  2. 通过 CTRL9 命令发出 CTRL_CMD_ON_DEMAND_CALIBRATION (0xA2)。
  3. 等待约 1.5 秒让 QMI8658A 完成 CTRL9 命令。
  4. 读取 COD_STATUS 寄存器 (0x46) 以检查 COD 实现的结果/状态。

2.2 校准注意事项:

在此过程中,建议将设备置于安静状态,否则 COD 可能会失败并报错。
如果成功,之后重新校准的增益参数将应用于传感器数据。 更新后的增益输出到 UI 寄存器,主机可以读取,参见 14.3。 如果执行上电复位或软复位,重新校准的增益参数将丢失,QMI8658A 将使用片上默认增益参数。
如果失败,不影响陀螺仪的运行,QMI8658A 将继续使用之前的可用参数(最后一次成功的 COD 参数或片内默认参数)。

2.3 校准状态指示

如果 COD 命令成功执行,COD_STATUS 寄存器将输出 0x00 进行指示

2.4 校准参数更新

成功 COD 后,经过 COD 校正的新增益将应用于陀螺仪 X 和 Y 轴的未来数据。 同时,新的参数会更新到下面的寄存器中,供主机读取和保存。

  1. Gyro-X gain (16 bits) will be in dVX_L and dVX_H registers (0x51, 0x52)
  2. Gyro-Y gain (16 bits) will be in dVY_L and dVY_H registers (0x53, 0x54)
  3. Gyro-Z gain (16 bits) will be in dVZ_L and dVZ_H registers (0x55, 0x56)

如果主机保存了这些增益参数,则可以使用 CTRL9 命令 CTRL_CMD_APPLY_GYRO_GAINS (0xAA) 将它们传回 QMI8658A(无需再次调用 COD 例程),如下所示:

  1. 通过设置 CTRL7.aEN = 0 和 CTRL7.gEN = 0 禁用加速度计和陀螺仪
  2. 将 Gyro-X 增益(16 位)写入寄存器 CAL1_L 和 CAL1_H 寄存器(0x0B,0x0C)
  3. 将 Gyro-Y 增益(16 位)写入寄存器 CAL2_L 和 CAL2_H 寄存器(0x0D,0x0E)
  4. 将 Gyro-Z 增益(16 位)写入寄存器 CAL3_L 和 CAL3_H 寄存器(0x0F,0x10)
  5. 将 0xAA 写入 CTRL9 并遵循 CTRL9 协议

一旦 CTRL9 命令成功完成,恢复的增益将对 Gyroscope 的未来数据生效。
请注意,始终建议不时运行 COD 以应用 Gyro-X 和 Gyro-Y 灵敏度的精确和最新校正。 设计人员应小心恢复过时的增益参数,尤其是当 PCB 应力发生显着变化时。

3. 自检

3.1 加速度计自检

加速度计自检 (Check-Alive) 用于确定加速度计是否正常工作并在可接受的参数范围内工作。
它是通过施加静电力来驱动加速度计的三个 X、Y 和 Z 轴中的每一个来实现的。 如果加速度计机械结构通过感应至少 200 mg 来响应此输入刺激,则可以认为加速度计是正常工作的。
加速度计自检数据可在寄存器 dVX_L、dVX_H、dVY_L、dVY_H、dVZ_L 和 dVZ_H 中读取。 主机可以通过以下程序随时启动自检。
加速度计自检程序:

  1. 禁用传感器 (CTRL7 = 0x00)。
  2. 将适当的加速度计 ODR (CTRL2.aODR) 和位 CTRL2.aST (bit7) 设置为 1 以触发自检。
  3. 等待 QMI8658A 将 INT2 驱动为高电平,如果 INT2 已启用(CTRL1.bit4 = 1),或者 STATUSINT.bit0 设置为 1。
  4. 将 CTRL2.aST(bit7) 设置为 0,以清除 STATUSINT1.bit0 和/或 INT2。
  5. 检查 QMI8658A 是否将 INT2 驱动回低电平,并将 STATUSINT1.bit0 设置为 0。
  6. 阅读 Accel 自检结果:
  • X channel: dVX_L and dVX_H (registers 0x51 and 0x52)
  • Y channel: dVY_L and dVY_H (registers 0x53 and 0x54)
  • Z channel: dVZ_L and dVZ_H (registers 0x55 and 0x56)

结果为 16 位,格式为 U5.11,分辨率为 0.5mg (1 / 2^11 g)。
如果所有三个轴的绝对结果都高于 200mg,则可以认为加速度计功能正常。 否则,加速度计不能被认为是有效的。
请注意,自检功能会自动将 full-scall 设置为 16g,并使用用户设置的 aODR (CTRL2.aODR)。 在自检结束时,QMI8658A 将在启动 Check-Alive) 例程之前使用用户设置的原始值更新 CTR2。
自检的典型时间(从将 aST 设置为 1,直到启用 INT2 的上升沿,或 STATUSINT.bit0 设置为 1)大约需要 25 个 ODR:

  • 25ms @ 1KHz ODR
  • 800ms @ 32Hz ODR
  • 2.2s @ 11Hz ODR

3.2 陀螺仪自检

陀螺仪自检 (Check-Alive) 用于确定陀螺仪是否正常工作。
它是通过施加静电力来驱动陀螺仪的三个 X、Y 和 Z 轴中的每一个并测量相应 X、Y 和 Z 轴上的机械响应来实现的。 如果陀螺仪输出的等效幅度对于每个轴大于 300dps,则可以认为该陀螺仪正常工作。
陀螺仪自检数据可在输出寄存器 dVX_L、dVX_H、dVY_L、dVY_H、dVZ_L 和 dVZ_H 中读取。 主机可以通过以下程序随时启动自检。
陀螺仪自检程序:

  1. 禁用传感器 (CTRL7 = 0x00)。
  2. 将位 gST 设置为 1。(CTRL3.bit7 = 1’b1)。
  3. 等待 QMI8658A 将 INT2 驱动为高电平,如果 INT2 已启用,或者 STATUSINT.bit0 设置为 1。
  4. 将 CTRL3.aST(bit7) 设置为 0,以清除 STATUSINT1.bit0 和/或 INT2。
  5. 检查 QMI8658A 是否将 INT2 驱动回低电平,或将 STATUSINT1.bit0 设置为 0。
  6. 读取陀螺仪自检结果:
  • X channel: dVX_L and dVX_H (registers 0x51 and 0x52)
  • Y channel: dVY_L and dVY_H (registers 0x53 and 0x54)
  • Z channel: dVZ_L and dVZ_H (registers 0x55 and 0x56)

以 U12.4 格式读取 16 位结果,分辨率为 62.5mdps (1 / 2^4 dps)。
如果所有三个轴的绝对结果都高于 300dps,则可以认为陀螺仪功能正常。 否则,陀螺仪不能被认为是功能性的。
请注意,自检功能会自动设置 CTRL3 的满量程 (gFS) 和 ODR (gODR)。 在自检结束时,QMI8658A 将在开始自检程序之前将 CTR3 更新为用户设置的原始值。
自检过程的典型时间(从将 gST 写入 1,直到 INT2 的上升沿(如果启用,或 STATUSINT.bit0 设置为 1))的成本约为 400 毫秒。

4. Ctrl9

4.1 写Ctrl9

  1. 主机需要将此命令所需的数据提供给 QMI8658A。 主机通常通过将数据放置在一组称为 CAL 寄存器的寄存器中来实现这一点。 最多使用八个 CAL 寄存器。 请参阅表 29。
  2. 使用适当的命令值写入 Ctrl9 寄存器 0x0A,请参见表 28。
  3. 一旦根据命令值执行了相应的功能,设备将设置 STATUSINT.bit7 为 1,并提高 INT1(如果 CTRL1.bit3 = 1 & CTRL8.bit7 == 0)。
  4. 主机必须通过将 CTRL_CMD_ACK (0x00) 写入 CTRL9 寄存器来确认这一点,STATUSINT.bit7 (CmdDone) 将在收到 CTRL_CMD_ACK 命令时重置为 0。 如果 CTRL1.bit3 = 1 & CTRL8.bit7 == 0,则 INT1 在寄存器读取时被拉低。
  5. 如果设备需要任何数据,此时将可用。 为每个命令单独指定数据的位置。

4.2 读Ctrl9

  1. 使用适当的命令值写入 Ctrl9 寄存器 0x0A。
  2. 一旦根据命令值执行了相应的功能,设备将设置 STATUSINT.bit7 为 1,并提高 INT1(如果 CTRL1.bit3 = 1 & CTRL8.bit7 == 0)。
  3. 主机必须通过将 CTRL_CMD_ACK (0x00) 写入 CTRL9 寄存器来确认这一点,STATUSINT.bit7 (CmdDone) 将在收到 CTRL_CMD_ACK 命令时复位为 0。 如果 CTRL1.bit3 = 1 & CTRL8.bit7 == 0,则 INT1 在寄存器读取时被拉低。
  4. 数据可从设备的 CAL 寄存器中获得。 为每个命令单独指定数据的位置。

4.3 Ctrl9详细命令说明

  • CTRL_CMD_ACK(0x00)
    主机在收到 CmdDone 信息时确认 QMI8658A,以结束 CTRL9 协议。
  • CTRL_CMD_RST_FIFO(0x04)
    将 0x04 写入 Ctrl9 寄存器 0x​​0a 的 CTRL9 命令允许主机指示设备重置 FIFO。 FIFO 数据、样本计数和标志将被清除并重置为默认状态。
  • CTRL_CMD_REQ_FIFO(0x05)
    当主机想要通过 CTRL9 进程写入 0x05 从 FIFO 中获取数据时,会发出此 CTRL9 命令。
    成功完成 CTRL9 过程后,将启用 FIFO 读取模式,设备将 FIFO 数据定向到 FIFO_DATA 寄存器(0x17),直到 FIFO 为空。读取 FIFO 数据后,主机必须通过写入 FIFO_CTRL 寄存器将 FIFO_CTRL.FIFO_rd_mode 设置为 0,这将导致 FIFO_STATUS.FIFO_WTM/FIFO_FULL 被清除和/或 INT 引脚(如果启用)被取消断言。请参阅错误!未找到参考来源。错误!未找到参考来源。 CTRL9 操作,详见 8.8。
  • CTRL_CMD_WRITE_WOM_SETTING(0x08)
    当主机想要启用/修改设备的运动唤醒功能的触发阈值或消隐间隔时,会发出此 CTRL9 命令。有关设置此功能的详细信息,请参阅 12 运动唤醒 (WoM)。一旦指定的 CAL 寄存器加载了适当的数据,就会通过将 0x08 写入 CTRL9 寄存器 0x​​0A 来发出命令。
  • CTRL_CMD_ACCEL_HOST_DELTA_OFFSET(0x09)
    当主机想要手动更改加速度计偏移时,会发出此 CTRL9 命令。 每个增量偏移值应包含 16 位,格式为有符号 4.12(12 小数位,单位为 1 / 2^12)。 用户必须将偏移量写入以下寄存器:
    • Accel_Delta_X : {CAL1_H, CAL1_L}
    • Accel_Delta_Y : {CAL2_H, CAL2_L}
    • Accel_Delta_Z : {CAL3_H, CAL3_L}
      接下来,通过将 0x09 写入 CTRL9 寄存器 0x0A 来发出命令。 请注意,当传感器重新上电或系统重置时,此偏移更改会丢失。
  • CTRL_CMD_GYRO_HOST_DELTA_OFFSET(0x0A)
    当主机想要手动更改陀螺仪偏移时发出此 CTRL9 命令。 每个增量偏移值应包含 16 位,格式为有符号 11.5(5 个小数位,单位为 1 / 2^5)。 用户必须将偏移量写入以下寄存器:
    • Gyro_Delta_X : {CAL1_H, CAL1_L}
    • Gyro_Delta_Y : {CAL2_H, CAL2_L}
    • Gyro_Delta_Z : {CAL3_H, CAL3_L}
      接下来,通过将 0x0A 写入 CTRL9 寄存器 0x0A 来发出命令。 请注意,当传感器重新上电或系统重置时,此偏移更改会丢失。
  • CTRL_CMD_CONFIGURE_TAP(0x0C)
    此 CTRL9 命令用于配置 Tap 检测参数。 有关详细信息,请参阅 10.3 配置 Tap。
  • CTRL_CMD_CONFIGURE_PEDOMETER(0x0D)
    发出此 CTRL9 命令以配置计步器检测的参数。 有关详细信息,请参阅 11.2 配置计步器。
  • CTRL_CMD_CONFIGURE_MOTION(0x0E)
    发出此 CTRL9 命令以配置运动检测的参数。 请参阅 9.4 配置移动侦测。
  • CTRL_CMD_RESET_PEDOMETER(0x0F)
    发出此 CTRL9 命令以清除计步器的步数。 有关详细信息,请参阅 11.6 重置步数。
  • CTRL_CMD_COPY_USID(0x10)
    USID 是每个 QMI8658A 部件的唯一 ID。
    此 CTRL9 命令将以下数据复制到 UI 寄存器中。 它由主机将 0x10 写入 CTRL9 来启动。 发出命令后,主机可以从如下所示的寄存器中读取数据:
    FW_Version byte 0 → dQW_L
    FW_Version byte 1 → dQW_H
    FW_Version byte 2 → dQX_L
    USID_Byte_0 → dVX_L
    USID_Byte_1 → dVX_H
    USID_Byte_2 → dVY_L
    USID_Byte_3 → dVY_H
    USID_Byte_4 → dVZ_L
    USID_Byte_5 → dVZ_H
    请注意,在上电复位或软复位成功后,FW_Version 和 USID 将自动复制到相应的寄存器一次,以供主机读取。 这些寄存器可以在启用传感器后更改,因此在读取之前应执行 CTRL_CMD_COPY_USID 命令将 FW_Version 和 USID 复制到相应的寄存器中。
  • TRL_CMD_SET_RPU(0x11)
    此 CTRL9 命令在主机配置 IO 上拉电阻时发出。 每个位控制一个电阻器组合,如表 30 所示:
Bit名称pin脚说明默认值
0aux_rpu_disSDx,SCx,RESV-NC(pin10)0:启用上拉 1:禁用上拉0
1icm_rpu_disSDx0:启用上拉 1:禁用上拉0
2cs_rpu_disCS0:启用上拉 1:禁用上拉0
3i2c_rpu_disSCL, SDA0:启用上拉 1:禁用上拉0
4:7保留NA

主机通过发出带有 0x11 的 WCtrl9 命令写入适当的 CAL1_L 位。
默认情况下,启用所有上拉电阻。 向该位写入 1 将相应地禁用上拉电阻,而写入 0 将启用上拉电阻。

  • CTRL_CMD_AHB_CLOCK_GATING(0x12)
    当设置了锁定机制(CTRL7.bit7 == 1(syncSmpl))时,应该禁用CTRL_CMD_AHB_CLOCK_GATING,以保证数据读取的锁定机制,防止可能的错位。 有关详细信息,请参阅 14 按需校准 (COD)。
  • CTRL_CMD_ON_DEMAND_CALIBRATION(0xA2)
    此 CTRL9 命令使主机能够不时重新校准陀螺仪灵敏度。 请参阅 14 按需校准 (COD)。
  • CTRL_CMD_APPLY_GYRO_GAINS(0xAA)
    此 CTRL9 命令使主机能够将保存的陀螺仪增益恢复到 QMI8658A,以避免再次运行 COD。 当环境发生显着变化时不建议这样做,例如显着的 PCB 应力变化。 请参阅 14.4 保存和恢复新的增益参数。

5. 中断

QMI8658A 有两条中断线,INT1 和 INT2。
通过配置 CTRL1.bit3(INT1) 或 CTRL1.bit4(INT2),可以将 INT1 和 INT2 配置为 High-Z 模式或 Push-Pull 模式。如果 CTRL1.bit3 (CTRL1.bit4) 设置为 0,则 INT1(INT2) 将相应地设置为 High-Z 模式。而如果 CTRL1.bit3 (CTRL1.bit4) 设置为 1,则 INT1(INT2) 将相应地设置为 Push-Pull 模式。默认情况下,INT1 和 INT2 处于高阻模式。
如果 QMI8658A 配置为运动唤醒 (WoM) 模式,则不会生成传感器数据。 INT 引脚行为遵循 WoM 的配置,请参阅 12 运动唤醒 (WoM)。
如果 QMI8658A 未处于运动唤醒模式,则中断映射有两种模式,如下所述。主机可以将多个内部信号/中断源配置到 INT 引脚(INT1 和/或 INT2)。如果驱动到一个 INT 引脚,则多个源在 LOGIC-OR 中起作用。

5.1 同步采样模式

SyncSample 模式支持在读取过程中锁定值。请参阅 13 锁定机构有关传感器数据寄存器的详细信息。

设置 CTRL7.bit7(SyncSample) == 1 将启用 SyncSample 模式。
如图 12 所示。在 SyncSample 模式下,CTRL9 握手信号将被路由到 INT1。详情请查看 5.10。
如果启用,运动事件中断(任何运动、无运动、显着运动、计步器、轻敲)将路由到 INT1。
该模式不支持 FIFO 功能,DRDY 信号将被路由到 INT2。

5.2 非同步采样模式

该模式支持 FIFO 功能和自由中断配置,如图 13 所示。
如果 CTRL7.bit7(SyncSample) == 0,则 STATUSINT 寄存器的第 1 位将具有与 INT1 相同的值,而 STATUSINT 寄存器的第 0 位将具有与 INT2 相同的值。
在 Non-SyncSample 模式下,CTRL9 握手有两种方法。如果设置 CTRL8.bit7 = 0,主机可以检查 INT1 引脚是否为握手信号的高电平;如果设置 CTRL8.bit7 = 1,则轮询 STATUSINT.bit7 进行握手。
在 Non-SyncSample 模式下,可以通过设置 CTRL8.bit6 = 1 将运动事件中断配置为 INT1,或者通过设置 CTRL8.bit6 = 0 将运动事件中断配置为 INT2。请注意,运动事件引擎可以通过 CTRL8.bit 启用[4:0],详见表 22。
在 Non-SycnSample 模式下,传感器数据可以通过数据寄存器或 FIFO 输出。配置 FIFO_CTRL.FIFO_MODE = ‘bypass’ 模式,将启用 DRDY 功能并禁用 FIFO 功能;配置 FIFO_CTRL.FIFO_MODE = other 模式,将启用 FIFO 功能并禁用 DRDY 功能。
如果启用 FIFO 模式,如果 CTRL1.bit2 设置为 1,则 FIFO 中断可以配置到 INT1 引脚,如果 CTRL1.bit2 设置为 0,则可以将 FIFO 中断配置到 INT2 引脚。有关 FIFO 中断行为的更多详细信息,请参阅 8 FIFO 说明。
如果启用 DRDY 模式,如果 CTRL7.bit5(DRDY_DIS) 设置为 0,则 DRDY 信号将被路由到 INT2,如果 CTRL7.bit5(DRDY_DIS) 设置为 1,则 DRDY 信号将被路由到 INT2 引脚。

cmdvalueaddrtime max(ms)flag addrflag value
reset0x0B0x60150x4D0x80

6. 民间EVB评估板

6.1 模块获取链接

请添加图片描述

6.2 模块资料更新记录

在这里插入图片描述

http://www.lryc.cn/news/89920.html

相关文章:

  • PHP+vue二手车交易信息网站系统
  • NTM中attr的用法
  • 【python资料】pandas的条件查询
  • 中间件(三)- Kafka(二)
  • DAY01_MySQL基础数据类型navicat使用DDL\DML\DQL语句练习
  • 数据安全复合治理框架和模型解读(0)
  • Java程序设计入门教程--逻辑运算符和位运算符
  • 接口测试简介以及接口测试用例设计思路
  • C++ Qt项目实战:构建高效的代码管理器
  • 【JavaScript 递归】判断两个对象的键值是否完全一致,支持深层次查询,教你玩转JavaScript脚本语言
  • 卷积、相关、匹配滤波、脉冲压缩以及模糊函数
  • C# 栈(Stack)
  • 网络流量监控及流量异常检测
  • 六.热修复
  • 2000万的行数在2023年仍然是 MySQL 表的有效软限制吗?
  • jvm问题排查
  • 【Redis】浅谈Redis-集群(Cluster)
  • Python3实现基于ARIMA模型来预测茅台股票价格趋势
  • 自动化测试selenium环境搭建
  • SaaS系统平台,如何兼顾客户的个性化需求?
  • QDir拼接路径解决各种斜杠问题
  • mycat2主从配置实现读写分离
  • 如何在Centos7中安装Kubernetes
  • Stream强化
  • 第一部分-基础篇-第一章:PSTN与VOIP(下篇)
  • 《汇编语言》- 读书笔记 - 第4章-第一个程序
  • AI工具 ChatGPT-4 vs Google Bard , PostgreSQL 开发者会pick谁?
  • 【网络】基础知识1
  • chatgpt赋能python:Python倒序range的完整指南
  • 工作笔记!