In this project I will present some techniques that can be used to design and build ultra-low power, battery powered Bluetooth Low Energy (BLE) projects. Depending on the application, battery life of up to 10+ years can be achieved.
The techniques presented bellow were tested on the RSL10-SENSE-GEVK development kit,.
A project in which I used the RSL10 along with this techniques is the nanoSense:Motion, an Ultra-Low Power Motion / Human Presence Sensing device with Bluetooth Low Energy connectivity:
I will also showcase how the RSL10 along with some other components are used in this project to obtain a battery life of multiple years while actively sensing the environment.
The RSL 10 BLE SoCThe RSL 10 is a Bluetooth Low Energy (BLE) System-on-Chip (SoC) made by ON Semiconductor. It is Bluetooth 5 capable, and features Arm Cortex-M3 processor and low power Digital Signal Processor (DSP).
My first contact with the OnSemi RSL10 SoC was the RoadTest review I did for it on Element14. What I remarked is the its ultra-low power consumption. The power consumption in sleep mode with wake-up on external signal is as low as 25nA, while even when transmitting over BLE the current consumption stays well bellow 1mA.
The RSL 10 comes in multiple packages like QFN and WLCSP, and also comes in a System-in-Package (SiP) format:
ON Semi also has some (may be a little bit to many :D) development kits featuring the RSL 10 in different packages / applications.
> Development KitsThe RSL10-SENSE-GEVK small form factor, battery powered device that combines the RSL10 SiP with an seven on-board sensors.
The board comes with the following sensors:
- NOA1305 Ambient Light Sensor(ON Semi)
- N24RF64 RFID EEPROM(ON Semi)
- BME680 Environmental Sensor(Bosch)
- BHI160 3-axis accelerometer & gyroscope(Bosch)
- BMM150 3-axis magnetometer (Bosch)
- INMP522 digital output MEMS microphone(InvenSense)
It runs from a RS2032 battery and features a easy to use mobile app that allows efficient sensor monitoring:
An another RSL10 development board I own, is the RSL10-002GEVB evaluation board featuring the QFN package of the RSL10. I road tested this board last year on Element14.
The board has all the GPIO pins exposed and it also has headers that allows precisely measuring the power consumption of the device. This makes the board very useful for prototyping.
Getting StartedTo get started with the RSL10-SENSE-GEVK we to install the RSL10 Sensor Beacon app:
The board is pre-loaded with a custom firmware that is able to communicate with the app, so all we need to do is to insert a CR2032 battery, and the board should show up in the app:
The next step is select the sensors we want to use:
After this the app should receive data from the board:
In case we wan't to add new functionality, we need to change the device firmware. To do this we will need an Integrated Development Environment (IDE). On Semi provides this in the form of the RSL10 SDK (Software Development Kit) and BDK (Bluetooth Low Energy Development Kit).
To install it we need to have to do the following steps:
- install Java, J-Link driver
- install the RSL10 SDK
- install ARM CMSIS package
- install ARM FreeRTOS CMSIS package
- download & install ON Semi BDK CMSIS package
The IDE looks like this:
To program the board we need to use a SWD or J-Link debugger. The kit comes with Segger J-Link Lite CortexM:
In an environment sensing application there are typically two types of major components involved:
- SoC / Micro-Controller
- Sensor + Amplification Circuit
Each of these contributes the overall power consumption of the device.
To be able to obtain a low very low power consumption we need to do both some hardware and some software tricks.
> HardwareModern micro-controllers / SoC-s like the RSL10 usually comes with some kind of sleep modes. These allows powering down most parts of the SoC-s, reducing the power consumption to the range of nano / micro amps. The RSL 10 is exceptionally good at this, having a power consumption of just ~25 nA.
When needed, the device is usually can be woken up by a GPIO signal or an internal trigger from the RTC clock.
On the other hand, SoC-s consumer significantly more power is consumed in the active modes. Most SoC-s have build in LDO regulators, but can also implement a switching mode DC-DC converter couple of external components. Using the DC-DC converter can reduce the power consumption by about ~50%, so if we care about the power consumption it worths adding the extra components (2 in case of RSL 10) to the design.
Powering Down Sensors when Not in Used(Hardware)
On the sensing sub-circuit part we can implement feature like Sleep Mode, when we can power down the sensors when they are not in use. One of the ways to do this is to hardware switching device to cut the power to the sensing sub-circuit.
The switching device is usually some kind of transistor, but it also can be an ultra-low leakage load switch like the Vishay SiP32431.
Hardware Power-Off Mode
In can we have a really-really low capacity battery, or a SoC with a little bit higher Sleep Mode consumption than the RSL 10, it may worth implementing a complete Power Off mode.
To do this a load switch similar to the above can be used, with the Analog / Sensor Sub-Circuit replaced with the entire circuit.
To be able to power up the device, we also need something like a push button. This will be connected between VCC and PowerEnable, and it's purpose is to give an initial control signal to our switching device. After is SoC is started up, it can take over the control of the PowerEnable signal.
> SoftwareOn the Software side we usually play around with the different Power / Functioning Modes of our SoC and Sensors.
Power Down Sensors when Not in Used(Software)
Many of the modern (digital) sensors have Sleep Modes as well. The power consumption is this mode is usually a couple of micro-amps. To put a sensor in Sleep Mode we usually need to set some I2C Registers.
On many sensors we also have the possibility to adjust different functioning parameters, that affect the power consumption. On of the most common one is the sampling rate, with lower sampling rates resulting in lower power consumption.
Keep the RF Sub-System Down When Not Used
On Bluetooth Low Energy SoC like the RSL 10, the highest power consumption is generated when the the RF subsystem is on, and the chip is either receiving or sending data over the air.
To reduce power consumption it may worth powering down the RS subsystem off the chip when is not used. This is usually done by setting some internal registers of the chip.
SoC in Sleep Mode with Wake Up on Real Time Clock
In sensing applications, continuous monitoring of the environment is often not necessary. For example in the case of a wireless thermostat, it would be enough to check the room temperature every minute.
To implement something like this, we can use the Sleep Mode of the RSL 10 along with the wake-up on internal Real Time Clock functionality. In this mode we can configure the internal Real Time Clock of the SoC to wake up the SoC after a pre-configured time delay.
The source code for something like this looks like:
/* Enable XTAL32K oscillator amplitude control
* Set XTAL32K load capacitance to 0x38: 22.4 pF
* Enable XTAL32K oscillator */
ACS->XTAL32K_CTRL = \
(XTAL32K_XIN_CAP_BYPASS_DISABLE |
XTAL32K_AMPL_CTRL_ENABLE |
XTAL32K_NOT_FORCE_READY |
(XTAL32K_CLOAD_TRIM_VALUE << ACS_XTAL32K_CTRL_CLOAD_TRIM_Pos) |
(XTAL32K_ITRIM_VALUE << ACS_XTAL32K_CTRL_ITRIM_Pos) |
XTAL32K_IBOOST_DISABLE |
XTAL32K_ENABLE);
/* Wait for XTAL32K oscillator to be ready */
while (ACS_XTAL32K_CTRL->READY_ALIAS != XTAL32K_OK_BITBAND);
/* Set delay and wake-up sources, use
* WAKEUP_DELAY_[ 1 | 2 | 4 | ... | 128],
* WAKEUP_DCDC_OVERLOAD_[ENABLE | DISABLE],
* WAKEUP_WAKEUP_PAD_[RISING | FALLING],
* WAKEUP_DIO*_[RISING | FALLING],
* WAKEUP_DIO*_[ENABLE | DISABLE] */
sleep_mode_init_env.wakeup_cfg = WAKEUP_DELAY_64 |
WAKEUP_WAKEUP_PAD_RISING |
WAKEUP_DIO3_DISABLE |
WAKEUP_DIO2_DISABLE |
WAKEUP_DIO1_DISABLE |
WAKEUP_DIO0_DISABLE;
/* Set wake-up control/status registers, use
* PADS_RETENTION_[ENABLE | DISABLE],
* BOOT_FLASH_APP_REBOOT_[ENABLE | DISABLE],
* BOOT_[CUSTOM | FLASH_XTAL_*],
* WAKEUP_DCDC_OVERLOAD_CLEAR,
* WAKEUP_PAD_EVENT_CLEAR,
* WAKEUP_RTC_ALARM_CLEAR,
* WAKEUP_BB_TIMER_CLEAR,
* WAKEUP_DIO3_EVENT_CLEAR,
* WAKEUP_DIO2_EVENT_CLEAR,
* WAKEUP_DIO1_EVENT_CLEAR],
* WAKEUP_DIO0_EVENT_CLEAR */
sleep_env->wakeup_ctrl = PADS_RETENTION_ENABLE |
BOOT_FLASH_APP_REBOOT_DISABLE |
BOOT_CUSTOM |
WAKEUP_DCDC_OVERLOAD_CLEAR |
WAKEUP_PAD_EVENT_CLEAR |
WAKEUP_RTC_ALARM_CLEAR |
WAKEUP_BB_TIMER_CLEAR |
WAKEUP_DIO3_EVENT_CLEAR |
WAKEUP_DIO2_EVENT_CLEAR |
WAKEUP_DIO1_EVENT_CLEAR |
WAKEUP_DIO0_EVENT_CLEAR;
SoC in Sleep Mode with Wake Up on GPIO
In case we use a sensor (or ADC) with autonomous monitoring capability we can use the Sleep Mode of the SoC with wake-up on GPIO functionality. Sensors with autonomous monitoring usually have an Alert output pin that can be used either as an interrupt source, or as a wake-up source.
In this mode the SoC configures the sensor for autonomous monitoring with a pre-configured condition, then it goes to Sleep Mode. When the sensor detect the pre-configured condition it generated the Alert signal and wakes up the sensor.
Showcase: nanoSense:MotionA project in which I used the RSL10 is the nanoSense:Motion, an Ultra-Low Power Motion / Human Presence Sensing device with Bluetooth Low Energy connectivity:
The device is based on the Kemet PL-N823-01 Pyroelectric Infrared Sensor and the OnSemi RSL10 Bluetooth Low Energy SoC.
The main features of the device are:
- Wireless Motion Sensing - battery powered motion sensing with wireless data transmission
- Bluetooth Low Energy (BLE) connectivity - motion events are advertised over BLE
- Powered from a CR2023 battery - up to 10 years of battery life
- Motion Sensing with overall power consumption as low as *1.5 μA @ 3.3V (*)
- Small form factor - 22 x 33 mm
- Power Off mode with 25 nA power consumption
- Adjustable Sensitivity - for trade-off between high sensitivity and low current consumption
- Support for the Lens used by Kemet SS-430 module
- Up to 5m Sensing range (with lens)
The device uses the QFN48 package RSL10, with a design evolving the use of the DC-DC converter:
It is programmed by a SWD programmer:
To keep the power consumption low the RSL 10 most of the time is in Sleep Mode. An ADC with autonomous monitoring capability, the Texas Instruments ADS7142, is used to monitor to PIR sensor's output. When the output breaches a pre-configured threshold the ADS7142 generates a signal on its ALERT pin.
The ALERT signal wakes up the RSL 10 and the event is broadcasted over Bluetooth Low Energy.
The flow diagram of the app looks like this:
For more details about this device, please check out my nanoSense:Motion - Ultra Low Power Wireless Motion Sensing project.
Cheers!
Comments