气压计FBM320
作者:
Crazepony5.3以上使用的气压计FBM320。 FBM320气压传感器是一种新的高分辨率气压传感器,采用 SiP(System in Package)封装技术,将采 MEMS工艺的气压传感器芯片与采用 CMOS 工艺的信号调理芯片整合到同一个封装内,且提供标I2C 及 SPI 数字通信串口,可以跟主芯片进行通信。本身包含气压校准与温度补偿,可减少误差。
##FBM320的I2C操作命令
- FBM320的I2C地址
FBM320的地址前6位固定,为“110110”,第7位比较特殊,由芯片上的”CSB”引脚决定,浮空或拉高时,代表使用的是I2C,此时第7位为1;当拉低时,为选择SPI通信,此时第7位为0,所以I2C地址是0X1101101(0X6D)。
注:Crazepony中地址会写入8位中的前7位,实际上写的是0X0110110,所以需要把地址左移一位,可以是0X11011010(0XDA)或者0X11011011(0XDB),最后一位都会被忽略。
下面以I2C连接模式讲解,符合Crazepony硬件上的连接。对FBM320芯片操作,只有6个命令。
-
复位芯片
复位FBM320芯片,往FBM320的I2C地址写入0XB6即可。注:每次启动芯片需等待15ms,让芯片准备完毕。
IICwriteOneByte( FBM320Address, 0xB6); // Reset Device
-
who am I
判断芯片本身是否为FBM320,可以往地址读取0X6B寄存器, 如果返回0X42则说明正确,否则为读取方式错了或者芯片出现了故障。
I2C_ReadOneByte(FBM320Address, 0x6B); //return 0x42
-
获取校准参数
FBM320出厂时,每个芯片在各个数据都会有各自的偏差,这些偏差记录在了芯片的寄存器里,需要读取对后面的温度与气压进行校正运算。
一共有10个参数,20个寄存器地址(每个参数为16位,1个寄存器地址读出的数据为8位)
例,读寄存器R0:
uint16_t R0 = (I2C_ReadOneByte(FBM320Address, 0XAA) << 8) | I2C_ReadOneByte(FBM320Address, 0XAB);
同理,读取其它参数:
uint16_t R1 = (I2C_ReadOneByte(FBM320Address, 0XAC) << 8) | I2C_ReadOneByte(FBM320Address, 0XAD); . . . uint16_t R9 = (I2C_ReadOneByte(FBM320Address, 0XD0) << 8) | I2C_ReadOneByte(FBM320Address, 0XF1);
-
温度转化
往寄存器地址0XF4写入0X2E即可。
注:转化时间需要2.2ms以上
IICwriteByte(FBM320Address, 0XF4, 0X2E);
-
气压转化
往寄存器地址0XF4写入0XF4即可。 注:转化时间需要9.8ms以上
IICwriteByte(FBM320Address, 0XF4, 0XF4);
-
获取转化后的数据
数据为24位,保存在地址为0XF6、0XF7、0XF8的寄存器里。
例如获取转化温度:
IICwriteByte(FBM320Address, 0XF4, 0X2E); //开始转化温度 delay_us(2200); //等待转化完成 int32_t getUT = ((uint32_t)I2C_ReadOneByte(FBM320Address, 0xF6) << 16) | ((uint16_t)I2C_ReadOneByte(FBM320Address, 0xF7) << 8) | I2C_ReadOneByte(FBM320Address, 0xF8); //得到温度