Take the 2-minute tour ×
Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts. It's 100% free, no registration required.

When the power supply on a microcontroller falls under a certain threshold, a brown-out conditions occurs and RAM memory may get corrupted. Provided that every power down sequence of the circuit can mean a potential brown-out condition, I always enable the Brown-out Detection Reset mechanism when working with microcontrollers.

I was wandering if there are any situations in which it is not recommended to enable the Brown-out Reset feature?

share|improve this question
4  
Brown-out detectors also may consume current that should be taken into consideration for micropower applications. –  HL-SDK Jul 30 at 16:09
    
Given the diverse drawbacks of the BO-detection stated in the answers, consider this as well: Can you proive any custom certainty in your particular case? In certain cases you could i.e. guarantee a sufficient supply or a complete blackout => save the ressources for BOD –  Mark Aug 1 at 10:00

7 Answers 7

up vote 7 down vote accepted

As noted, enabling the brown-out circuit will often increase current consumption. Further, because manufacturers generally want to ensure that the brown-out circuit will trip on any voltage that might be low enough to cause other parts of the chip to function, many parts will be able to operate at a lower voltage with brown-out disabled. For example, a controller might work most of the time down to 1.5 volts at room temperature but, under certain stressful conditions (such as elevated temperature) could malfunction at 1.99 volts. To ensure that the device would reset under any condition where a malfunction might occur, the brown out circuit might be designed to trip at 2.1 volts +/- 100mV.

If a device with such a controller were powered from two alkaline AA batteries, enabling the brownout circuit may cause the device to become unusable with a battery voltage of 1.1 volts per cell, and would likely cause it to cease operation by the time the voltage reached 1.05 volts per cell. Disabling the brownout circuit would likely extend operation down to at least 0.9 volts per cell, and possibly even 0.75 volts per cell. If no plausible malfunction that could occur at low voltage could cause any harm beyond increased drain on junk batteries, disabling the brownout circuit would be a simple way of improving battery life, even if it didn't reduce the current draw from usable batteries.

share|improve this answer

Everything has tolerances, so the brown out reset level must be set somewhat above the minimum level at which the chip is guaranteed to function properly.

Hence the brown out might kick in well before the chip would malfunction. So you have to ask yourself, for this region, where the chip might function OK but you can't be sure, would you choose

  • to let the chip work and hope the best of it (it might work!), or
  • to let the chip be reset (and kept in reset) by the brown-out circuit.

If the cost of malfunctioning is not much higher than the cost of not functioning at all the first option is to be preferred. Think of the ping-feature on an airplane 'black box'. By all means, let it go on if there is even the slightest chance that it will give a ping!

On the other side, consider the triggering of a bomb or a car airbag. If there is the slightest chance of it going off by accident due to a low power voltage, it should better shut itself off. That of course assumes that shutting of means not igniting!

There are situations where no good choice is available. Consider the infamous first Ariane V rocket launch. The direction control computer(s) malfunctioned (in this case not due to low power). What should it do? Going on most probably means steering in the wrong direction, but quitting means not steering at all, which has the same result. Neither is a nice prospect for the people in the control bunker that the rocket might wander into :(


As Ross comments, a backup is of course a good idea for a mission-ciritical system. But that shifts the design problem to that backup. What if that fails? (In practice there are often 3, active all the time, using a majority vote.) In the case of the Ariane 5 both primary and backup computers failed (Though not through their own fault, but that is another story.) What happened next was that some other system (maybe it was even a human in the control room) detected that everything was out of control and triggered the self-destruct. Better have the rocket explode in the air and fall down in small pieces in the sea that have it continue its flight in one piece in some random direction.

share|improve this answer
    
For the rocket situation, the best solution is to have a backup computer which will take over in case the first fails, and have the first shut down, right?? –  Ross Aiken Jul 31 at 15:28
    
some text added –  Wouter van Ooijen Jul 31 at 15:32
    
Actually the Ariane 5 story is much more complicated, and error handling was part of the reason for the failure. esamultimedia.esa.int/docs/esa-x-1819eng.pdf –  starblue Jul 31 at 16:41
1  
No, error handling was not the cause. It was the use of a proven system (it had flown on Ariane 4) with data outside its original specifications without testing it with the new data. (Such tests were originally planned, but later scrapped in a cost reduction program ;) –  Wouter van Ooijen Jul 31 at 17:13

If you don't care about reset (for example, the user can be trusted to turn it off and on again if things don't work perfectly, and no damage is possible) and power consumption is important, turning it off can save some microamperes. (or if you do care, you can use a better external circuit than the so-so one that is built in).

If the internal BOR is inadequate for the task (the tolerances may not be appropriate, for example) then may as well turn it off and use something external.

An interesting requirement for some purposes is that you need to know the maximum voltage below which things like EEPROMs are guaranteed not to work, so that the BOR can inhibit operation and guarantee no corruption. That might be a bit subtle for some built-in BOR circuits.

share|improve this answer

You may choose to disable the BOR if there is a bug where the BOR does not work correctly.

Module: Voltage Regulator

Device may not exit BOR state if a BOR event occurs.

See issue 15 in PIC32MX534/564/664/764 Family Silicon Errata and Data Sheet Clarification.

share|improve this answer
7  
Ouch. Which part does this lovely errata belong to? –  Spehro Pefhany Jul 30 at 14:00
1  
How does something like that make it into production? –  Matt Young Jul 30 at 15:37
1  
That's hilarious. And by hilarious I mean almost criminal. –  Ignacio Vazquez-Abrams Jul 30 at 15:39
1  
The particular device was the PIC32MX664F and only some silicon revisions. Most of the time it would exit BOR normally only once out of every 20 or so times it would not. –  mjcopple Jul 30 at 15:50

If you want to reduce the current consumption in sleep mode. E.g. for the ATmega328P you can reduce it by a 17uA by turning BOD off. Turn everything else off while sleeping and the chip consumes a tiny 1.8uA!

(Source: http://www.rocketscream.com/blog/2011/07/04/lightweight-low-power-arduino-library/)

share|improve this answer

There are situations where you might like to use an external, custom-built brown-out circuit instead.

There are microcontrollers where the resolution of brown-ot levels is quite small.

Let's assume you work with a µc where the two highest brown-out levels are 4.3 V and 2.7 V (common in case of AVR). You have determined that at the frequencies you use, 2.7 V is unsafe. However, 4.3 V would be too high, as it would limit the length of running time after a power fail.

I often have to work with devices which can frequently lose connection to the external power supply and then have to survive on capacitors or batteries. Having a brown-out level of 4.3 V would lead to the device switching off too soon. 2.7 would lead to data corruption. However, if for example, 3.5 V would be a safe brown-out level, you might want to make an external brown-out circuit which works by pulling the reset line of your microcontroller. In this case the internal brown-out circuit is of no use and can be disabled.

In case you have more processors in the same system, it makes sense to use a single external reset controller for all of them. In this case, disabling the individual brown-out detectors in the processors is not only useful for the marginal advantage of saving some power, but is required to avoid the situation where some processors are in reset and others are still running.

share|improve this answer
1  
I know you're not picking on AVR, but I feel compelled to mention that 1) different AVR lines have different BOR thresholds, and 2) AVRs make the reset signal externally visible on nRESET so if you're very careful you can use one as a reset controller. –  Ignacio Vazquez-Abrams Jul 31 at 17:38

We had to toggle the VBOR off and back on during one part of startup due to a bug in the silicon on the microcontrollers we were using. Charging up the caps on the voltage pump would drain the device to momentarily just above minimums and the VBOR kept tripping. So we turned off the VBOR during powerup and turned it on about 10ms later.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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