旧乡故客
发表于: 2025-3-28 11:39:46 | 显示全部楼层

气压传感器是健身追踪等可穿戴设备和其他应用中的关键组件,可以准确测量高度。BMP585气压传感器是博世传感器公司推出的最新一代传感器。它精度卓越、功耗超低,适用于健身追踪、室内定位等诸多环境,为高度追踪应用提供卓越精度。BMP585气压传感器占位面积较小,具有出色的设计灵活性,是一种单一封装解决方案,客户可以轻松集成到多种设备中,如智能手表、可穿戴设备、耳戴式设备、家用电器、智能家居和工业产品中。


在本篇文章中,我们将使用STM32 NUCLEO开发板通过SPI方式连接YBX-BMP585气压传感器模块,实现读取当前的气压值和温度值。


所需的组件

●  NUCLEO-G070RB开发板(淘宝链接

●  YBX-BMP585大气压力传感器模块(淘宝链接

●  连接跳线

●  Micro USB线缆


YBX-BMP585大气压力传感器模块

该模块采用博世传感器的最新一代气压传感器BMP585。该气压传感器具有300hPa至1250hPa的宽测量范围和±30Pa的绝对精度。 BMP585针对高性能应用进行了优化,如±6Pa的适应测量。这一特性相当于±50cm的高度差和0.5Pa/K的偏移温度系数(TCO)。BMP585传感器提供极高的精度,可测量仅有几厘米的高度变化。它还可以检测健身训练中的动作,甚至可以检测到个人引体向上或俯卧撑的水平。同时,由于其极其坚固耐用,用户不必担心环境条件。BMP585具有凝胶填充腔体,通过合适的集成概念,可以最大程度地防止水和其他液体(如化学品)进入。

bmp585.jpg


YBX-BMP585模块板载一颗电压LDO,支持3.3V-5V电源输入。模块支持SPI和I2C接口连接,并通过8针2.54mm间距的排针引出。该模块默认的I2C地址是0x47,可以将SDO(ADR引脚)拉高IC地址变成0x46。

YBX-BMP585大气压力传感器模块.jpg

硬件连接方式

NUCLEO-G070RB开发板可以通过SPI和I2C两种方式连接至YBX-BMP585大气压力传感器模块。本篇文章主要介绍SPI方式,以下是SPI连接方式:

YBX-BMP585模块通过SPI接口与STM32 Nucleo的硬件连接.jpg


BMP585模块连接到NUCLEO-G070RB的SPI1接口,对应的引脚分别是PA5(SCK)、PA6(MISO)和PA7(MOSI),片选引脚CS连接到PB0。BMP585模块的VCC连接到+5V引脚,GND引脚连接到NUCLEO-G070RB的任意GND引脚。

按照图示连接各个组件,实际连接如下:

实物连接.jpg


代码

本文使用的代码基于博世提供的驱动BMP5-Sensor-API,该文件可以从GitHub下载。


使用STM32CubeMX工具根据硬件连接配置具体的引脚和接口参数,然后进行代码移植。需要重新编写以下函数的实现内容:

  1. static int8_t get_sensor_data(const struct bmp5_osr_odr_press_config *osr_odr_press_cfg, struct bmp5_dev *dev);
  2. BMP5_INTF_RET_TYPE bmp5_spi_read(uint8_t reg_addr, uint8_t *reg_data, uint32_t length, void *intf_ptr);
  3. BMP5_INTF_RET_TYPE bmp5_i2c_read(uint8_t reg_addr, uint8_t *reg_data, uint32_t length, void *intf_ptr);
  4. BMP5_INTF_RET_TYPE bmp5_spi_write(uint8_t reg_addr, const uint8_t *reg_data, uint32_t length, void *intf_ptr);
  5. BMP5_INTF_RET_TYPE bmp5_i2c_write(uint8_t reg_addr, const uint8_t *reg_data, uint32_t length, void *intf_ptr);
  6. void bmp5_delay_us(uint32_t period_us, void *intf_ptr);
  7. int8_t bmp5_interface_init(struct bmp5_dev *bmp5_dev, uint8_t intf);
复制代码

在主函数中读取当前的大气压力值:

  1. /* Initialize all configured peripherals */
  2.   MX_GPIO_Init();
  3.   MX_USART2_UART_Init();
  4.   MX_SPI1_Init();
  5.   /* USER CODE BEGIN 2 */
  6.         
  7.         printf("\nBMP585 SPI Test\n");
  8.         printf("Bolgen Studio\n");        
  9.         
  10.         /* Interface reference is given as a parameter
  11.          * For I2C : BMP5_I2C_INTF
  12.         * For SPI : BMP5_SPI_INTF
  13.         */
  14.         rslt = bmp5_interface_init(&dev, BMP5_SPI_INTF);
  15.         bmp5_error_codes_print_result("bmp5_interface_init", rslt);
  16.         
  17.         if (rslt == BMP5_OK)
  18.   {
  19.         rslt = bmp5_init(&dev);
  20.         bmp5_error_codes_print_result("bmp5_init", rslt);

  21.         if (rslt == BMP5_OK)
  22.         {
  23.             rslt = set_config(&osr_odr_press_cfg, &dev);
  24.             bmp5_error_codes_print_result("set_config", rslt);
  25.         }

  26.         if (rslt == BMP5_OK)
  27.         {
  28.             rslt = get_sensor_data(&osr_odr_press_cfg, &dev);
  29.             bmp5_error_codes_print_result("get_sensor_data", rslt);
  30.         }
  31.     }

  32.   /* USER CODE END 2 */

  33.   /* Infinite loop */
  34.   /* USER CODE BEGIN WHILE */
  35.         while (1)
  36.         {
  37.     /* USER CODE END WHILE */

  38.     /* USER CODE BEGIN 3 */
  39.                
  40.                 HAL_Delay(50);
  41.         }
复制代码

编译并上传至STM32 NUCLEO开发板中。


测试结果

使用串口工具打开对应的虚拟串口,接收数据如下:

BMP585串口输出.jpg



跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 19 | 回复: 21



手机版|

GMT+8, 2025-4-21 01:44 , Processed in 0.038135 second(s), 7 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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