How would I design a protection clipper circuit for ADC input?

Probably the simplest is a simple zener limiter:

enter image description here

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:

enter image description here

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:

enter image description here

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.


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:

enter image description here

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.

If your input voltage doesn't go negative then the ground clamp isn't required.