BMP580, BMP581, BMP585 Pressure & Temperature Sensors
Contents
Description
The BMP580, BMP581 and BMP585 barometric pressure and temperature sensor chips are manufactured by Bosch Sensortec., a subsidiary of the German Bosch Group. They are the successor to the BMP3xx (BMP384/BMP388/BMP390) series.
Foremost they are regarded as barometric pressure sensors. The temperature sensing capability is an added bonus for the user. Temperature is required as part of the compensation calculations to convert the raw digital pressure to real pressure values.
The BMP580 measures pressure with a piezo-resistive sensor while the BMP581 and BMP585 use a capacitive type sensor.
Temperature is measured with a bandgap temperature type sensor. This class of sensor relies upon the temperature dependent voltage characteristic of a silicon diode. It is the most common technology used in this type of temperature sensor.
While the BMP580 uses different pressure sensing technology to the BMP581 they are both housed in identically shaped and sized packages; 10-pin LGA (Land Grid Array) with metal lid (2.0mm x 2.0mm x 0.75mm)
The BMP585 shape is very different. It is gel filled making it waterproof. The top of the sensor is in the shape of a protective well. This makes the LGA packaging larger than the other two sensors at 3.25mm x 3.25mm x 1.86mm. It also has a different pinout.
The distribution model is also interesting. The BMP580 is only available to direct customers of Bosch Sensortec. BMP581 and BMP585 are available via Bosch's distribution partners.
BMP580, BMP581 and BMP585 Comparison
The values in the following table have been sourced from the respective product datasheets.
| Parameter | BMP580 | BMP581 | BMP585 |
|---|---|---|---|
| Pressure range (hPa) | 300-1250 | ||
| Supply Voltage | 1.71 - 3.6 | 1.65 - 3.6 | |
| Current @ 1 SPS, lowest power setting (µA) |
1.3 | ||
| Pressure - relative accuracy (Pa) |
±6 | ||
| Pressure - absolute accuracy (hPa) |
±50 | ±30 | ±50 |
| Maximum sampling rate CONTINUOUS mode (Hz) |
480 | ||
Pinouts
The pinouts of the BMP580 and BMP581 are identical with 10-pins each.
The BMP585 has only 8-pins that are arranged in a different pattern to that of the other two sensors. The BMP580/BMP581 sensors have multiple ground pins that are missing from the BMP585.
Serial interface selection (I2C or SPI) is done automatically based on the status of the CSB (Chip Select) line. If pulled High, I2C is active. Similarly, if CSB is pulled Low then SPI is active.
Many users will choose to use the I2C interface. I2C has the advantage of being 2-wire, easy to use and reliable.
There is a choice of two I2C addresses:
- 0x46 : SDO pin connected to GND
- 0x47 : SDO pin connected to VDDIO.
The register map, parameters and configuration are completely identical (with the exception of CHIP ID) across all three sensors. This means that a driver developed for one sensor will work for all three.
Temperature & Pressure Measurements
This section will briefly examine options available to the user to set how sampling occurs, the precision of the results returned and the conversion of the raw values to units Celsius and hPa.
Setting precision
Temperature and precision is independently controlled by the user specifying oversampling parameters which are written to the Over Sampling register [OSR_CONFIG]. The available oversampling options available are x1, x2, x4, x8, x16, x32, x64 and x128. Generally temperature isn't oversampled beyond x2 or x4. However increasing the oversampling of pressure right up to the limit of x128 substantially increases precision and reduces signal noise.
Additionally, the BMP58x sensors have a bandwidth filter known as the IIR filter. This filter has eight separate levels (coefficients) which increasingly reduce the sample bandwidth.
This sensor is very sensitive to minor pressure variations such as caused by a door closing or groups of people moving past. The IIR filter is designed to significantly reduce or even eliminate such noise source interference.
Power Modes
Power modes determine the temperature and pressure sampling modes of operation. There are four defined power modes for these sensors: STANDBY, FORCED, NORMAL and CONTINUOUS.
STANDBYIn this power mode no measurements are undertaken. Power consumption is at a minimum. However the serial interfaces are still active for reading and writing the sensor's registers.
The last measurement values are retained and can be read at any time.
FORCEDThe simplest method of taking a measurement is the FORCED power mode. This a 'one-shot' event where the sensor is brought out of STANDBY, a measurement taken, then it resumes STANDBY.
This is the power mode to use if samples are only required infrequently.
NORMALNormal mode continuously cycles an active measurement taking followed by an inactive standby period. The period for this combined cycle of sampling and standby is user configurable by setting the output data rate (ODR) parameter. There are 31 different ODR values available ranging from a sampling rate of 240 Hz right down to 0.125 Hz (one sample per eight seconds).
This mode is an excellent choice if regular readings are required because the ongoing sampling frequency by the sensor is precisely known.
CONTINUOUSIn this mode the sensor continuously takes measurements as fast as it can. When it completes a measurement it immediately starts on the next. There is no standby period.
The output data rate is determined by the level of oversampling being applied separately to temperature and pressure.
Reading & Converting Values
Temperature and pressure raw values are each 24-bit values. A burst read of six registers is performed to get these raw values.
In previous generations of this sensor the next step involved reading trimming constants from NVM then applying some serious maths. This is now all but done on-chip.
A final conversion to values in Celsius and hPA is performed by the host microcontroller and involves a simple division on each of the temperature and pressure raw values.
FIFO Queue
The FIFO feature is a queue mechanism (First In - First Out) that when activated automatically begins storing data records. The FIFO queue first appeared in the fifth generation (BMP384, BMP388, BMP390) of these sensors.
In our view, while it worked well, the first implementation was overly complicated. That certainly has been fixed with this new generation. The FIFO now stores 32 temperature or 32 pressure readings or 16 temperature/pressure readings.
The FIFO allows a busy microcontroller to carry on with other tasks and be notified by an external interrupt when the queue is full (or near full). At this point the microcontroller can burst read the entire FIFO queue, and apply the final conversion calculations.
The number of data records in the queue can be acquired at any time. Burst reading the records automatically deletes them from the FIFO queue. However if the records currently stored are not required then the FIFO can be separately flushed by turning off the storage process.
There is, of course, much more to it then this brief summary. For more details read the product datasheet.
Reading & Writing NVM
These sensors use NVM (non-volatile memory) primarily to store trimming coefficients. These coefficients are determined and written to each chip during the manufacturing process. They are used internally by the sensor to compensate temperature and pressure during conversion to the raw values. These trimming coefficients are not needed by client programs and indeed are not externally accessible.
However there are six bytes of NVM available that can be written and read by the user. Bosch documentation suggests that this could be useful for a user's application to store final trimming values that might be needed to compensate for drift after the sensor has been soldered into place.
Writing to these bytes involves some complexity and in extreme conditions if something goes wrong the sensor can end up being bricked. If you do need access to this user NVM storage please consult the product datasheet for full details.
BMP580/BMP581/BMP585 Chip IDs
Genuine Bosch BMP580, BMP581 and BMP585 chips have the ID values 0x50, 0x50 and 0x51 respectively written to read-only memory at point of manufacture. This value can be read from the ID value register [CHIP_ID].
Additionally, these chips have what the datasheets calls the ASIC (Application-Specific Integrated Circuit) mask revision or REV_ID. The REV_ID of 0x32 is the same for all three sensors. This can be read from the [REV_ID] register.
BMP58x MicroPython Driver for micro:bit
A BMP58x MicroPython driver specifically for the BBC micro:bit has been developed as part of this series on MicroPython for the microbit. This driver will work for the BMP580, BMP581 and BMP585 sensors. The driver webpage also provides a detailed description of the driver's methods and properties with sample code.
The driver implements a fair slice of the capabilities as described in the product Datasheets. Four specifically configured sampling modes - low power/lower resolution, standard resolution, high resolution and highest resolution - are offered. A basic FIFO queue is also provided that will allow the user to explore this feature.
Also included are some basic altitude calculations.
Inertial Measurement, Magnet Field Sensing
How they work
Weather Station Sensors
How they work
Pressure, Humidity, Temperature
Distance Sensors
Images
BMP580 breakout board
Micrograph of the BMP580 sensor
Voltage regulator (1.8V) on BMP580 breakout board
BMP580 breakout board's 4.7kΩ pullup resistors
BMP585 breakout board
Micrograph of the BMP585 sensor
BMP585 breakout board's 10kΩ pullup resistors