Arduino – How to Read 0-10V Analog Voltage with Lower Voltage Tolerant ADCs Without a Voltage Divider

adcanalogarduinoraspberry pivoltage measurement

Background Information

I want to implement an ADC as an extension to a Raspberry Pi, so that it has the capability to read analog signals. I will be using the MCP3004/3008, as I got lost in the datasheets of the TI counterparts. For now, 10-bit resolution is good enough.

I am aware that I could use a voltage divider like this:


simulate this circuit – Schematic created using CircuitLab

The Question

Because this is for a prototype that should be up to industrial safety standards, my boss wants me to isolate the 10 V from the 3.3 V logic. I don't really know a method to do this though while reading analog signals.

My Google search didn't yield any answers to me. So I was wondering if there is a method to read analog values, without a voltage divider that is safer to use when reading higher voltages with low logic voltage components. 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. I would appreciate it if somebody more experienced would share his knowledge.

Edit: I have decided on using 2 ADS1115/ADS1015 instead of MCP3004/3008.

Best Answer

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.