The 2024 Embedded Online Conference

Operate microcontroller with safety circuit constrains

Started by johancabarcas 6 years ago5 replieslatest reply 6 years ago349 views

Hi all,

I am required to design a circuit which regulate the voltage (3.3v) coming for a Master microcontroller pin to not more than 3v and restrict the current to 2uA. This in order to fulfill safety circuit constrains, then the output has to power on a slave Microcontroller which most of the time will be in sleep mode and will wake up about every 200ms do few tasks and go back to sleep again.

So far I have this circuit using Zener diodes with 3v breakdown voltage, having ~2uA across R2.


There is no problem to operate the  slave microcontroller in sleep mode with this current because I have chosen the EFM8SB2 "sleepy bee" with the following features:


Datasheet EFM8SB2

The problem is in the active mode where I require minimum 170uA. Since the microcontroller will be in active mode max every 200ms for a really short time (only send 8 bits to master and read a value from an odometer magnetic sensor ) I though about a capacitor which would charge while the microcontroller is in sleep mode and discharge when the microcontroller is active mode to provide enough power to operate.

My first question is. Is it actually realistic to go for this approach?. If so, how would the circuit design looks like?. Perhaps I have to use sort of a switch to change from the sleep mode to active mode configuration. 

I have read about the charge-pump approach but I do not know if that would be the solution for my problem.

I would really appreciate any hint or references about this matter.




[ - ]
Reply by Bob11May 1, 2018

In this application, current draw isn't your concern, but charge. First, note that your MCU bullet point #2 specs are 170uA/MHz @ 24.5 MHz. That sounds more like a little over 4mA to me at 24.5MHz. However, the amount of charge (current*times) consumed depends on the exact specification of your 'really short time'. If you're using an internal peripheral such as a UART there's also bullet point #4 to contend with, which only guarantees a wake-up time less than 2uS but doesn't actually specify it. Unless you characterize it more accurately for your application, you have to presume that 'really short time' will be at least 2uS if using internal peripherals.

If you're using, say, I2c to send the 8 bits at 400KHz, then each bit will require 2.5uS to send. Add in the start and acknowledge periods and it will take at least 25uS to send the 8 bits. You don't say how you're going to read the odometer sensor, nor how long it will take. If your entire routine runs for, say, 50uS, then the charge consumed will be 50uS*4mA = 200nC (nanocoulombs). Q = C*V, or C = Q/V. If you want a maximum 0.3V drop in the rail voltage (to 2.7V) while the code is running, C = 200nC / 0.3V = 667nF.

Not sure why you have two zeners, but presuming the supply is 3.3V and the zeners 3V the maximum current through R1 is (3.3-3.0)/100 = 3mA. That is the actual current limit of the supply as shown. To recharge the capacitor with that much current requires 200nC/3mA = 67uS. However, with a supply that actually limits the current draw to 2uA the time required to recharge the capacitor is 200nC/2uA = 100mS. Still within your parameters, but...

The short answer is there are a number of important details missing in your question. Furthermore, what is limiting the current, the external 3.3V supply or your circuit? If the latter, you'll have to upsize R1 quite a bit to limit the current to 2uA. Doing so will require re-computing the charge equations for the capacitor needed to supply power during the microcontroller operating time, which will also determine the minimum time which you must wait between run intervals. The above simplified analysis also doesn't include the quiescent current draw of the microprocessor in sleep mode and a number of other detailed circuit parameters (capacitor ESR, microprocessor drop-out voltage, I/O pin current draw, etc.) that are need-to-know items before a feasible circuit (or circuit feasibility) can be determined.

[ - ]
Reply by johancabarcasMay 1, 2018
Hi Bob,

Thanks very much for your elaborated response. Plase consider the following aspects.

The slave uC have to main task:

1. Count and record the number of turns of a wheel connected to a magnetic odometer
which can be tought as two active high switches, these switches are connected to two GPIO pins (switches need also supply voltage).
Every time the wheel make a turn the switches are pressed causing an interrupt on both pins
(depending on the order of the switches being pressed the orientation forwards/backwards is determined)
The circumference of the wheel is ~17 cm and average speed is 30 km/h.

2.Send to the master every second the number of turns recorded so far. The protocol to be used is not defined but
I2C is a good candidate as well as bit banging. There are no requirements regarding communication protocol.

The reason why two Zeners are used is only in the case one zener is damaged (instric safety norm). The resistor which is limiting
the current is R2.


I don't know if I am doing something wrong there but that is the result of the simulation. Note that this protection circuit shall be place twice. one on the output on the master module and the other on the input of the slave module.


Surely I would provide more details if needed but there are bunch of specifications which are not defined that means it can be
determined according to the needs.

I appreciate your comments and advices.

[ - ]
Reply by PedroMBMachadoMay 1, 2018


   I would suggest you to use a voltage regulator for powering the second micro-controller. The circuit that you have shown is not ideal. Check out this link https://www.edn.com/design/analog/4326465/Use-an-L...

Also, you can use interruptions for waking up the micro-controller either with a RTC generating the interruption for waking up the uC or using the master. I am not sure what is the goal of putting the uC to sleep if it is constantly waking up (+/- 200ms) mind that most of the power consumption is because of the transient and not in continuous regime.

   Have a thought about that.

Kind Regards,


[ - ]
Reply by CustomSargeMay 1, 2018

Howdy, Been here done this:

A> I can see doing the sleep/wakeup cycle, since sleep is So much lower power.

B> Using a capacitor as a reservoir has saved me many times in driving a relay. You size the cap for well enough to power the runtime span, the current limiter (whichever way you go) already keeps the system safe. If the dutycycle is too small for a cap to fill in, then you think about a switch to charge the cap during sleep. Switch off during runtime, so system still safe.

Just how I've done it, YMMV...  Good Hunting  <<<)))

[ - ]
Reply by johancabarcasMay 1, 2018

Hi Pedro,

Thank you for your quick response.

Actually the master will request data to the slave. 

The thing is that I have only 3v and 2uA the whole time because is a constraint for circuits within explosive environments that I have to follow, that is with this constrain I cannot drive any microcontroller in operation mode (only sleep mode). What I have to do is somewhere store the extra energy that I will need when the microcontroller is required to operate (rather each 500ms than 200ms).

It is a really good point about "Transient power consumption" which I will consider.  

Probably I am lacking of some basic understanding of electronics which it does not let me explain the problem in a better way. I already have posted a thread Previous thread with the same project where more about the problem is explained. Only the constraint of 1.8v has changed to 3v, but this is not the issue i think. I am more concerned about the current flow constrain.

Thanks in advance for your help


The 2024 Embedded Online Conference