2
\$\begingroup\$

In short:

Despite setting my datalogger IMU to SLEEP and going to deepSleep(0) on the ESP without any other IC peripherals besides the buck converter and 2 deactivated LEDs, I still measure 2.5mA current draw while the data sheets predict 108uA. What could be the cause?

Detailed version:

I am using an ESP12F/ESP12S as a small data logger. Connected to the module are a Renesas ISL85415 buck regulator set to 3.3V output (Connected to a LiIon Battery), an MPU9250 IMU (Over I2C) and 2 LEDs (Active HIGH) with their respective ~300 Ohm resistors. I have a set of pullup/pulldown resistors, namely 10k PUs on the reset, CH_PD, GPIO0 and GPIO2 pins, two 4.7k PUs on the I2C lines, and a 10k PD on GPIO15.

I am using Arduino-ESP to program the chip.

After power-up, the ESP sets the LED pins to OUTPUT LOW, tries to initialize the IMU, collects some data, connects to a WiFi AP, sends some UDP messages, sets the IMU to sleep using the SLEEP bit in its PWR_MGMT_1 register, and goes to Deep Sleep.

According to the data sheets, the buck converter should draw 80uA quiescent current (In light load operation mode), the ESP should draw 20uA, and the IMU 8uA. With a cheap multimeter I get 2.5mA (2.4 and 2.8 with other versions of the same circuit), and the battery runtime suggests a draw of ~2mA.

I measure a difference of ~2.5mA when the IMU is in sleep mode vs. not, so I am pretty sure the IMU is really going to sleep. Where does this additional draw come from?

I have seen This similar question but it is not answered as of right now.

EDIT:

This is my schematic: Datalogger

I was able to reproduce the issue with following minimal code:

  #include <Wire.h>

  void setup()
  {
     //Init I2C
    Wire.begin(4,5);
    delay(10000); // For initial multimeter measurements

    sleepMPU9250();

    ESP.deepSleep(0);
  }

  void loop()
  {
  }

  // Set the IMU to sleep mode, hopefully reducing current draw
  void sleepMPU9250()
  {
    writeByte(0x68, 0x6B, 0x40); // Put MPU9250 to sleep 
    delay(100); // Wait for all registers to reset 
  }

  void writeByte(uint8_t address, uint8_t subAddress, uint8_t data)
  {
    Wire.beginTransmission(address);  // Initialize the Tx buffer
    Wire.write(subAddress);           // Put slave register address in Tx buffer
    Wire.write(data);                 // Put data in Tx buffer
    Wire.endTransmission();           // Send the Tx buffer
  }

I also measured the ESP12 pin voltages during deep sleep as recommended: RST, CH_PD, GPIO16, VCC(duh), SDA, SCL, GPIO0 and GPIO2 have VCC, ADC is at 1V when VBAT = 4.1V, and all other pins are at zero.

The ESP12S schematic is found here at page 13, but I didn't find anything out of the ordinary. According to this(with SparkFun ESP8266 Thing) and especially this (With ESP12F) it is quite possible to run the Chip+Breakout at 77-78uA.

\$\endgroup\$

closed as unclear what you're asking by PlasmaHH, Dmitry Grigoryev, Chris Stratton, Voltage Spike, Sparky256 Oct 20 '18 at 3:04

Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 1
    \$\begingroup\$ Let me study your schematic and code...oh wait, where did I put my mind reading hat... \$\endgroup\$ – PlasmaHH Oct 4 '18 at 17:26
  • 1
    \$\begingroup\$ Welcome to the site. We are going to need more inf to help you. Start with a schematic and what all GPIO voltage levels are when the CPU is asleep. Try to measure them - don't count on the code. \$\endgroup\$ – mike65535 Oct 4 '18 at 17:39
  • 1
    \$\begingroup\$ Given that there's already a question on this, generally we would not allow another just because that is unresolved, but only if this can be demonstrated to be a distinct problem. What evidence can you find (such as writeups of other's success) that a lower sleep is actually possible in practice? Can you get a different result by removing parts and cutting the code back to just an attempt to sleep without initializing anything more complex? Do you have any I/Os asserted against pulling resistors, especially the ESP boot mode resistors? \$\endgroup\$ – Chris Stratton Oct 4 '18 at 17:42
  • \$\begingroup\$ Add a 75mV current shunt with bypass cap might help track down the issue. \$\endgroup\$ – Tony Stewart Sunnyskyguy EE75 Oct 4 '18 at 17:46
  • 1
    \$\begingroup\$ Thanks for the welcome! I've edited the question to provide more info. If that is not enough I can delete the question/move it to a comment on the other linked question. \$\endgroup\$ – GerbGerb Oct 5 '18 at 16:56