Saturday, November 5, 2016

Converting my Arduino Mini Pro NRF24L01+ datalogger for low-power use

 I have been running a datalogger on my Raspberry Pi for a couple of years. It receives measurements from other devices in my home using a NRF24L01+ transceiver. Reasons to use this technology are mainly :
  • cost 
  • isolation from internet/intranet
There are 2 types of clients sending data to the Datalogger :
  • Other Raspberry clients
  • Arduino Mini-Pro  
I did some experiments when I first tested the NRF24L01+ transceivers but I never managed to make the clients really low-power such as to make them independant from mains power.
I did some experiments with the Watchdog timer in order to put the Arduino in to PowerDown mode, but I never got satisfied with the battery life of the setup. I could cut down power to a level where my 3v NiMH (2200 mAh) could last approx 3 weeks.I use 8 WDT cycles of 8s in order to send ambient data approx. every minute to the central gateway.

This weekend I jumped back in to the power optimisations and here are the results :
  • Mode 1 : Running unmodified Mini-Pro (with powerled, LDO)
  • Mode 2 : Running Mini-Pro with powerled removed (1-1,5 mA saved)
  • Mode 3 : Running Mini-Pro with powerled and LDO regulator removed (-50%)
  • Mode 4 : Optimizing software in order to put NRF24 module in Power Down


VoltageMode 1Mode 2Mode 3Mode 4
3.3v1700 uA123 uA71 uA6,94 uA
3.2v1601 uA105 uA60 uA6,50 uA
3.1v1492 uA93 uA50 uA6,17 uA
3.0v1400 uA66 uA41 uA5,90 uA
2.9v1295 uAN/A33 uA5,67 uA
2.8v1188 uAN/A27 uA5,42 uA
2.7v1086 uA46 uA22 uA5,32 uA
2.6v985 uA41 uA17 uA5,16 uA
2.5vUnstableUnstableUnstableUnstable
The sequential gains were enormous.

The Power LED

The Power indicator LED on the mini-pro was eating away quite a substantial part of the energy budget, so this was easy to remove. Removing the series resistance was easy.

The LDO Regulator

The second surprise was the LDO sitting between VIN and VCC. As I power the Arduino directly from the VCC pin, I wasn't aware that the output of the LDO was somehow sinking 40-50% of the remaining energy budget. Since there wasn't a jumper on my board, I decided to unsolder the LDO.

NRF24 issues
When comparing the energy use of the arduino without the nRF and with the nRF, I noticed a substantial power use by the nRF24 (71µA total current= 5,5µA Arduino + 65,5µA nRF24).
2 observations :
  • No use of radio.powerup or radio.powerdown in my code 
  • Excessive power consumption (60µA instead of 22µA in Standby Mode)
After adding the necessary radio.powerUp() and radio.powerDown() commands in my code, I couldn't see any difference in my measurements.
On the website of Nordic Semiconductor I found a forum post talking about excessive power consumption and it seemed to be related either to faulty soldering or ESD damage.
So I decided to throw out the module in use and replace it by a brand new one from my stock.
And guess what. Power consumption dropped dramatically. The nRF module went finally into PowerDown mode and only consumed approx. 1µA in this state.
The final result was a staggering 7µA @3,3V downto 5,4µA @2,8V. Below this voltage, the reading of the 1-wire temperature sensor becomes unstable and at 2,5V the reading is impossible.

I'm currently testing my module  on a Li-ion battery (3.6v - 2400mAh) and logging the battery voltage in my ambient sensor data.

I'm curious to see how the battery behaves.

No comments:

Post a Comment