低功耗气压传感器BM1383AGLV

rohm社区举办活动的时候拿到了评估的传感器,在arduino上面跑过一次,今天再次拿出来用其他mcu跑一次,顺带总结一下。正品现货可以找rohm原厂代理代理唯样,新人还有活动。
  1、基本特性
压阻式气压传感器 内置温度补偿 i2c接口 压力范围:300hpa~1100hpa 平均功耗:3ua 运行温度:-40℃~85℃ 小封装 :2.50mm 2.50mm1.0mm 相对精度:±0.12hpa 绝对精度:±1hpa 主要应用:智能手机、医疗保健、移动设备等 2、引脚描述
dreg和vss之间需要接一个旁路电容,大小为0.22uf;
vdd电源供电,vss接gnd,scl、sda用于i2c通讯,drdy引脚一般用于触发mcu外部中断。
3、寄存器描述
4、软件设计
4.1、寄存器定义以及参数设置定义
#define bm1383aglv_i2c_addr          0x5d
#define bm1383aglv_id1               0x0f 
#define bm1383aglv_id2               0x10
#define bm1383aglv_pwr_down          0x12 
          //pwr_down[0] 
        #define power_down                  0x00 
        #define active                      0x01  
          //reserved[7:1]
#define bm1383aglv_reset             0x13 
          //rstb[0] 
        #define measurement_reset           0x00 
        #define measurement_active          0x01 
          //reserved[7:1]
#define bm1383aglv_mode_control      0x14 
          //mode [1:0] 
        #define mode_stand_by              0x00 
        #define mode_one_shot              0x01 
        #define mode_continuous            0x02 
        #define mode_prohibition           0x03 
          //reserved[2] 
          //reserved[3] 
        #define default_1                  0x08 
          //drdy pin enable[4] 
        #define drdy_pin_enable            0x10 
        #define drdy_pin_disable           0x00 
          //set the average number of measurement data[7:5] 
        #define  ave_num_1                  0x00 
        #define ave_num_2                  0x20 
        #define ave_num_4                  0x40 
        #define ave_num_8                  0x60 
        #define ave_num_16                 0x80 
        #define ave_num_32                 0xa0 
        #define ave_num_64                 0xc0 
        #define ave_num_inhibit            0xe0
#define bm1383aglv_status            0x19 
          //pressure and temperature measurement data ready bit[0] 
        #define data_output_available       0x01 
        #define data_output_not_available   0x00 
          //reserved[7:1]
#define bm1383aglv_pressure_msb      0x1a 
#define bm1383aglv_pressure_lsb      0x1b 
#define bm1383aglv_pressure_dec      0x1c 
          //pressure data output (decimal extension 6bit)[7:2] 
          //reserved[1:0]
#define bm1383aglv_temperature_msb   0x1d 
#define bm1383aglv_temperature_lsb   0x1e
4.2、读取芯片id
设备id一般都是一个固定值,芯片出厂的时候已经固化在芯片里面了,只读,可用于检测i2c通信是否正常、检测芯片是否存在。
bool bm1383aglvcheck(void) 

  uint16 chip_id=0;
chip_id=bm1383aglv_readregu16(bm1383aglv_id1);
if(chip_id==0x32e0) 
  { 
    return true; 
  } 
  else 
  { 
    return false; 
  } 
}
4.3、芯片初始化设置
主要是3个寄存器power_down(12h)、reset(13h) 、mode_control(14h),其中
power_down(12h)主要是设置芯片上电启动:
reset(13h)主要设置芯片启动测量控制功能:
mode_control(14h)主要用于设置芯片测量模式、测量次数、以及是否使用drdy引脚:
芯片手册中也给了启动流程,先是往寄存器12h中写入0x01,延时至少2ms之后,往寄存器13h中写入0x01即可:
void bm1383aglvinit(void) 

   bm1383aglv_writeregu8(bm1383aglv_pwr_down,active);   
    //设置芯片上电 
    _delay_ms(5);//延时必须大于2ms 
   bm1383aglv_writeregu8(bm1383aglv_reset,measurement_active);   
    //启动测量功能 
   bm1383aglv_writeregu8(bm1383aglv_mode_control,mode_continuous|default_1| 
                                                          drdy_pin_disable|ave_num_8);   
    //持续测量模式、每次测量8次、不使能drdy引脚 
}
4.4、读取数据
读取数据之前,我们要先判断一下是否采样完成,涉及到寄存器status(19h),当bit[0]为1的时候,表示采样完成,可以读取数据:
寄存器pressure_msb(1ah) 、pressure_lsb(1bh)、pressure_lsb(least 6bit) ( 1ch ) 就是采样出的压力值,需要转换为实际的压力值:
寄存器temperature_msb(1dh) 、temperature_lsb(1eh)是采样出的温度值,同样的需要转化为实际温度:
void bm1383aglvread(void) 

  uint32 pressure_count=0; 
  uint8 pressure_m , pressure_l,pressure_d; 
  float pressure;
uint32 temperture_count=0; 
  uint8 temperture_m , temperture_l; 
  float temperture;
while(bm1383aglv_readregu8(bm1383aglv_status)&data_output_available 
                                            !=data_output_available);//等待当前测量完成
pressure_m=bm1383aglv_readregu8(bm1383aglv_pressure_msb); 
  pressure_l=bm1383aglv_readregu8(bm1383aglv_pressure_lsb); 
  pressure_d=bm1383aglv_readregu8(bm1383aglv_pressure_dec);
pressure_d=pressure_d>>2;//高6位有效
pressure_count=pressure_m<<14; 
  pressure_count+=pressure_l<<6; 
  pressure_count+=pressure_d;
pressure=pressure_count/2048.0;
printf(“pressure:%.2f hpa\r\n”,pressure);
temperture_m=bm1383aglv_readregu8(bm1383aglv_temperature_msb); 
  temperture_l=bm1383aglv_readregu8(bm1383aglv_temperature_lsb);
temperture_count=temperture_m<<8; 
  temperture_count+=temperture_l;
temperture=temperture_count/32.0;
printf(“temperture:%f ℃\r\n”,temperture);  
}
4.5、测试读取数据
4.6、进入休眠
void bm1383aglvsleep(void) 

  bm1383aglv_writeregu8(bm1383aglv_reset,measurement_reset); 
   _delay_ms(5); 
  bm1383aglv_writeregu8(bm1383aglv_pwr_down,power_down);   
}

边缘控制器在边缘计算中的作用是什么
HT与OKB的通证销毁在区块链业界中产生了哪些影响
CVPR 2019竞赛第一解决方案分享
大唐电信1.72亿美元收购中芯国际16.6%股权
电镀工艺对人体有害吗
低功耗气压传感器BM1383AGLV
家庭电路的组成及作用
秘密收购室内定位公司 苹果要闷声搞事情?
2035年5G在全球创造的潜在销售活动将达12.3万亿美元
iPhone 8最新消息:iphone8中国市场遇冷!首销半小时还没卖完,小米MIX2却58秒售罄
MSN搜索测试版现身 结束与雅虎合作为时不远
三菱PLC和昆仑通态之间无线通信(通信口)
剖析AI芯片市场:为什么要加强深度学习
什么是边缘计算网关,它对工业联网的作用是什么
知用近场探头在辐射干扰源定位测试的应用
基于5G网络的确定化网络实现架构和关键技术分析
如何将220V交流电转化成12V直流电呢?有哪些方法?
骨传导耳机什么牌子的好、骨传导蓝牙耳机品牌推荐
31日首款WP手机lumia800c开售 提供黑白双版本
高通:高集成解决方案产品优势