本篇博客对ICM20602芯片进行学习,目的是后续设计一个电路板,采集ICM20602的数据,通过这些数据对各种姿态解算的方法进行仿真学习。
3轴陀螺仪:可编程全刻度范围(FSR)为±250 dps,±500 dps,±1000 dps和±2000 dps(dps:degrees per second,度/秒)。3轴加速度计:可编程全刻度范围(FSR)为±2g,±4g,±8g和±16g。这两个范围描述了传感器可以测量的最大范围,如果实际的角速度或者加速度超过这个范围,那么获得的数据就会失真或者不准确。
下图是典型的电路连接图:
下面是对16个引脚的介绍:
此外,还需要注意三个轴的方向:
该器件具有I2C和SPI串行接口,VDD工作范围为1.71V至3.45V,以及单独的数字IO电源,VDDIO工作范围为1.71V至3.45V。使用400 kHz的I2C或10 MHz的SPI与设备的所有寄存器进行通信。
下面是陀螺仪的一些重要的数据:
通过配置FS_SEL的值可以选择陀螺仪的测量范围,其中,LSB/(dps) 表示每秒度(degrees per second,dps)的最小位(Least Significant Bit)变化。这是用于描述陀螺仪的灵敏度或分辨率的一种方式。在数字传感器中,测量的物理量通常会被转换成数字信号,即由数字化的比特(bits)表示。最小有效位(LSB)是数字信号中最小的可分辨单位,它表示物理量的微小变化。对于陀螺仪而言,LSB/(dps) 描述了在角速度方面的分辨率。例如,如果一个陀螺仪的灵敏度为 0.1 LSB/(dps),那么它可以检测到每秒度的变化,并将这个变化表示为最小有效位的变化。 这个值越小,表示陀螺仪越能够检测到微小的角速度变化,具有更高的分辨率。分辨率对于一些应用,特别是需要高精度测量的领域,非常重要。
下面是加速度计的一些重要的数据:
通过配置AFS_SEL的值可以选择加速度的测量范围。
下面是芯片内部的框架图:
ICM-20602由三个独立的振动MEMS速率陀螺仪组成,分别检测X轴、Y轴和Z轴的旋转。当陀螺仪绕任一感测轴旋转时,会引起由电容拾音器检测到的振动。所得到的信号被放大、解调和滤波, 以产生与角速率成比例的电压。该电压使用单独的片上16位模数转换器(adc)对每个轴进行采样。陀螺仪传感器的满量程范围可以数字编程为±250,±500,±1000或±2000度每秒(dps)。ADC采样率可编程,从每秒8000个采样到每秒3.9个采样,用户可选择的低通滤波器可实现宽范围的截止频率。
ICM-20602的3轴加速度计沿某一特定轴方向的加速度在相应的证明质量上引起位移,电容式传感器对位移进行差分检测。当设备放置在平面上时,它将在X轴和y轴上测量0g,在z轴上测量+1g。加速度计的比例系数是在工厂校准的,与电源电压无关。每个传感器都有一个专用的sigma-delta ADC,用于提供数字输出。数字输出的满量程范围可调节为±2g,±4g,±8g或±16g。
在以后的设计中,都会使用SPI来读取ICM20602的数据:
采用片上温度传感器和ADC测量ICM-20602芯片温度。ADC的读数可以从FIFO或传感器数据寄存器读取。在读取这个温度之后,可以在后期研究温度对陀螺仪漂移中进行温度补偿。
下面是ICM20602各种模式下陀螺仪和加速度计的工作情况:
该芯片的SPI工作特点是数据先发送MSB,后发送LSB。
SCLK在空闲时为高,在SCLK上升沿进行数据的采集SPC的最大频率为10MHz 5。SPI读写操作在16个或更多的时钟周期(两个或更多字节)完成。第一个字节包含SPI地址,接下来的字节包含SPI数据。第一个字节的第一位包含Read/Write位,表示Read(1)或Write(0)操作。下面的7位是要进行读写操作的寄存器地址或者数据。
下面详细看寄存器的说明:(说明一下,下文中寄存器xx表示该寄存器的16进制地址,如寄存器04,表示该寄存器地址为0x04;此外,由于三轴的寄存器是一样的,只针对其中某一轴的寄存器说明)
XG_OFFS_LP[5:0]:将陀螺仪输出的偏移位移从低噪声模式切换到低功耗模式存储,以在软件代码中实现修正的功能。使用二进制的补码数字编码,每个最小有效位表示 0.125 度每秒,范围从 +3.875 度每秒到 -4 度每秒。
XG_OFFS_TC_H[9:8]:X轴陀螺仪10位偏移的第9位和第8位(采用二进制的补码表示)。
XG_OFFS_TC_H[7:0]:X轴陀螺仪10位偏移的第0到第7位(采用二进制的补码表示)。
寄存器04和寄存器05对应X的轴相关的寄存器,寄存器07、08 对应Y轴的寄存器,同理,0A、0B对应Z轴的寄存器。
XA_ST_DATA[7:0]:该寄存器中的值表示在制造测试期间生成的自检输出。此数值用于与用户端执行的后续自检输出进行比较,以进行检查。
X_OFFS_USR[15:8]:X陀螺仪16位偏移量的第15位到第8位(2的补码)。这个寄存器用于消除传感器输出的直流偏置。这个寄存器中的值在进入传感器寄存器之前被添加到陀螺仪传感器值中。
X_OFFS_USR[7:0]:X陀螺仪16位偏移量的第7位到第0位(2的补码)。这个寄存器用于消除传感器输出的直流偏置。这个寄存器中的值在进入传感器寄存器之前被添加到陀螺仪传感器值中
SMPLRT_DIV[7:0]:该寄存器用于将内部采样率(参见寄存器CONFIG)分频,生成控制传感器数据输出速率和FIFO采样率的采样率。注意:该寄存器仅在FCHOICE_B寄存器位为00(不懂为什么数据手册写2’b00,是二进制吗?),并且(0 < DLPF_CFG < 7)时有效。这是传感器寄存器的更新速率:
S A M P L E R A T E = I N T E R N A L S A M P L E R A T E / ( 1 + S M P L R T D I V ) SAMPLERATE = INTERNALSAMPLERATE/(1+SMPLRTDIV) SAMPLERATE=INTERNALSAMPLERATE/(1+SMPLRTDIV),其中, I N T E R N A L S A M P L E R A T E = 1 k K z INTERNALSAMPLERATE=1kKz INTERNALSAMPLERATE=1kKz
FIFO_MODE:当设置为1 时,当FIFO已满时,将不会向FIFO写入额外的写操作;当设置为0 时,当FIFO已满时,将向FIFO继续写入,替换旧的数据。
EXT_SYNC_SET[2:0]:启用FSYNC引脚数据采样。 FSYNC将被锁存以捕捉 short strobes。如果FSYNC切换,锁存值切换,但不会再切换,直到新的锁存值被采样率频闪捕获。(说实话,没看明白,我也不用这个)
DLPF_CFG[2:0]:对于要使用的DLPF, FCHOICE_B[1:0]是00。
当FCHOICE_B [1:0] = 00时,DLPF_CFG配置DLPF。陀螺仪和温度传感器根据DLPF_CFG和FCHOICE_B的值进行滤波,如下表所示:
[7]~[5]:三轴陀螺仪的自检
FS_SEL[1:0]:陀螺满量程选择。
FCHOICE_B[1:0]:用于绕过DLPF,如2.2.6节表格所示。
[7]~[5]:三轴加速度的自检
ACCEL_FS_SEL[1:0] :加速度满量程选择。
DEC2_CFG[1:0]:低功率加速度计模式的平均滤波器设置:
ACCEL_FCHOICE_B :用于绕过DLPF,如下表所示。
A_DLPF_CFG:加速度计低通滤波器设置,如下表所示:
DLPF滤波器块的数据输出速率可以通过因子 1/(1+SMPLRT_DIV)进一步降低,其中 SMPLRT_DIV 是一个8位整数。以下是在低噪声模式下以这种方式配置的加速度计的一小部分可配置的输出数据速率(Hz):3.91, 7.81, 15.63, 31.25, 62.50, 125, 250, 500, 1K
以下表格列出了在一些示例输出数据速率下,低功耗模式操作中可用的近似加速度计滤波器带宽。
在低功耗模式下,加速度计以循环工作的方式运行。以下表格显示了一些加速度计低功耗模式的示例配置。
GYRO_CYCLE: 当设置为1时,启用低功耗陀螺仪模式。默认设置为 0 。
G_AVGCFG[2:0]:低功耗陀螺仪模式的平均滤波器配置。默认设置为000。
若要在陀螺仪低功耗模式或6轴低功耗模式下工作,则应将GYRO_CYCLE设置为1。陀螺仪滤波器配置由G_AVGCFG[2:0]确定,设置平均滤波器配置。它与DLPF_CFG[2:0]无关。下表显示了陀螺仪低功耗模式的一些示例配置:
WOM_X_TH[7:0]:这个寄存器保存了x轴加速度计的运动中断唤醒的阈值。
1 - 将 TEMP_OUT_H、TEMP_OUT_L、GYRO_XOUT_H、GYRO_XOUT_L、GYRO_YOUT_H、GYRO_YOUT_L、GYRO_ZOUT_H和 GYRO_ZOUT_L 按照采样率写入FIFO;即使数据路径处于待机状态,如果启用,数据仍会被缓存。
0 - 该功能被禁用。
ACCEL_FIFO_EN:
1 - 将ACCEL_XOUT_H、ACCEL_XOUT_L、ACCEL_YOUT_H、ACCEL_YOUT_L、ACCEL_ZOUT_H、ACCEL_ZOUT_L、TEMP_OUT_H 和 TEMP_OUT_L 按照采样率写入FIFO。
0 - 该功能被禁用。
FSYNC中断状态:当FSYNC中断产生时,这个位自动设置为1。在读取寄存器后,该位清除为0。
1 - INT/DRDY引脚的逻辑电平低。
0 - INT/DRDY引脚的逻辑电平高。
INT_OPEN :
1 - INT/DRDY引脚配置为开漏。
0 - INT/DRDY引脚配置为推挽式。
LATCH_INT_EN :
1 - INT/DRDY引脚电平保持,直到中断状态被清除。
0 - INT/DRDY引脚指示中断脉冲的宽度为50us。
INT_RD_CLEAR :
1 -如果有读操作,清除中断状态。
0 -只通过读取INT_STATUS寄存器来清除中断状态
FSYNC_INT_LEVEL:
1 - FSYNC引脚作为中断的逻辑电平低。
0 - FSYNC引脚作为中断的逻辑电平高。
FSYNC_INT_MODE_EN:
当这个位等于1时,FSYNC引脚将触发中断,当它转换到FSYNC_INT_LEVEL指定的电平时。
当这个位等于0时,FSYNC引脚被禁止引起中断
WOM_X_INT、WOM_Y_INT、WOM_Z_INT:X/Y/Z轴加速度计WoM中断状态。可读清除。
FIFO_OFLOW_INT :当FIFO缓冲区溢出产生时,该位自动设置为1。在读取寄存器后,该位清除为0。
GDRIVE_INT :陀螺仪驱动系统准备中断
DATA_RDY_INT :当产生数据就绪中断时,该位自动设置为1。在读取寄存器后,该位清除为0
ACCEL_XOUT[15:8] :加速度计x轴数据的高字节。
ACCEL_XOUT[7:0] :加速度计x轴数据的低字节。
TEMP_OUT[15:8]:温度传感器输出低字节。
TEMP_OUT[7:0]:温度传感器输出高字节。
GYRO_XOUT[15:8] :X轴陀螺仪输出的高字节。
GYRO_XOUT[7:0]:X轴陀螺仪输出的低字节。
XG_ST_DATA[7:0]:此寄存器中的值表示在制造测试期间生成的自检输出。此值将用于检查最终用户执行的后续自检输出。
FIFO_WM_TH[9:8] :FIFO水印阈值。当阈值设置为“0”时,水印中断关闭。默认值为00000000。
FIFO_WM_TH[7:0] :FIFO水印阈值。当阈值设置为“0”时,水印中断关闭。默认值为00000000。
寄存器FIFO_WM_TH[9:0]设置FIFO水印阈值级别(0 ~ 1023)。在使用此功能之前,用户应确保寄存器0x1A的第7位设置为0。当FIFO计数大于或等于水印电平(FIFO_COUNT[15:0]≥FIFO_WM_TH[9:0]),且系统未处于FIFO读的过程中,触发中断。中断将设置FIFO水印中断状态寄存器字段FIFO_WM_INT = 1,如果配置为脉冲模式,INT引脚将发出脉冲,如果配置为锁存模式,则设置为活动电平。与其他中断不同,寄存器位FIFO_WM_INT不是读到清除。相反,无论何时读取FIFO_R_W寄存器,FIFO_WM_INT状态位都会被自动清除。同时,如果配置为锁存模式,INT引脚也将被清除。
FIFO水印中断和INT引脚在FIFO的第一次读取(并且仅是第一次读取)时被清除。如果在FIFO读取结束时,FIFO计数等于或高于水印水平,中断状态位和INT引脚将再次设置。如果INT引脚配置为锁存操作,它将等待,直到主机完成读取设置为活动水平。
ACCEL_RST:复位加速数字信号路径。注意:传感器寄存器不清除。使用SIG_COND_RST清除传感器寄存器。
TEMP_RST:复位温度数字信号路径。注意:传感器寄存器不清除。使用SIG_COND_RST清除传感器寄存器
ACCEL_INTEL_EN :该位启用了运动唤醒检测逻辑。
ACCEL_INTEL_MODE :
0 -不使用
1 -将当前采样值与前一个采样值进行比较
OUTPUT_LIMIT :为了避免限制传感器输出小于0x7FFF,请将此位设置为1。这应该在每次ICM20602上电时进行。
WOM_TH_MODE :
0 -设置WoM中断在所有已使能的加速度计阈值的或上。
1 -设置WoM中断在所有已使能的加速度计阈值的与上
1 -使能FIFO操作模式。
0 -从串行接口禁用FIFO访问。
FIFO_RST :1 -复位FIFO模块。重置是异步的。该位在内部20mhz时钟的一个时钟周期后自动清除。
SIG_COND_RST:1 -复位所有陀螺仪数字信号路径,加速数字信号路径,和临时数字信号路径。这个位也清除所有的传感器寄存器。
DEVICE_RESET : 1 -重置内部寄存器并恢复默认设置。一旦复位完成,位自动清除为0。
SLEEP : 设置为1时,芯片进入休眠模式。
CYCLE :当设置为1,并且SLEEP和STANDBY不设置为1时,芯片将在睡眠和以SMPLRT_DIV确定的速率采集单个加速度计样本之间循环。注意:当通过PWR_MGMT_2寄存器位禁用所有加速度计轴并启用周期时,芯片将以上述各自寄存器确定的速率唤醒,但不会采集任何采样值。
GYRO_STANDBY : 当设置时,陀螺仪驱动和锁相环电路被启用,但感测路径被禁用。这是一个低功耗模式,允许快速启用陀螺仪。
TEMP_DIS : 当设置为1时,该位禁用温度传感器。
CLKSEL[2:0]:CLKSEL[2:0]的默认值是001。需要将CLKSEL[2:0]设置为001以实现完整的陀螺仪性能。
1 - X加速度计关闭
0 - X加速度计打开
STBY_XG :
1 - X陀螺仪关闭
0 - X陀螺仪打开
I2C_IF_DIS :1 -禁用I2C从模块,并将串行接口置于SPI模式。
FIFO_COUNT[15:8] :高八位, count表示FIFO写入字节数。读取这个字节将锁存FIFO_COUNTH和FIFO_COUNTL的数据。
FIFO_COUNT[7:0] :低八位, count表示FIFO写入字节数。注意:必须读FIFO_COUNTL来锁存FIFO_COUNTH和FIFO_COUNTL的新数据。
这个寄存器用于从FIFO缓冲区读取和写入数据。
FIFO_DATA[7:0] :Read/Write命令为FIFO提供读或写操作。
此寄存器用于验证设备的身份。WHOAMI的内容是一个8位的设备ID。寄存器的缺省值是0x12。这与应用处理器在从I2C控制器上看到的设备的I2C地址不同。ICM-20602的I2C地址为0x68或0x69,具体取决于AD0引脚驱动的值。
XA_OFFS[14:7] :X轴加速度计偏移消除的高位。
XA_OFFS[6:0] :X轴加速度计偏移消除的低位。
后续会通过STM32来实现对ICM20602模块的数据读取,并设计上位机来保存数据。
课题学习(一)----静态测量
课题学习(二)----倾角和方位角的动态测量方法(基于磁场的测量系统)
课题学习(三)----倾角和方位角的动态测量方法(基于陀螺仪的测量系统)
课题学习(四)----四元数解法
课题学习(五)----阅读论文《抗差自适应滤波的导向钻具动态姿态测量方法》
课题学习(六)----安装误差校准、实验方法
课题学习(七)----粘滑运动的动态算法
课题学习(八)----卡尔曼滤波动态求解倾角、方位角
课题学习(九)----阅读《导向钻井工具姿态动态测量的自适应滤波方法》论文笔记
课题学习(十)----阅读《基于数据融合的近钻头井眼轨迹参数动态测量方法》论文笔记
课题学习(十一)----阅读《Attitude Determination with Magnetometers and Accelerometers to Use in Satellite》
课题学习(十二)----阅读《Extension of a Two-Step Calibration Methodology to Include Nonorthogonal Sensor Axes》
课题学习(十三)----阅读《Calibration of Strapdown Magnetometers in Magnetic Field Domain》论文笔记