Low Power Sleep on NANO-ARM

Post Reply
PaulRB
Posts: 1
Joined: Sun Mar 10, 2019 1:39 pm

Low Power Sleep on NANO-ARM

Post by PaulRB » Sun Mar 10, 2019 2:37 pm

Hi everyone,

Would like to know if people here have experimented with getting the NANO-ARM down to very low current in sleep/standby mode? What was the lowest you could achieve?

So far, my best result is around 200~300uA, using this code, which spends 3 secs in normal mode followed by 3 secs in standby mode:

Code: Select all

#include <RTCZero.h>

RTCZero zerortc;

// Set how often alarm goes off here
const byte alarmSeconds = 3;
const byte alarmMinutes = 0;
const byte alarmHours = 0;

volatile bool alarmFlag = false; // Start awake

void setup()
{
  Serial1.begin(115200);
  delay(1000); // Wait for console
  
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  zerortc.begin(); // Set up clocks and such
  
  resetAlarm();  // Set alarm
  zerortc.attachInterrupt(alarmMatch); // Set up a handler for the alarm
}

void loop()
{
  if (alarmFlag == true) {
    alarmFlag = false;  // Clear flag
    digitalWrite(LED_BUILTIN, HIGH);
    Serial1.println("Alarm went off - I'm awake!");
    delay(3000);
  }
  resetAlarm();  // Reset alarm before returning to sleep
  Serial1.println("Alarm set, going to sleep now.");
  digitalWrite(LED_BUILTIN, LOW);
  zerortc.standbyMode();    // Sleep until next alarm match
}

void alarmMatch(void)
{
  alarmFlag = true; // Set flag
}

void resetAlarm(void) {
  byte seconds = 0;
  byte minutes = 0;
  byte hours = 0;
  byte day = 1;
  byte month = 1;
  byte year = 1;
  
  zerortc.setTime(hours, minutes, seconds);
  zerortc.setDate(day, month, year);

  zerortc.setAlarmTime(alarmHours, alarmMinutes, alarmSeconds);
  zerortc.enableAlarm(zerortc.MATCH_HHMMSS);
}
Consumption is around 9.5~9.5mA during awake/normal periods and 0.2~0.3mA when in standby mode.

To make these measurements, I used a USB-serial adaptor to supply 5V to the NANO-ARM via the 5V pin and to receive serial data from D1 pin (=Serial1). This allowed me to insert my DMM in the 5V line to measure the current. (No other components involved.)

I was hoping for a significantly lower figure in standby mode, more like 20~30uA. The reason for my hope was the claimed low currents of similar boards like the Rocketscream Mini Ultra Pro V3 (http://www.rocketscream.com/blog/produc ... out-radio/) which claims 20uA, or the Low Power Lab Motino M0 (https://lowpowerlab.com/guide/moteino/moteinom0/) which claims 8uA.

Both these two boards are double the price of the NANO-ARM. Looking at the schematics for all three boards, I can't see much to explain why the NANO-ARM is drawing so much more current than those other boards claim (I don't have either to do a side-by-side comparison). The NANO-ARM's circuit is pretty basic with few/no other components to consume much current. Even the regulators seem to be on a par.

I am wondering if there could be anything different in the Arduino Cores for the 3 boards that could explain the difference. The NANO-ARM and the Rocketscream use the Zero's Board definition which gives maximum compatibility with Arduino Zero. The board requires different or extra board definition.

Any help or guidance on reducing the standby current, or anyone else's experiences along these lines would be great.

Paul

NANO-ARM Schematic: https://wiki.protoneer.co.nz/NANO-ARM#Schematic
Motino Schematic: https://lowpowerlab.com/wp-content/uplo ... ematic.png
Rocketscream Schematic: https://github.com/rocketscream/MiniUlt ... RA-PRO.pdf

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest