High deepsleep consumption RAK12039

Hello,

we are experiencing high sleep consumption in RAK12039 PM sensor.

Even when WB_IO2 is set on LOW on RAK4631, there is still 1.5mA consumption in sleep mode.

Could this misbehavior be related to the inductor on the 5V boost being connected to VBAT?

Simialr issue on this post:

Thanks

Did you check the 5V on the PM sensor? Is it going to 0V?
Can you in addition pull the SET (WB_IO6) pin to LOW while you have the PM sensor off.

The 12V generation on the RAK13010 is different to the RAK12039. On the RAK12039 you will not have a current flowing through the inductor.

Hi Bernd,

thanks for your reply.

Yes, we pull the SET pin to LOW.

When IO_2 is set to LOW:

  • The 5V pin drops to stable 1.10V
  • VCC goes to 0V

This is the sletch I am using to test the device:

/**
  @file RAK12039_Dust_Read_PMSA003I.ino
  @author rakwireless.com
  @brief  Read PMSA003I data and output through serial port.
  @version 0.1
  @date 2022-01-07
  @copyright Copyright (c) 2022
**/

#include "RAK12039_PMSA003I.h"

RAK_PMSA003I PMSA003I;

/*
   @brief WB_IO6 is connected to the SET pin.
          Set pin/TTL level @3.3V, high level or suspending is normal working status.
          while low level is sleeping mode.
*/
#define SET_PIN WB_IO6

void setup() {

  // Initialize Serial for debug output.
  time_t timeout = millis();
  Serial.begin(115200);
  while (!Serial) {
    if ((millis() - timeout) < 5000) {
      delay(100);
    } else {
      break;
    }
  }
}

void loop() {
  // Sensor power on.
  pinMode(WB_IO2, OUTPUT);
  pinMode(SET_PIN, OUTPUT);

  digitalWrite(WB_IO2, HIGH);
  digitalWrite(SET_PIN, HIGH);

  delay(500);

  Wire.begin();
  Wire.setClock(100000);

  // Wait for sensor to go online
  time_t wait_sensor = millis();
  uint32_t error = 0;
  while (1) {
    delay(500);
    Wire.beginTransmission(0x12);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.printf("RAK12039 answered at %ld ms\n", millis());
      break;
    }
    if ((millis() - wait_sensor) > 5000) {
      Serial.printf("RAK12039 timeout after 5000 ms");
      pinMode(WB_IO6, INPUT);
      break;
    }
  }


  //delay(500);
  //PMSA003I.begin();
  delay(3000);

  if (!PMSA003I.begin())
  {
    Serial.println("PMSA003I begin fail,please check connection!");
    while (1) {
      delay(100);
    }
  }

  PMSA_Data_t data;

  if (PMSA003I.readDate(&data)) {
    Serial.println("PMSA003I read date success.");

    Serial.println("Standard particulate matter:");
    Serial.print("PM1.0: ");
    Serial.print(data.pm10_standard);
    Serial.println(" [µg/𝑚3]");

    Serial.print("PM2.5: ");
    Serial.print(data.pm25_standard);
    Serial.println(" [µg/𝑚3]");

    Serial.print("PM10 : ");
    Serial.print(data.pm100_standard);
    Serial.println(" [µg/𝑚3]");

    Serial.println("Atmospheric environment:");
    Serial.print("PM1.0: ");
    Serial.print(data.pm10_env);
    Serial.println(" [µg/𝑚3]");

    Serial.print("PM2.5: ");
    Serial.print(data.pm25_env);
    Serial.println(" [µg/𝑚3]");

    Serial.print("PM10 : ");
    Serial.print(data.pm100_env);
    Serial.println(" [µg/𝑚3]");

    Serial.println("The number of particles in 0.1L air (above diameter):");
    Serial.print("0.3um:");
    Serial.println(data.particles_03um);
    Serial.print("0.5um:");
    Serial.println(data.particles_05um);
    Serial.print("1.0um:");
    Serial.println(data.particles_10um);
    Serial.print("2.5um:");
    Serial.println(data.particles_25um);
    Serial.print("5.0um:");
    Serial.println(data.particles_50um);
    Serial.print("10 um:");
    Serial.println(data.particles_100um);
  } else {
    Serial.println("PMSA003I read failed!");
  }
  Serial.println();

  digitalWrite(WB_IO2, LOW);
  digitalWrite(SET_PIN, LOW);

  delay(5000);
}

also, would it help to solder R10/R11on RAK12039 and remove R12/R13 from RAK19007?

image


main.cpp (3.3 KB)

(1) Initialize LoRa transceiver and set it into sleep mode

	// Initialize LoRa and set radio to sleep
	if (lora_rak4630_init() != 0)
	{
		Serial.println("Error initializing LoRa");
	}
	else
	{
		Serial.println("Set LoRa to sleep");
		Radio.Sleep();
	}

(2) De-initialize I2C, set I2C lines to output and set them to low

	digitalWrite(WB_IO2, LOW);
	digitalWrite(SET_PIN, LOW);

	Wire.end();
	pinMode(WB_I2C1_SDA, OUTPUT_D0S1);
	pinMode(WB_I2C1_SCL, OUTPUT_D0S1);
	digitalWrite(WB_I2C1_SDA, LOW);
	digitalWrite(WB_I2C1_SCL, LOW);

I cant get below 500uA though

That’s great!

Thanks a lot