SPI实验:使用 I.MX6U 的 SPI 接口来驱动 ICM-20608,读取 ICM-20608 的六轴数据
本文来了解一下ICM20608传感器,是一个六轴传感器,作为 SPI从设备使用。
ICM20608传感器的参考文档在 “/硬件资料/芯片资料” 目录下,分别为“ICM-20608-G Datasheet Revision 1.0.pdf”与 “ICM-20608-G Register Maps and Description Revision V1.0.pdf” 两个文档。
“ICM-20608-G Datasheet Revision 1.0.pdf”文档是数据手册。
“ICM-20608-G Register Maps and Description Revision V1.0.pdf” 文档是寄存器描述的手册。
通过参考 ““ICM-20608-G Datasheet Revision 1.0.pdf ” 数据手册文档可知:
ICM20608是六轴传感器。包括 3 轴陀螺仪和 3 轴加速度(三轴的意思:支持 X,Y 和 Z 三轴输出)。
(1) ICM-20608 内部有一个 512 字节的 FIFO。
(2) 陀螺仪的量程范围可以编程设置,可选择±250,±500,±1000 和±2000°/s,
加速度的量程范围也可以编程设置,可选择±2g,±4g,±8g 和±16g。
(3) 陀螺仪和加速度计都是16 位的 ADC。
(4) 并且支持 I2C 和 SPI 两种协议,使用 I2C 接口的话通信速度最高可以达到 400KHz,使用 SPI 接口的话通信速度最高可达到 8MHz。
所以,在后面用代码来配置IMX6ULL的SPI外设时,时钟就不可以超过 8MHz。
(5) ICM-20608G的 “WHO_AM_I ”寄存器,地址为 0X75,默认值是0XAF。这个寄存器保存了器件的ID。(参考 “ICM-20608-G Register Maps and Description Revision V1.0.pdf” 寄存器文档)
如果开发板上用的另外一个传感器ICM20608D,那么“WHO_AM_I ”寄存器的值可能是为0XAE。
后面需要做一些参数的配置。地址0X3B~0X48 就是我们需要读取的寄存器的值。下面介绍通过ADC 的值来计算陀螺仪的角速度或加速度计的加速度值。
如果陀螺仪所设置的分辨率范围为 ±250,即 -250~+250,也就是 500°/s。
ADC数据的位数为 16位,即 0~65535,也就是 65536。那么一度对应多大的数据呢?
65536/500 = 131.07
举例说明:
如果所设置的分辨率范围为 ±250,读取到的 ADC值是 1000,那么陀螺仪的角速度是多少?
当前陀螺仪的角速度为:
1000 / 131 = 7.6°/s
加速度计计算公式与陀螺仪相似。
举例说明:
如果加速度计设置的分辨率范围为 ±2,即 -2~+2,也就是 4。
ADC值的位数为 16位,即 0~65535,也就是 65536。一度则对应多大的 ADC值呢?
65536/4 = 16384
如果此时读取到的 ADC值为 2,则这时的加速度计的加速度是多少?
3 * 16384 = 32767