Power Consumption testing

I’m trying to test power consumption with this example: LoRaWan.ino (LoRaWAN.sleep(); ) on AS923 Region
I connect Cubecell to DC-Gen and Ammeter is shown on below fig.

I measured a current 7.8 mA during sleep mode (LoRaWAN.sleep(); )
How to reduce current?

Regards,
Bo

Have a look in this thread

I have seen your thread and please show me your product

Thank you.

you have nothing changed in that example code?
is the cubecell connected to a loraserver?

  1. I only changed ABP parameter for my lora sever
  2. yes It’s connected to a loraserver

Guys,

let me share my experience and honestly I got no clue why such an issue occurs.

I made a sketch and upload it via Arduino IDE. It’s simple sketch, which wakeup each 1 hour and report some data and also wake up and send dat if GPIO state change.

  1. I tested it and found that the avg. consumption is like 40-55uA
  2. did long time test with battery monitoring, shortly realised that battery is drained unexpectedly high, so I did the power consumption tests again, found out the consumption of approx. 8mA :frowning: Tried to remove all addtional components connected via GPIO , found that CubeCell itself consume 7.8mA

I WAS LOST OF IDEAS SO I REFLASH THE CUBECELL USING THE SAME SKETCH AND GUESS WHAT - I can again easily measure consumption of 40-55uA (question is - FOR HOW LONG? )

May I kindly ask for your support to explain me such behaviour.
(Using 0.0.5)
Thanks
Lukas

1 Like

Noone got an idea, what can be wrong?

1 Like

@kovi44

I mistake that set Class C for testing current consumption and a problem is solved by changed Class C to Class A. I measured a current 9.8 uA during sleep mode.

I have a new issue about cubecell connect to GPS module ATGM336H
I connect GPS module to cubecell using Vext —>3.3V, GND —>GND, GPIO —> TX,PPS

—> active Vext supply voltage 3.3V by digitalWrite(Vext, LOW);
—> sleep Vext cut voltage by digitalWrite(Vext, HIGH);
when sleep I measure current 0.98mA and
voltage between Vext and GND equal 1.1V (I think voltage from Vbat of GPS module)
How to reduce current during sleep mode

Regards,
Bo

I have tested a CubeCell node based on the program sample LKoRaWAN.ino connected to TTN.
Each 15 min the battery voltage was sent to TTN. You can see the battery voltage over time in the image.

Heltec%20CubeCell%20LiPo%20Entladung

This means an overall current of 600 uA. Is there potential to reduce the current consumption yet?

A little hint:
After uploading the sketch and configure unplug the usb cable and press reset.
If not the usb serial chip will be drawing power.

And dont make serial prints

I start a new test under these conditions. Thanks for the hint.

HI Did WASN;s comments help ? as I am having issues with some of my CubeCell board taking more current than normal with the same script same battery etc. What is your current consumption now ?
Simon

Hi Simon,

in my first test I got the following voltage drop in the first days:

Date Voltage
03.05.2020 16:10 4162
09.05.2020 09:42 4070
137.5333333 92
0.668928745 mV/h

Without serial communication it looks like

Date Voltage
13.07.2020 19:20 4230
18.07.2020 12:18 4196
112.9666667 34
0.300973739 mV/h

So I think the hint helped. But, I wait for the result overall.
Claus

The next test started. I will update the measuring values on a weekly base. If you are interested in the results then have a look to my blog https://ckarduino.wordpress.com/heltec-cubecell/.
Sorry, it is in German language. But you can see the graph at the end of the site. Otherwise, Google will help translating.

1 Like

Hi, I have a problem with power consumption.
Im using the HTCC-AB01 with a BME280 sensor.
The board sends values to ESP32 v2 and goes to sleep for 30min.
The issue is I can’t get the battery to last.
I tried powering it with 2 AAA batteries via 3.3v pin and got it to run for 1month.
If I use a 250mAh lipo it runs for 14 days.
Am I doing something wrong?
This is the code:

#include “Seeed_BME280.h”

#include “LoRaWan_APP.h”
#include “Arduino.h”
#include “Wire.h”

/*
set LoraWan_RGB to 1,the RGB active
RGB red means sending;
RGB green means received done;
*/

#define RF_FREQUENCY 868000000 // Hz

#define TX_OUTPUT_POWER 1 // dBm

#define LORA_BANDWIDTH 0 // [0: 125 kHz,
// 1: 250 kHz,
// 2: 500 kHz,
// 3: Reserved]
#define LORA_SPREADING_FACTOR 8 // [SF7…SF12]
#define LORA_CODINGRATE 4 // [1: 4/5,
// 2: 4/6,
// 3: 4/7,
// 4: 4/8]
#define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
#define LORA_SYMBOL_TIMEOUT 0 // Symbols
#define LORA_FIX_LENGTH_PAYLOAD_ON false
#define LORA_IQ_INVERSION_ON false

#define RX_TIMEOUT_VALUE 1000
#define BUFFER_SIZE 12 // Define the payload size here

#define timetowake 1800000

float voltage;

//Sensor ID//
const int ID = 1;
static TimerEvent_t wakeUp;
uint8_t lowpower = 1;

char txpacket[BUFFER_SIZE];

static RadioEvents_t RadioEvents;
void OnTxDone( void );
void OnTxTimeout( void );

int16_t txNumber;
bool sleepMode = false;
int16_t rssi, rxSize;

BME280 bme280;

void setup() {
boardInitMcu( );
Serial.begin(115200);
pinMode(Vext, OUTPUT);
digitalWrite(Vext, LOW);
delay(500);
TimerInit( &wakeUp, onWakeUp );
//display.flipScreenVertically();

txNumber = 0;
rssi = 0;
RadioEvents.TxDone = OnTxDone;
RadioEvents.TxTimeout = OnTxTimeout;
onWakeUp();
}

void loop()
{
if (lowpower = 1) {
//note that lowPowerHandler() run six times the mcu into lowpower mode;
lowPowerHandler();
}
}

void onWakeUp()
{
lowpower = 0;
digitalWrite(Vext, LOW);
delay(500);
Serial.begin(115200);
float pressure;
Wire.begin(SDA, SCL);

if (!bme280.init()) {
Serial.println(“Device error!”);
}

pinMode(VBAT_ADC_CTL,OUTPUT);
float voltage=getBatteryVoltage();
Serial.println(voltage/1000);
delay(20);
Radio.Init(&RadioEvents);
Radio.SetChannel( RF_FREQUENCY );
Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
double temp, humi;

//get and print temperatures
bme280.getTemperature();
bme280.getHumidity();
delay(500);
temp = bme280.getTemperature()-0.8;
Serial.print(“Temp: “);
Serial.print(temp);
Serial.println(“C”);//The unit for Celsius because original arduino don’t support speical symbols
//get and print humidity data
humi = bme280.getHumidity();
Serial.print(“Humidity: “);
Serial.print(humi);
Serial.println(”%”);
String pack =String(ID) + String(”:”) + String(temp, 1) + String(":") + String(humi, 0) + String(":") + String((voltage/1000));
sprintf(txpacket, “%s”, pack.c_str());
Serial.print(pack);
Serial.printf("\r\nsending packet “%s” , length %d\r\n", txpacket, strlen(txpacket));
Radio.Send( (uint8_t *)txpacket, strlen(txpacket) );
Serial.print(“TX done…”);
delay(1000);
//Serial.printf(“into lowpower mode, %d ms later wake up.\r\n”, timetowake);
onSleep();
}

void onSleep()
{
Serial.printf(“into lowpower mode, %d ms later wake up.\r\n”, timetowake);
lowpower = 1;
Radio.Sleep( );
Wire.end();
Serial.end();
digitalWrite(Vext, HIGH);
TimerSetValue( &wakeUp, timetowake );
TimerStart( &wakeUp );
}

void OnTxDone( void )
{
Serial.print(“TX done…”);
}

void OnTxTimeout( void )
{
Radio.Sleep( );
Serial.print(“TX Timeout…”);

}