Help with Low Power Application - Nordic PPK2!

Hi All.
I have been working a project building a "semi-smartwatch" based on esp32 for a little over a year. I am new to electronics, programming and pcb design so I love this new hobby. At any rate, I finished my pcb design and got some prototypes made. Everything seems to be working as expected. However, one of the top priorities in my design considerations was battery life (it uses a 3.7V lipo battery). However, my first prototype used a 150 mAh battery and only lasted about 3-4 days . So that would make my current draw something like 1.5 - 2 miliamps. I was expecting to get at least twice that based on simply the information from the data sheets of all the major components that went into the design. Of course there are going to be leakages and losses in things like pullup/down resistors etc. but I am not familiar with what some of the major loss mechanisms are nor how to address them. I was hoping someone here could give me some pointers. I would be happy to start by posting my schematic, discussing my code, and posting details of my pcb design (just don't laugh at me for being a noob).

Oh, I mentioned the Nordic Power Profiler Kit 2. I saw this thing in some forums and thought I would give it a try since I am concerned about my power draw - and it is really a nice piece of work! It is extremely easy to use and works great (no I am not sponsored by them)! You can find a description here but it basically tells you how much current is being used by your device. It is really made for low power applications (uA-1A).

So when I first fired it up on my digital watch with everything running (esp32-S3, DS3231 Real-time clock, BMI-270 motion sensor, MAX17048 fuel gauge ic, SH-1106 oled display) I was seeing a current draw of about 63 mA

since battery life was a key design parameter, I put the esp32 in deep sleep for most of the time. Here you can see it transition to deep sleep:

As I mentioned before, since it lasted about 3-4 days being in deep sleep most of the time, I expected a current draw to be 1.5mA to 2mA while in deep sleep and PPK2 showed that was spot on at 1.5mA!

Another cool thing is I have a piezo buzzer that beeps everytime I hit a button on the watch and you can see the "pulses" of each button press

The watch is "semi-smart" since it can use the esp32 to set itself using Wi-Fi and getting the time from an NTP server. Talk about power consumption! This is what using WiFi looks like, but I dont know what those spikes are.

Anyway, I thought this was waaay cool so I wanted to share it with you guys and ask again if I could get some pointers on how to reduce the power consumption. If I could cut it in half i.e. get the "deep-sleep" state down to about 0.7 mA I would be ecstatic! I already have an idea that I think would help. The DS3231 RTC chip has a coin cell battery "backup" and when running off of that instead of the LiPo it uses significantly less power. However, I still have it running of the main 3.7V lipo even while sleeping. I was wondering if I could created a +3.3V "power bus" that all modules except the esp32 will be connected to. If I use something like a p-channel mosfet as a switch (one of the esp32 gpio connected to the gate) then I could only have these components "powered" when the esp32 wakes up from deep sleep. I think that may help but that could cause other start-up problem.

Anyway, thanks for listening. Any help is really appreciated!

Fish

I suppose so; this would take us back to:

This could be part of a solution, but the effectiveness would of course depend on the switch circuitry. You don't want any gains to be offset by losses in whatever happens in/around your pmos switches.

I'd also suggest establishing the baseline deep sleep power consumption of your ESP32 module so that you know how low you can go - and whether the module of your choice doesn't have any energy wasters on board.

@rsmls The esp32-s3 is not a dev board. I looked at several dev boards along with the esp32-s3 datasheet and design guidelines and created my own pcb. On another note, I have a breadboard version of my pcb in which I use a dev board (Wemos Lolin esp32-s3 mini) and breakout boards for the individual components and when I broke into the circuit with the PPK just after the +3.3V LDO output on the esp32 which I use as the main power for the components, I get +4.4 mA while running and a deep sleep current of 187 mA which is slightly above what I predicted as a theoretical minimum. However, this is after the LDO and using the USB power path as opposed the the 62 mA (running) and 1.5 mA (deep sleep) measured on the battery power path.

Assuming it is right, it probably means I am doing something very stupid in my design and maybe in just the battery path? Let me post my schematics. Here is the esp32-S3 (center). Upper left is the usbc for power/data, to the left is the TP4054 battery charger, bottom left is the 3.3V voltage regulator. To the right is the crystal for the esp32 and the 2 switches for the microcontroller. I think maybe there is an issue with the charger/voltage regulator on the left?

Now here is the schematic for the rest of the pcb


Bottom center is my oled display. Top/top left are 3 components running on i2C including DS3231 real-time clock, MAX17048 fuel gauge, BMI270 6DoF inertial measurement unit, and a single channel inverter. To the right are a buzzer and 3 way switch.

Most of this schematic was heavily-derived from the "recommended application" on datasheets and the like. As you can see, the pcb was done is easyeda and I can attach copies of the pcb files. I can also export to Altium.

Any help is appreciated!
Fish

No, I figured that; it would make for an unwieldy watch. I had assumed (erroneously) that it was one of the encapsulated modules with the RF shield, like the WROOM product etc. I see you've gone bare bones here.

In any case, I've had a quick peek, but cannot see any conspicuous current drains. If this is a prototype, I'd be inclined to selectively remove some stuff and see if power consumption goes down.

Sorry, that doesn't help much.

Check the quiescent current of all the components. You could power some of them directly from a MCU pin, and set it LOW before going to deep-sleep. But only the ones that consume a couple milliamps maximum.
Check also the capacitors leakage. Maybe you could reduce the decoupling capacitors in parallel. If they are SMD I think that it's not needed to put 1u + 10u... But the leakage will be small anyway.

You can also reduce the clock speed of the MCU to the minimum. But when connecting to the wifi it should be at least 80Mhz.

But the main current consumption will be probably the wifi, try to reduce to the minimum the connections and also the requests when connected.

I have done a project also designing a PCB but with a ESP32-C3 module, that has lower consumption than the S3 and only one core.

@rsmls
Hey, I did find something but don't know if it is relevant:

Pin 29 on the esp32 is marked VDD_SPI. At first I thought this pin was supposed to be connected to +3.3V. However, I have seen some designs where it isn’t used at all and some designs where 2 decoupling capacitors are used and it is simply labeled “VDD_SPI”. Going back, I thought this was an input . The datasheet lists it as both an input and output:
INPUT: In-package memory (backup power line)
OUTPUT: In-package and off-package flash/PSRAM

So if I am putting 3.3V on this line, I think it is a mistake - but not sure if that consumes any current. I did check that pin on my design and on a dev board. On the dev board, it is +3.3V when the esp32 is active an 0V during sleep (so it must be operating in output mode). On my pcb it is always +3.3V. Since I am not using PSRAM, I think I should not connect this and remove the decoupling caps?

Thoughts?

Interesting. If it sinks current, you'd expect it would be mentioned in the datasheet somewhere. I'd cut the trace to that pin on your device and see what happens.

@rsmls
I'll do it and let you know. If it does what I think, worst case is it will do nothing

Exactly, it sounds like a low-risk experiment. And if you're somewhat careful, it's also possible to fix it if it turns out to be a necessary connection.

HA, HA!!!!!!!
@rsmls - check it out 189.6 uA!!!!


I must have checked and double-checked the wiring but it still shows 62 mA during activity so the only thing left is to try with a battery to confirm so I am being cautiously optimistic at this point.

I think maybe putting +3.3V on the pin forced it into an input mode memory back-up where it was still feeding current to flash? I dunno....but if this is real it kicks a$$!

Thanks for the help! I'll let you know how it goes!

Fish

@rsmls
It's MUCH better! I still may incorporate a p-channel mosfet switch, but I am thrilled to have found the issue. Thanks a bunch!

Fish

You've got to be kidding me!
Well spotted; I had never thought of this!

Could you tell us more about how/when the device becomes active? Do you push a button, or what? I guess I don't know what a "semi-smartwatch" is. what does it do?

Also, do you use the ESP32's wireless function for anything other than setting the RTC? How accurate do you need the RTC to be?

I'm due at the gym now, but will look over your schematic later today. But in general, it certainly is possible to competely shut down the entire circuit with a mosfet controlled by the DS3231's INT/SQW pin. The DS3231 would run on its coin cell, and the charging system would still work, but everything else would draw zero current. But I would think you also need a way to power up manually.

A mosfet circuit to switch power on/off could be placed between C17 and LDO1. It would be turned on by pushing a button, and the first thing the processor does on boot is to bring up the GPIO that keeps the power on after the button is released. The circuit lets the button also be used as an input device while everything is running.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.