气压计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);										//得到温度