2
\$\begingroup\$

Extension of this question.

Datasheet: http://www.st.com/resource/en/datasheet/stm32f030f4.pdf

The micro-controller in question has an internal RTC module but no VBAT pin. As such, the only way RTC can be given power backup is to use a battery for whole microcontroller, sense the absence of main 3.3V power supply and shut down the micro-controller leaving only RTC running. However there will be external LEDs and other elements present which might draw current from the battery draining it quickly.

Top answerer of that post hinted towards a minimal circuit using diodes. However I couldn't come up with a simple solution. If the circuit is too complicated and/or costly, it might be worthwhile to select another microcontroller which has a VBAT pin.

Is there anything that I can do in this regard?

Edit:

I am looking at CR2032 battery for this purpose. However I am also leaning towards using a supercapacitor for the same purpose. Max duration of power outage will be 6 hours and I think I can easily find supercaps which will provide power that long. If I fail, CR2032 is the way to go.

\$\endgroup\$
9
  • \$\begingroup\$ Please tell us what type of battery it is (3v lithium coin cell?) \$\endgroup\$
    – dim
    Commented Jul 4, 2016 at 19:04
  • 2
    \$\begingroup\$ There are a lot of ways to achieve this have a look at this app note from st: google.nl/url?sa=t&source=web&rct=j&url=http://… \$\endgroup\$ Commented Jul 4, 2016 at 19:15
  • \$\begingroup\$ @rfk - Thanks a lot for the link. I am about to read it but I think this is what I needed. \$\endgroup\$ Commented Jul 4, 2016 at 19:51
  • \$\begingroup\$ Maybe it would make more sense in the application to use an external RTC? There are integrated solutions with RTC, energy storage and power manager such as: cymbet.com/products/enerchip-real-time-clocks.php \$\endgroup\$
    – Jacob
    Commented Jul 4, 2016 at 19:55
  • \$\begingroup\$ @Jacob - Thanks for the link. I didn't even know such a device exists. I'll look into it. However if the cost is high, it might be a deal breaker for my case. \$\endgroup\$ Commented Jul 4, 2016 at 19:59

3 Answers 3

5
\$\begingroup\$

Duskwuff suggestion is good, this is the way I'd do it. There are however important information that must be added:

Hardware part

  • It works only if the source of lower priority has a lower voltage than the source of higher priority. For example, it works with a 3.3V input and a 3V lithium battery, but wouldn't work with a 2.5V input and a 3V battery.
  • The diodes must be schottky diodes. And their voltage drop must be considered. Since the MCU you mention consumes a few tens of mA maximum, according to the datasheet, you won't have very high voltage drop. Something like 0.3-0.4V with BAT54, for example. In your application, this is fine because the MCU can work with a supply voltage as low as 2.4V, and because lithium batteries have a very flat discharge curve that don't go lower than 2.8V for low currents (we're really on the limit here, however - a MCU that would accept a supply of 2.0V or lower would be safer).
  • Also put a big cap at the diode cathodes, so it gives you more time, on the software part (see below), to react when main power is removed. For example, something like 100µ will give you about 2.5ms to go from a supply of 2.9V (3.3 minus diode drop) to 2.4V (the minimum required by the MCU) at ~20mA (a reasonable worst-case consumption of the MCU - check your specific case).

This also has an impact on the external peripheral devices: all LEDs and additional hardware that consume significant power should be powered by the main supply directly (before the diode). So this part of the circuit will be shut down immediately when main power disappears and won't suck the capacitor energy (which would reduce the allowed time for shut down). So that means LEDs shouldn't be directly connected to the MCU pins, but through a transistor (or fet). That also means that you now have two power domains, so there may be a few precautions to take with signals from the MCU that go to the peripheral chips of the "main supply" power domain. There might be a time during which you're still driving some signals from the MCU, that go to powered down peripheral chips. This will have bad consequences (current will flow through the protection diodes of the peripheral chips). At least, you should put series resistors (maybe 1k) on these signals (check the absolute maximum ratings of these peripheral chips). But this will slow these signals down. Therefore, for high-speed signals, another solution is to use an additional stage between power domains. A voltage translator with dual supply and Ioff (partial power-down) is perfect for this (e.g. 74AVC2T45, 74AVC4T245, ...)

Software part

Now, there is one important thing to consider: you must switch the MCU to standby mode ASAP when the main supply disappears. Or the MCU will reset, because if the MCU is busy and consumes a lot of current when the main supply is removed, the backup voltage will experience a higher drop than what can be tolerated, due to the battery internal resistance and the schottky diode.

The above-mentioned capacitor can help with this matter, but you must ensure that you switch before the additional time it gives you. So there are two possible ways to ensure that:

Reading the main supply voltage level with an ADC:

This is what duskwuff suggested (through the resistor divider). This is nice because you can monitor the voltage precisely, and be warned as soon as it starts going down. However, you must regularily sample it with the ADC. So it takes some MCU processing time, because the period between the samplings must be lower than the time the capacitor gives you to shut down.

Reading the main supply voltage as a digital value:

This would require sizing the resistor divider so that, when the input is 3.3V, you have an input voltage above Vih (so the upper resistor is a lot lower than the lower resistor). This way, you can configure the input pin as a digital input that triggers an interrupt. So it doesn't take MCU processing time to monitor the power, you're automatically warned when it disappears. This is nice, but it can work only if the supply disappears very fast (a lot faster than the shutdown time given by the capacitor). Otherwise, you'll be warned only when the supply goes below Vil, and that will be too late: you'll have switched to the battery since a long time without knowing it.

If you're not sure, size the resistors for the digital case, and choose an input pin that can act both as an ADC input or as a GPIO with interrupt capability. This, way, you just have to modify the firmware to go one way or the other.

\$\endgroup\$
1
  • \$\begingroup\$ I wouldn't use a Schottky diode here. Typical leakage of a Schottky diode at these voltages, even at low temperatures, is 20uA+, which cuts the runtime to 1/4 or less, vs. regular diode. \$\endgroup\$ Commented Apr 3, 2021 at 19:23
4
\$\begingroup\$

Have you considered using a STM32F1 part, such as the STM32F103C8? These parts have a dedicated VBAT pin which powers a real-time clock and a small region of backup RAM.

That being said, the way I've generally seen this implemented does indeed use a diode OR, along with a resistor divider on the power input to detect power loss:

schematic

simulate this circuit – Schematic created using CircuitLab

Use a pair of identical large-value resistors (e.g, 100KΩ) in the divider to limit current flow. Sample the value at the ADC pin to determine if external power has been lost.

Note that the resistor divider is critical - sampling Vin directly would cause the input voltage to be above Vcc, which may cause damage.

\$\endgroup\$
0
\$\begingroup\$

I've developed a small circuit using a 1.5F supercapacitor that can supply power for over 36 hours. I've tried the CR2032 batteries (Reneta Brand) Swiss made but I can't fully trust them in my application. Some inflate, Some are empty, some just die and many work, but every time a client loses the date and time it's a truck roll for me and the cost is more than just 0.60$.

The MCU is an arduino 2560 which is used in my system.

I'll be more than happy to share my design with you.

cheers

\$\endgroup\$
2
  • 3
    \$\begingroup\$ Welcome to the site :-) This answer is rather "thin" for the site. If you believe that your design answers the original question, then please edit your answer to include your schematic (either an image from design software, or a good quality photo of a hand-drawn schematic, or use the built-in schematic editor). I recommend that you read the site tour and help center to learn more about the site. Thanks :-) \$\endgroup\$
    – SamGibson
    Commented Sep 25, 2018 at 0:27
  • 1
    \$\begingroup\$ @Rilitium If you could post a part of your schematic here, that would be great. \$\endgroup\$ Commented Sep 25, 2018 at 1:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.