请选择 进入手机版 | 继续访问电脑版
搜索
热搜: ROHM 模拟 车载
查看: 3612|回复: 3

[活动] 【传感器套件试用-气压传感器BM1383AGLV使用评测】

  [复制链接]

该用户从未签到

9

主题

388

帖子

0

精华

高级会员

最后登录
2024-3-25
发表于 2019-7-16 17:35:42 | 显示全部楼层 |阅读模式
本帖最后由 andeyqi 于 2019-7-16 20:17 编辑

战舰板介绍资料链接如下:https://rohm.eefocus.com/activity/rohm2019/sensor-board
BM1383AGLV是压电电阻式气压传感器。在IC内部进行MEMS的温度补偿处理,可轻松获取气压信息。

传感器模块原理图如下及datasheet中IIC协议描述如下:

PCB.png

7位丛机地址如下:1. Slave address : “1011101”
iic.png
regmap.png

传感器设定流程:
依次往0x12,0x13寄存器写入1,中间需要间隔2ms.
pow_seq.png

start_seq.PNG


continue_mea.png
  1. #include <rtthread.h>
  2. #include <rtdevice.h>
  3. #include <board.h>
  4. #include <stdio.h>
  5. #include "finsh.h"
  6. #include "i2c_utilise.h"
  7. #include "bm1383.h"

  8. void bm1383_init(void)
  9. {
  10.         struct rt_i2c_bus_device* bus = NULL;
  11.         rt_uint8_t deviceid = 0,reg = 0;
  12.         rt_uint8_t buff[2] = {0};
  13.         
  14.     bus = rt_i2c_bus_device_find("i2c1");
  15.         if(!bus)
  16.         {
  17.                 rt_kprintf("can't find i2c device\n");
  18.                 return ;
  19.         }
  20.         write_cmd(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_ID);
  21.         read_reg(bus,BM1383AGLV_DEVICE_ADDRESS,1,&deviceid);
  22.         if(deviceid != BM1383AGLV_ID_VAL)
  23.         {
  24.                 rt_kprintf("can't find device\n");
  25.                 return;
  26.         }
  27.         rt_kprintf("deviceid is 0x%x\n",deviceid);
  28.         //1. Power supply start-up sequence
  29.         write_reg(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_POWER_DOWN, BM1383AGLV_POWER_DOWN_VAL);        
  30.         rt_thread_mdelay(2);
  31.         write_reg(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_RESET, BM1383AGLV_RESET_VAL);        
  32.         //2 set Measurement sequence: Continuous Mode
  33.         write_reg(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_MODE_CONTROL, BM1383AGLV_MODE_CONTROL_VAL);        
  34.         rt_thread_mdelay(WAIT_TMT_MAX);
  35. }

  36. void bm1383_get_rawval(rt_uint8_t* val)
  37. {        
  38.         struct rt_i2c_bus_device* bus = NULL;
  39.         rt_uint8_t status = 0;
  40.         bus = rt_i2c_bus_device_find("i2c1");
  41.         if(!bus)
  42.         {
  43.                 rt_kprintf("can't find i2c device\n");
  44.                 return ;
  45.         }
  46.         write_cmd(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_PRESSURE_MSB);
  47.         read_reg(bus,BM1383AGLV_DEVICE_ADDRESS,5,val);
  48. }


  49. void bm1383_get_val(float *press, float *temp)
  50. {
  51.         unsigned char val[6];
  52.         signed short mag[3];
  53.         unsigned long rawpress;
  54.         short rawtemp;
  55.         
  56.         bm1383_get_rawval(val);
  57.         //rt_kprintf("val[0] %d val[1] %d val[2] %d val[3] %d val[4] %d val[5] %d \n",\
  58.         //        val[0],val[1],val[2],val[3],val[4],val[5]);
  59.         rawpress = (((unsigned long)val[0] << 16) | ((unsigned long)val[1] << 8) | val[2]&0xFC) >> 2;
  60.         if(rawpress == 0) {
  61.           rt_kprintf("error rawpress = 0\n");
  62.         }
  63.         *press = (float)rawpress / HPA_PER_COUNT;        
  64.         rawtemp = ((short)val[3] << 8) | val[4];        
  65.         if (rawtemp == 0) {
  66.           rt_kprintf("error rawtemp = 0\n");
  67.         }
  68.         *temp = (float)rawtemp / DEGREES_CELSIUS_PER_COUNT;
  69. }

  70. long bm1383(void)
  71. {
  72.         static rt_uint8_t isinit = 0;
  73.         rt_uint16_t count = 1000;        
  74.     float data[3] = {0.0};
  75.     char buff[50] = {0};
  76.         
  77.         if(!isinit)
  78.         {
  79.                 bm1383_init();
  80.                 isinit =1;
  81.         }

  82.         while(count--)
  83.         {
  84.                 bm1383_get_val(&data[0],&data[1]);
  85.                 sprintf(buff,"press=%.3f temp=%.3f ℃",data[0],data[1]);
  86.         rt_kprintf("%s\n",buff);
  87.                 rt_thread_mdelay(500);
  88.         }
  89.     return 0;
  90. }
  91. FINSH_FUNCTION_EXPORT(bm1383, show bm1383 data);
  92. MSH_CMD_EXPORT(bm1383, show bm1383 data);
复制代码
数据转换规则如下:
data.png

shell 中输入bm1383 start测量数据,标准大气压下输出气压,温度数值如下。


data.png


bm1383aglv-e.pdf (1.68 MB, 下载次数: 0)
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2022-9-1 17:50
  • 签到天数: 2 天

    [LV.1]初来乍到

    19

    主题

    5661

    帖子

    0

    精华

    论坛元老

    最后登录
    2024-3-28
    发表于 2019-7-17 08:52:41 | 显示全部楼层
    学习学习
    rohm.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4215

    主题

    5054

    帖子

    11

    精华

    管理员

    最后登录
    2024-3-28
    发表于 2019-7-17 09:27:22 | 显示全部楼层
    感谢分享
    回复

    使用道具 举报

    该用户从未签到

    9

    主题

    388

    帖子

    0

    精华

    高级会员

    最后登录
    2024-3-25
     楼主| 发表于 2019-7-17 09:41:09 | 显示全部楼层

    应该是感谢管管给予评测机会,再次感谢。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    Archiver|手机版|小黑屋|罗姆半导体技术社区

    GMT+8, 2024-3-29 00:32 , Processed in 0.099860 second(s), 16 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表