How to read 0 -10V analog voltage with lower voltage tolerant ADCs without a voltage divider

However because this is for a prototype that should be up to Industrial safety standards, my boss wants me to isolate the 10V from the 3.3V logic.

I question your boss's logic when it comes to industrial standards: Where you need that level of isolation, I'd presume you want something very different than a raspberry pi running general purpose operating systems for safety reasons. But I digress.

Basically, isolating an analog signal and still reproducing it with a high number of bits is hard, and nearly impossible when you want accuracy at DC.

What you do instead is usually put the ADC on the unprotected side, and isolate the digital interface to the ADC!

Two ways to do that:

  1. Using typically optocouplers to interface your ADC to your MCU. That's easy with an SPI ADC (by the way, you could at 10 bits also just throw out the MC3004, and use any of hundreds of capable microcontrollers that have a built-in ADC and might make your solution more flexible, but I, again digress).
  2. Using an isolated ADC, which does isolation internally.

Either way, your voltage divider at the input of your ADC stays.


I would use an opto-coupler if this was a digital signal, but I am not sure if there is a way to achieve the same level of isolation while reading analog values.

There is a product sold as a "precision linear optocoupler" for this purpose. Basically this is an optocoupler with one transmitting LED and two receivers. You use the second receiver to provide feedback to an op-amp circuit on the transmit side of the circuit to linearize the optocoupler response.

enter image description here

(image source --- be aware that this specific product is obsolete)

I haven't used these parts enough to know how difficult it would be to achieve 10-bit accuracy when using them.

However, based on your comments to Marcus' answer, it seems like what you really need is not galvanic isolation but simple input over-voltage protection. You could achieve this with a simple zener diode limiter, for example:

schematic

simulate this circuit – Schematic created using CircuitLab

Now if we pick an 8 V zener (for example) it won't interfere with the ADC voltage under normal conditions, but it will limit the voltage delivered to the ADC under fault conditions to 4 V through 1 kohm, which can be handled by the over-voltage protection circuits of typical ADCs. When the fault occurs, the zener will need to absorb $$P_Z = (8\ {\rm V})\frac{48-8}{2k}{\rm A} = 160\ {\rm mW}$$ which is an easily obtained rating.

It's possible you actually need both isolation (to protect against common mode transients up to 100's or 1000's of volts, which may occur in circuits connected to motorized machines) and over-voltage protection (to protect against your 48 V supply shorting to this analog signal), in which case you might want to use both the zener and the opto-isolator (probably with the zener circuit protecting the input of the optoisolator circuit).


I suggest using an ADC + MCU or maybe an MCU with an onboard ADC and transmitting the data digitally over the isolation barrier.

Analog methods are possible (transformer methods are usually better than optoisolator), but it's difficult not to significantly compromise even a 10-bit ADC.

If you want to avoid the MCU, you can find a single-chip solution to isolating the I2C bus and use an I2C ADC chip. No extra programming then.