Problem Statement:
I’d like to be able to protect my ADC from input voltages higher than 5V. What’s the simplest protection circuit I could build to have an output like shown below?
Solution:
2 Answers
Probably the simplest is a simple zener limiter:
This will also limit negative voltages to about -0.7 V, though this limit will not be well controlled.
Edit: I show 100 Ohms at R1. This is just a default value. You want as high a value as you can use, given the bandwidth of the signal you’re sampling and the input current needs of your ADC. The higher this resistance, the lower the current the zener needs to sink in an over-voltage condition, so the smaller (and lower-cost) the zener can be. You may want to add a capacitor in parallel with the zener so that it combines with R1 to form an anti-aliasing filter for your ADC.
A lower cost option if you have a 5 V rail that can sink enough current, and you don’t mind the limit value being slightly above 5 V:
You can buy the two diodes in a dual package for exactly this purpose. If you want the limit value to be nearer 5.2 V than 5.7 V, use schottky diodes instead of regular silicon diodes.
Edit 2
As Steven points out, there’s a trade-off here. A zener will start to conduct slightly at low current levels, and the source you’re measuring needs to be able to provide enough current to drive it all the way to 5 V to get the clipping you want. If you absolutely need to be able to get to 5.0 V before clipping begins, you may need to use, say, a 5.3 V zener instead of 5.0 V, and be sure your source can provide at least 10 uA. Then of course you aren’t guaranteed to clip below 5.5 V.
On the other hand, the diode connection to the positive rail (my second solution, whether using external diodes or the ones that are probably built in to your ADC inptus) will only work if there are enough loads on the 5 V rail to sink the current provided by the overvoltage source. In a low-power circuit, the overvoltage could end up driving your 5 V supply out of regulation and cause all kinds of unexpected behavior in other parts of your circuit.
You can limit the current that needs to be sunk in the overvoltage condition by increasing the R1 value. But your ability to do that is limited by the bandwidth you want to be able to measure in your input signal and/or the input current needed by your ADC.
It’s also not true that the zener voltage “varies wildly with current”. It would be more correct to say there is a small leakage current, on the order of 10-100 uA, below the zener threshold. Once the zener enters avalanche operation, the voltage can be very stable across decades of current. Here’s the typical I-V of an On Semi zener family:
Note that higher-value zeners have better stability than low-value ones. And of course there are also thermal variations (1-2 mV/K typical for the On Semi part at 5.1 V) to worry about if you want a very stable clipping voltage.
-
The resistor value will depend on the input impedance (or current input needs) of your adc, the sampling rate, and the required bandwidth of the input signal you’re measuring. 100 was just the default value in the circuitlab editor. – The Photon Jul 16 ’12 at 4:44
-
Also, the zener is not hooked up to 5 V. It’s hooked up the way it’s shown in the schematic (cathode to the signal line, anode to ground). – The Photon Jul 16 ’12 at 4:45
-
1And finally, I did the schematics at circuitlab.com. Good for simple circuits but frustrating when you want a component that’s not in their library (like an ADC). – The Photon Jul 16 ’12 at 4:47
-
1@waspinator, You use the same supply that’s supplying your ADC. The current coming from the overvoltage condition needs to be sunk through the supply pins of the ADC and other parts in your circuit. – The Photon Jul 16 ’12 at 17:26
There was a time when I thought zener diodes were great. Now I know that they’re not. As a matter of fact they stink. This diode has a 4% tolerance at 250 µA, so you may lose the top 200 mV of your reading, but it gets worse: at 10 µA zener voltage is only 4.3 V, that’s a 14 % error. If your input comes from a relatively high impedance source, like a resistor divider you may lose the top 700 mV.
Most microcontrollers have clamping diodes on their I/O pins:
You can use those. If your signal comes from a low impedance output you’ll want to add a series resistor to protect the clamping diode against a too high current. 50 mA is often specified as Absolute Maximum Rating. If you use a 15 kΩ resistor you’ll limit the current to 1 mA for a 20 V input. The Photon rightly points out that the current shouldn’t be too high. That’s because you’re injecting current where the voltage comes from a voltage regulator, and that can only source current, not sink it. So if an external source injects current the regulator’s load should be able to drain it to ground.
As PetPaulsen points out there’s debate whether this is acceptable practice. The datasheet may say maximum input is Vcc + 0.3 V, but it may also say maximum 20 mA for the clamping diodes (for instance this PIC controller. That may mean that the clamping diode voltage drop is less than 0.3 V, for instance if they’re Schottky’s.
Anyway, you can always use your own external diode to clamp to Vcc. This Schottky diode only drops 100 mV at 10 mA, so it will clamp the input to a safe value. Don’t forget the 15 kΩ resistor for low output impedance sources.
Conclusion:
If your input voltage doesn’t go negative then the ground clamp isn’t required.