Electronic – How to measure high DC voltage by micro-controller with an integrated approach

dchigh voltageintegrated-circuitmicrocontrollervoltage measurement

Goal is to measure DC voltages in the 100-500VDC range, safely with a microcontroller (e.g. Arduino)

The particular application is to monitor the voltage of a large Lithium series parallel battery array with a total nominal voltage of 188 VDC. Measurement tolerance within a tenth of a volt is suitable for the intended application.

The purpose of the measurement is to utilize a microcontroller to automate the ON/OFF cycle of a battery charger via a low-voltage trigger relay.

I am looking for suggestions to a solution with measurement circuit simplicity and cost as considerations. This should be an integrated approach and avoid the need for discrete components such as transformers etc.

edit; it would be preferable to avoid using a traditional resistance based 'voltage divider' approach.
While this method is suitable for lower direct current situations, when dealing with high voltages things can get messy.
edit 2; added more language to clarify that, the solution should be integrated.

Best Answer

While others have suggested linear optocouplers and voltage dependent oscillators, I'll throw a very different method out as an answer to read high voltages with very high isolation.

I've used this in fully floating front ends up to around 56V. It should work for any voltage you can get a suitable transformer for.

In the schematic below I've created a short pulse driving a FET. When the FET is ON, the transformer ratio is the attenuator. I've previously used small audio transformer because they have high inductance primaries, but I'd suggest you could use small DC-DC converter transformers just as successfully.

The transformer used here is most like this with an 18:1 turns ratio and about 6mH primary inductance. The transformer turns ratio is of course very stable with temp/time so makes an excellent attenuator.

schematic

simulate this circuit – Schematic created using CircuitLab

You could expect waveforms like this:

enter image description here

With the rather low primary inductance here, the current rises to 80mA quite rapidly. If you can find a transformer with a 20-50mH primary then the peak current is reduced and the time you can activate the FET made longer.

If you are using an Arduino then by default the A/D takes 104us per conversion. The pulse width in this circuit would therefore require a sample and hold to capture the stable output voltage. But if you can find a better transformer, then you might be able to hold the FET on for more than 15us so not require the external sample/hold (the ATMega328 has about 12us sample time for the internal S/H). It all depends on what you want as an acceptable input current peak in the transformer primary.

You obviously have to provide an isolated drive for the FET, but there are plenty of pulse transformers for this application that could be driven from the Arduino.