Use Signal Isolation to Eliminate Ground Loops
2017-05-10 | By All About Circuits
License: See Original Project Arduino
Courtesy of All About Circuits
This Arduino project focuses on Power and Signal isolation in low voltage DC circuits. If you you’re not familiar with isolation principles, this textbook page on Electrical Isolation and this technical article on Transformer Isolation on All About Circuits are good places to start.
There are several reasons to isolate circuits, but the most notable are eliminating ground loops or eliminating conducted noise in sensitive circuits. Engineers may also need to bridge two circuits together that operate at different voltage potentials. The application of galvanic isolation is an essential engineering practice, and can be found in numerous industrial and commercial products, as well as equipment. No matter the application, radiated and conducted noise can substantially degrade a circuit's ability to generate or carry signals in a robust manner, especially in commercial applications where motors, machines, high voltage, and large electrical currents may be present. Sometimes, purely isolated power is necessary in order to eliminate ground loops and chassis noise. This project is focused on providing isolated signal paths and clean isolated power for control systems. Please note that multiple signal isolators may be used to build closed-loop control systems, which is a necessity in today's advanced automation. Isolated Signals and Isolated Power are two different things, so we’ll explore both.
1. Isolated Power: Almost every isolated power source (AC or DC) is built around transformer isolation. However, this project is focused on the concept of isolation, not power supply design. DC to DC conversion can be complicated, and adding isolation makes it even more difficult to design from scratch. Fortunately, a lot of Integrated Circuit manufacturers have taken on this complexity and provide many great options in easy-to-use chips! We'll be using Texas Instrument's DCH01, a miniature off-the-shelf 5-Volt DC-DC converter. It has built-in galvanic isolation to provide isolated power. We can apply 5VDC and Ground to the input pins, and receive an isolated 5VDC and Ground on the output pins. Pretty cool!
2. Isolated Signal: There are many ways to isolate a signal, but for this project, we'll be using an opto-isolator (also known as an optocoupler). Opto-isolators have been a staple in the world of engineering for decades. They convert an incoming electrical signal into light and is transmitted across a gap and received by a phototransistor, then the phototransistor converts the light back to an electrical signal. This gap provides the isolation barrier that’s needed to remove ground loops.
With this information, now we can build an isolated circuit using only a handful of components, one power supply, and a breadboard. Once we've built everything and tested the circuit, we can add an Arduino Uno to the mix and create an isolated signal output.
Parts List
- DCH010505 DC-DC Converter
- HCPL2631 Optp-Isolator
- 560 Ohm Resistor
- 1.5k Ohm Resistor x2
- Through-Hole LED
- Arduino Uno
Schematic
There’s a schematic below of a circuit you can build and test to get started. The orange 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 get an isolated 5VDC on pin 7 when referenced to pin 5. (*Note, if pin 7 doesn’t have a load, the output should read around 8VDC - don’t worry, this is ok.) The box below it is a diagram of the HCPL2631 Opto-Coupler. Each input LED on the opto-coupler has a corresponding 'open-collector' output. When current flows through its internal optics, light is transmitted across the isolation gap, turning the output transistor 'on'. In our example circuit, the Isolated Signal on the output (pin 7) is pulled high with a 1.5k Ohm resistor, making the signal High by default. When the switch on the input (pin 2) is closed, current will flow through the input LED, allowing the output transistor to turn 'on' (or reach saturation). When the output transistor reaches saturation, it will sink current from the pull-up resistor and bring the Isolated Signal as close to Isolated Ground as possible. To put this in digital terms, LOW input = LOW output, and HIGH input = HIGH output.
Breadboard Assembly
Now that we have some background on isolation principles and a functioning prototype circuit, we can add the intelligent(ish) Arduino Uno. First, we need to get the Arduino Uno working. Start the Arduino IDE programming environment, then open the 'Blink' Sketch, which can be found in the Arduino Examples section. Next, select your target Arduino under Tools --> Board --> Arduino Uno, and upload the code.
Make the connections from your Arduino Uno to the DCH010505 and the HCPL2631. We'll use Pin 13 on the Arduino because it is tied to an LED. When the LED on the Arduino blinks, our isolated LED will blink!
When the Arduino Uno sets pin 13 High, no current will flow through the input of the Opto-Isolator and the Isolated Signal will remain pulled High. When the Arduino sets Pin 13 Low, current will flow through the Opto-Isolator Input and will bias the output transistor. This will allow current to flow through the Isolated LED and provide a Low Isolated Signal. The breadboard setup is shown along with a short video demonstrating the setup.
Arduino Code
/*
Blink
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 http://arduino.cc
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
}
You can find a downloadable version of the code on All About Circuits.
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum