icm20948

与世无争的帅哥 提交于 2019-12-01 13:49:16

简介:
icm20948由两个裸片(die)构成,QFN封装(3x3x1mm 24PIN)。一个die集成3轴陀螺仪,3轴加速计和一个DMP,另一个die集成旭化成的AK09913的3轴磁力计。它支持以下功能:
1.512字节的FIFO(FIFO的大小根据DMP功能集而定)
2.运行时校准功能
3.增强的FSYNC功能,可改善类似EIS(视频防抖)应用的时序

陀螺仪可编程量程范围:±250dps ±500dps ±1000dps ±2000dps
加速计可编程量程范围:±2g ±4g ±8g ±16g
这两个传感器的灵敏度初始化(工厂校准)降低了产线的校准要求。

其他关键功能,片上16位ADC,可编程数字滤波器,内嵌的温度传感器以及可编程中断。设备功能接口有I2C和SPI,VDD操作电压范围1.71V到3.6V以及一个独立的数字IO供电,VDDIO从1.71V到1.95V。
与设备上的寄存器进行通信是通过I2C(高达100KHZ-标准或400KHZ-快速),或者高达7MHZ的SPI。

应用场景:
1.智能手机和平板
2.可穿戴传感器
3.IoT场景
4.无人机

功能:
1.陀螺仪:
① 输出X,Y和Z轴方向的角速度,可编程范围±250dps ±500dps ±1000dps ±2000dps以及集成的16位ADC
② 自定义的ODR;自定义的低通滤波
③ 自检
④输出数据率:
Low-Noise Mode: GYRO_FCHOICE=1时 最小4.4HZ,最大1.125KHZ
Low-Noise Mode: GYRO_FCHOICE=0时 最大9KHZ
温度范围:-40到85℃

2. 加速计:
① 输出X,Y和Z轴的加速度,可编程范围±2g ±4g ±8g ±16g以及集成的16位ADC
② 自定义的ODR;自定义的低通滤波
③ 针对CPU低功耗操作的Wake-on-motion中断支持
④自检
⑤输出数据率:
Low-Noise Mode: ACCEL_FCHOICE=1 最小4.5HZ 最大1.125KHZ
Low-Noise Mode: ACCEL_FCHOICE=0 最大4.5KHZ
温度范围:-40到85℃

3.磁力计:
① 三轴硅单片霍尔效应磁力传感器
② 宽测量范围以及高分辨率低功耗
③ 输出16位分辨率
④ 宽量程±4900μT
⑤ 自检功能
⑥ 数据输出率:
最大100HZ
温度范围:-40到85℃

4.DMP功能
① 自带动作计算处理算法。DMP可减少功耗,简化时序,简化软件架构,以及节省主机MIPS
② DMP使能超低功耗的运行以及后台accel,gyro和mag的校准,给传感器融合算法提供raw数据。
③ DMP独立于OS,平台和架构的,支持任何AP,MCU或其他嵌入式架构

5.附加功能
100KHz的标准模式I2C以及400KHZ快速模式,7MHZ的SPI通信速率
② 为额外需要添加传感器的辅助I2C总线
③ 温度传感器
④ 2000g的冲击测试鲁棒性

管脚功能图:
微信图片_20190907114810.png

采样速率一般设置在200HZ左右,即使应用程序只以5HZ速率读取数据,这里仍然要设置为200HZ

自检:
自检用于对传感器的机械和电子部分进行测试,可通过设置gyro和acc自检寄存器来激活每个轴的自检功能。
当自检激活后,启动传感器并产生输出信号,输出信号用于反映自检响应。
自检响应定义如下:
SELF-TEST RESPONSE = SENSOR OUTPUT WITH SELF-TEST ENABLED - SENSOR OUTPUT WITHOUT SELF-TEST ENABLED
每个gyro轴与accel轴的自检响应都在各自的规格书表中有定义,当自检响应值在规定的最小/最大范围内时,则通过自检,反之若超出该值超出最小/最大范围,则表示自检失败,推荐使用InvenSense MotionApps软件执行自检流程。

时钟:
内部时钟:
1. 一个内部驰张振荡器(用于产生非正弦波输出信号,比如方波或三角波,驰张振动器内含有像是晶体管之类的非线性元件,可周期性的把存储于电容或电感中的能量释放出来,使得输出讯号波形瞬间改变)
2. 一个GRYO振荡器的参考时钟PLL,推荐时钟选择设置CLKSEL=1,时钟源基于功率模式来自动选择优化传感器性能与功耗。
特别是,当只工作在acc模式时,会选择内部驰张振荡器,而只要gyro一启动PLL就会开启。
而由DMP处理的距离以及角度计算对时钟精度要求严格,在某些方面,驰张振荡器与PLL分别表现出不同的性能。在室温环境下,内部驰张振荡器被调整为具有一致操作频率,而PLL时钟频率因部分不同而不同。PLL频率偏离标称值的百分比可从寄存器TIMEBASE_CORRECTION_PLL得到,用户可在计算距离和角度时将其考虑在内以便不牺牲精度。除此之外,在温度方面,PLL相较于内部驰张振荡器具备更好的频率稳定性和更低频率变化。

5. 传感器数据寄存器
传感器数据寄存器包含最新的gyro,acc,辅助传感器以及温度测量数据。它们都是只读寄存器,可通过串口访问,可随时读取。

6.FIFO
ICM-20948包含一个512字节的FIFO,可通过串口访问FIFO。FIFO配置寄存器决定哪些数据写入到FIFO。一般包含gyro数据,acc数据,温度数据,辅助传感器读数以及FSYNC输入。
一个FIFO计数器跟踪有多少有效数据字节包含在FIFO内,FIFO寄存器支持突发读取,中断函数可能用于决定什么时候新数据可用。

7.FSYNC
FSYNC管脚用于从外部中断源将设备从睡眠中唤醒。尤其是在EIS应用中从一个图像传感器的外部输入来同步gyro ODR时可用。将图像传感器子系统的VSYNC或HSYNC脚链接到ICM-20948的FSYNC脚上,以使得在这两个未直接相连的子系统间进行时间同步。
FSYNC_ODR延迟时间寄存器用于抓取FSYNC脉冲与下一个gyro数据准备脉冲与FSYNC脉冲之间的延迟时间。

8.中断
中断功能通过中断配置寄存器来配置,可配置的项包含:INT管脚配置,中断锁存和清除函数,中断触发器。可从中断状态寄存器读取中断状态。

9.温度传感器
一个偏上温度传感器与ADC用于测量ICM-20948裸片温度,可从FIFO或传感器数据寄存器中读取到ADC输出的数据。

10.BIAS和LDO
Bias和LDO部分产生内部供电以及ICM-20948所需的参考电压和电流。它的两个输入分别是一个未调整过的VDD和一个VDDIO逻辑参考供电电压。LDO输出由一个电容在REGOUT旁路。

11.电荷泵
一个片上电荷泵生成MEMS振荡器所需的高压

12.功率模式
8中模式如下所示:
gonglvmode.png
可编程中断:
ICM20948有一个可编程中断系统,可在INT管脚上产生中断信号。状态标志表示一个中断的源。中断源可单独地使能或不使能。如下表列出7种中断源:
inttrupt source.png

I2C和SPI:
ICM20948的内部寄存器和内存可通过I2C以400KHZ或SPI以7MHZ的速率来访问。SPI在四线模式操作:

spi interface.png

注意:未防止在使用SPI时,切换进I2C模式,应该通过设置I2C_IF_DIS配置位来禁止I2C接口。应该在等待由Start-Up Time for Register Read/Write制定的时间后就马上设置该位。

I2C:
I2C是双线接口,由SDA数据和SCL时钟信号线组成,一般,该线是开漏和双向的。在一个I2C接口实现中,接入的设备可能为Master也可能为Slave。Master设备将Slave地址放在总线上,同时带有相匹配地址的Slave设备与Master相识别。
ICM20948当与主机通信时,是Slave设备,而主机则为Master。SDA和SCL一般必须接一个上拉电阻到VDD,最大总线速率为400KHZ。
ICM20948作为Slave的地址为b110100X,它是7位长度的。最低有效为的值由AD0管脚上的逻辑电平决定。这允许两个ICM-20948同时连接到一个I2C上。当使用这种配置时,其中一个设备地址为b1101000(AD0为低电平),另一个地址为b1101001(AD0为高电平)。
I2C协议:
起始和停止条件:
当Master将START条件放在总线上时,I2C总线通信开始,START定义为---SCL保持为高电平,同时SDA线由高到低跳变。只有当Master将一个STOP放在总线上时,总线才认为不忙。否则,一直都认为是忙状态。STOP定义为---SCL保持为高电平,同时SDA由低到高跳变。
另外,若是产生一个重复的START信号而不是STOP信号,则总线保持忙状态。

STOP.png


数据格式和ACK:
I2C数据格式定义为8位长度。在每个数据传输中,对传输的字节数没有限制。每传输完一个字节后必须跟一个ACK信号,ACK的时钟信号是由Master产生的,Receiver可通过拉低SDA并在SCL高电平期间保持低 来 产生一个ACK信号。
若是一个Slave忙状态同时必须在某些其他任务完成之后,才能够再发送或接收字节,则它会保持SCL为低电平状态,强制Master进入等待状态。只有当Slave准备好且释放SCL后才能恢复传输正常数据。
ack.png



通信:
在START信号发出开始通信之后,Master发送一个7位地址再加一个读写位(第8位)。读写位表示Master是从Slave接收数据还是往Slave写入数据。随后Master释放SDA信号线并等待Slave设备的ACK。每个字节传输完后都必须跟一个ACK位。作为回应,Slave设备将SDA信号线拉低并在SCL为高期间保持低。若是发出一个STOP信号,则Master会终止数据传输,进而释放信号线。但是,Master也能够在没有先产生一个STOP信号的情况下,再产生一个重复START信号并寻址到另一个Slave。在SCL为高电平期间,SDA的一个由低到高的跳变就表示STOP,除START和STOP的条件产生之外,在SCL为低电平期间,所有的SDA变化都会生效。
I2C data transfer.png


为了写ICM20948内部寄存器,Master发出START信号,后跟着I2C地址和写位(0),在第9个时钟周期(此时SCL为高),ICM-20948发出ACK。随后Master将寄存器地址RA放到总线上,在ICM20948在接收到寄存器地址且发出ACK后,Master将寄存器数据放到总线上,这些数据每传输完一个字节后都需要ACK,且可通过STOP信号来结束数据传输。若想要在上一个ACK信号后写入多个字节,Master能够不断输出数据而不是传输一个STOP信号,则此时ICM20948会不停地增加寄存器地址且将数据加载到恰当的地址。以下显示了单个或两个字节写序列:
write.png


若要读一个ICM20948的内部寄存器,则Master首先发出一个START信号,后跟着I2C地址和写位,随后跟着是需要读取的寄存器地址。一旦接收到ICM20948的ACK信号,Master就会发出一个START信号,之后,ICM20948发出一个ACK和数据。通信以一个有Master发出的NACK信号和STOP位结束。NACK的定义为在第9个时钟周期,SDA保持高电平。如下图示:
Read.png

I2C术语:
I2C terms.png



SPI:
SPI是一个4线同步串行接口,有两根控制线和两个数据线。ICM20948在标准Master-Slave SPI系统中,总是以Slave身份执行操作。
相对于Master,SCLK,SDO和SDI是在Slave设备间共享的,每个SPI Slave设备有它自己的片选CS信号线(由Master控制)。
CS为低时激活传输同时在结束时回到高电平(非激活状态)。在同一时刻,只有一根CS线处于激活状态,确保在给定时间内只选中一根Slave。而非选中的Slave设备,CS线保持高电平状态,这会使得它们的SDO线保持高阻态以便不会干涉任何激活的设备。
SPI操作功能:
1.数据以MSB first和LSB last顺序传输
2.数据在SCLK上升沿锁定
3.数据在SCLK下降沿传输
4.SCLK最大频率为7MHZ
5.SPI读和写操作在16+个时钟周期内完成(两个以上字节)。第一个字节包含SPI地址,随后字节包含SPI数据。第一个字节的第一个位包含读写位且1表示读,0表示写。随后的7位包含寄存器地址。在多个读写字节情况下,数据两个以上字节。
spi formate.png
支持单个或突发读写:
burst read write.png


axes orientation.png
 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!