背景:近日,因工作需要,在项目中开发了一个QMI8658A惯性测量单元的驱动。
概述
QMI8658(A系列)是一款国产六轴姿态传感器,也是一款低噪声、高带宽的六轴惯性测量单元(IMU),主要包含三轴陀螺仪和三轴加速计,还包括温度计。所以该传感器就是读取六轴数据就可以了,姿态解算自己在控制端实现,因为目前attitude engine无法使用了。
内部框图

PIN脚图及其PIN脚功能定义


QMI8658与主版的接口通信方式

典型应用线路连接示意图
主控器通过SPI总线与QMI8658相连

主控器通过IIC总线与QMI8658相连

寄存器总览



传感器驱动开发配置常用寄存器
QMI8658在典型传感器模式下,输出原始传感器值,使用寄存器配置和读取传感器的采集的数据,其思路为:上电->复位->陀螺仪校准->自检->配置传感器->读取传感器数据。使用配置的寄存器如下。

- QMI8658的片上信息寄存器(Chip Information Register),主要包括WHO_AM_I、REVISION_ID寄存器。
- QMI8658的配置寄存器(configuration register),主要包括CTRL1(通信接口、传感器使能设置)、CTRL2(加速度测量设置)、CTRL3(陀螺仪测量设置)、CTRL5(传感器数据会处理设置)、CTRL7(使能传感器和配置数据读取)、CTRL8(运动检测控制设置)、CTRL9(主机命令)。
- QMI8658的FIFO队列寄存器(FIFO register),主要包括FIFO_WTM_TH、FIFO_CTRL(FIFO队列控制寄存器)、FIFO_SMPL_CNT(FIFO队列简单计数寄存器)、FIFO_STATUS(FIFO队列状态寄存器)、FIFO_DATA(FIFO队列数据输出寄存器)。
- QMI8658的状态和时间戳寄存器(status and time stamp registers),主要包括STATUSINT(传感器数据可用并锁定寄存器)、SATUS0(输出数据状态寄存器)、SATUS1(其他状态寄存器)、TIMESTAMP(时间戳寄存器)。
- QMI8658的传感器数据输出寄存器(sensor data output register),主要包括TEMP_[H,L](温度数据输出传感器)、A[X,Y,Z][H,L](加速度数据输出传感器)、G[X,Y,Z][H,L](角度数据输出传感器)。
- QMI8658的按需校准寄存器(Calibration-On-Demand (COD) Status Register),包括COD_SATUS寄存器。 QMI8658的活动检测输出寄存器(Activity Detection Output Registers),主要包括TAP_SATUS寄存器(敲击配置寄存器)、STEP_COUNT(步数计数寄存器)。
- QMI8658执行外部主机处理器的命令是通过读写CTRL9寄存器实现的,其中CTRL9支持多种指令,以及寄存器的指令读写Write –CTRL9 Protocol和CTRL9 Protocol -R。
- QMI8658的中断支持,INT1和INT2,在不同模式(SyncSample同步采样、Non-SyncSample非同步采样、DDRY数据就绪)下存在一定的差异。
操作模式(operation mode)
有12种模式,模式的描述与配置方法如下。

复位
分为上电复位(VDD 和 VDDIO 线从断电状态驱动到有效工作范围初始化)和软件复位(REST寄存器写入0x0B)。


校准(COD)
QMI8658 按需校准(calibration on demand,COD)。支持陀螺仪的X/Y轴精度校准,提高精度,减少误差。

自检
QMI8658 自检(self-test)。支持加速度传感器自检和陀螺仪传感器自检。
加速度自检

陀螺仪自检

中断

同步采样模式

非同步采样模式

FIFO队列

在FIFO中加速度、角速度均占6个字节,根据使能的检测参数的个数,获取的数据可能是6字节或12字节;配置FIFO模式需要对相关的寄存器(如,FIFO_CTRL)进行配置,FIFO的中断、满载、数据、读取和重置等都需要通过对应寄存器处理实现。FIFO样本计数的计算方式:FIFO_Sample_Count (in byte) = 2 * (fifo_smpl_cnt_msb[1:0] * 256 + fifo_smpl_cnt_lsb[7:0])。若是要使用FIFO,更多详细请参考数据手册8 FIFO Description章节。
QMI8658支持监测功能
- QMI8658运动检测(motion detection)包括无运动检测、任意运动检测、显著运动检测。
- QMI8658敲击检测(tap detection)包括单点敲击和双点敲击。 QMI8658 计步检测(pedometer detection)。
- QMI8658运动唤醒(wake on motion)。原理是 极低功耗模式下,主机睡眠后由运动唤醒;类似任意运动检测,但没有数据输出;通过中断唤醒主机。
- QMI8658 锁定机制(locking mechanism)。在syncSample同步采样模式下启用,读取传感器数据时可以锁定当前样本数据,防止被新数据覆盖,这就类似于影子寄存器机制,确保数据的一致性。
注意事项(开发过程中踩坑)
不同的惯性测量单元(IMU),数据的单位不一样。角速度单位有度每秒(dps)、弧度每秒(radps)等;加速度的单位有重(g)、米每平方秒(mss)。


开源驱动
推荐一个git的开源驱动库,SensorLib。驱动尽量找开源的官方驱动,没必要自己去造每一个轮子;若是需要根据软件架构的原因,定制开发,也尽量参考着来开发,过于死磕数据手册没有太多价值和提升。
820

被折叠的 条评论
为什么被折叠?



