How to Eliminate Ground Loops with Signal Isolation

January 29, 2016 by Orrin Bigelow

This project explains how to isolate signals to eliminate ground loops in electronic systems.


This project focuses on Power and Signal isolation in low voltage DC circuits. If you are unfamiliar with isolation principles, click here to read an excellent article on Transformer Isolation in the Technical Articles of All About Circuits. You can also refer to Electrical Isolation in Chapter 9 of Vol. II in the Textbook section of All About Circuits. 

There are many reasons to isolate circuits, most notably to avoid ground loops or eliminate conducted noise in sensitive electronic circuits. An engineer may also need to bridge two circuits together that operate at different voltage potentials. Whichever the case, applying galvanic isolation is essential to good engineering practices, and can be found in numerous commercial and industrial products and equipment. Regardless of the application, radiated and conducted noise can substantially degrade a circuit's ability to generate or carry signals robustly, especially in commercial applications where machines, motors, high voltage, and large electrical currents may be present. Sometime, purely isolated power is necessary to eliminate ground loops and chassis noise. This project focuses on providing clean isolated power and isolated signal paths for control systems. Please note that multiple signal isolators may be used to build closed-loop control systems, a necessity in today's advanced automation. Isolated Power and Isolated Signals are two different things, so let's explore both.

1. Isolated Power: Nearly every isolated power source (AC or DC) is built around transformer isolation, but in this project we'll focus on the concept of isolation and not power supply design. DC to DC conversion is complicated, and adding isolation makes it even more difficult to design from scratch. The good news is, a lot of Integrated Circuit manufacturers have taken on the complexity and provided us with many great options in an easy-to-use chip! We'll use Texas Instrument's DCH01, a miniature off-the-shelf 5-Volt DC-DC converter, with built-in galvanic isolation to provide isolated power. We'll apply 5VDC and Ground to the input pins, and receive an isolated 5VDC and Ground on the output pins. How cool is that!

2. Isolated Signal: There are several different ways to isolate a signal, but in this project we'll use an opto-isolator (also known as an optocoupler). Opto-isolators have been a staple in the engineering world for decades. They convert an incoming electrical signal into light, which is then transmitted across a gap and received by a phototransistor, which converts the light back to an electrical signal. The gap provides the isolation barrier needed to remove ground loops. 

In the following experiment, let's learn how to build an isolated circuit using a handful of components, one power supply, and a breadboard. Once we've built everything and tested the circuit, we'll add an Arduino Uno to the mix and create an isolated signal output. 

Parts List

Qty Part  Price (USD)
1 DCH010505 DC-DC Converter $7.03
1 HCPL2631 Opto-Isolator $2.38
1 560 Ohm Resistor $0.10
2 1.5k Ohm Resistor $0.20
1 Through-Hole LED $0.25
1 Arduino Uno $22.89


Below is a schematic of a circuit you can build and test to get started. We will modify it to incorporate an Arduino Uno, but for now it explains the basics. The yellow box at the top is a diagram of the DCH01 DC-DC Converter. When you apply 5VDC to pin 1 and Ground to pin 2, you achieve an isolated 5VDC on pin 7 when referenced to pin 5. (*Note, if pin 7 does not have a load, the output should read around 8VDC - which is ok.) The gray box is a diagram of the HCPL2631 Opto-Coupler. Each input LED of the opto-coupler has a corresponding 'open-collector' output. When current flows through the internal optics, it transmits light across the isolation gap, and turns the output transistor 'on'. In our example, the Isolated Signal on the output (pin 7) is pulled high with a 1.5k Ohm resistor, so the signal is High by default. When the switch on the input (pin 2) is closed, current flows through the input LED and allows the output transistor to turn 'on' (or reach saturation). Once the output transistor reaches saturation, it sinks current from the pull-up resistor and brings the Isolated Signal as close to Isolated Ground as possible. So, in digital terms, LOW input = LOW output, and HIGH input = HIGH output.

Breadboard Assembly

Ok, now that we have our feet wet with isolation principles and a functioning prototype circuit, let's add in the intelligent (well, sort of!) Arduino Uno. First, let's get the Arduino Uno working. Start the Arduino IDE programming environment (you can download it here). Open the 'Blink' Sketch, found in the Arduino Examples. Then, select your target Arduino under Tools --> Board --> Arduino Uno, and upload the code.


Make the following connections from your Arduino Uno to the HCPL2631 and the DCH010505. We'll use Pin 13 on the Arduino because it is tied to an LED. Then, when the Arduino LED blinks, our isolated LED will blink!

When the Arduino Uno sets pin 13 High, no current flows through the input of the Opto-Isolator and the Isolated Signal remains pulled High. When Arduino sets Pin 13 Low, current flows through the Opto-Isolator Input and biases the output transistor, allowing current to flow through the Isolated LED and provide a Low Isolated Signal. Below is my breadboard setup and a short video demonstrating the setup. Cheers!

  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the Uno and
  Leonardo, it is attached to digital pin 13. If you're unsure what
  pin the on-board LED is connected to on your Arduino model, check
  the documentation at

  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second

Give this project a try for yourself! Get the BOM.