Optocouplers: Defending Your Microcontroller, MIDI, And A Hot Tip For Speed

Deep in the heart of your latest project lies a little silicon brain. Much like the brain inside your own bone-plated noggin, your microcontroller needs protection from the outside world from time to time. When it comes to isolating your microcontroller’s sensitive little pins from high voltages, ground loops, or general noise, nothing beats an optocoupler. And while simple on-off control of a device through an optocoupler can be as simple as hooking up an LED, they are not perfect digital devices.

But first a step back. What is an optocoupler anyway? The prototype is an LED and a light-sensitive transistor stuck together in a lightproof case. But there are many choices for the receiver side: photodiodes, BJT phototransistors, MOSFETs, photo-triacs, photo-Darlingtons, and more.

So while implementation details vary, the crux is that your microcontroller turns on an LED, and it’s the light from that LED that activates the other side of the circuit. The only connection between the LED side and the transistor side is non-electrical — light across a small gap — and that provides the rock-solid, one-way isolation.

Music, Motors, and High Voltages

I was just building a MIDI-compatible device, and because MIDI connects musical instruments together over a distance, there’s the possibility for a ground loop that could make an audible hum in everything that’s plugged together. But my little microcontroller needs to speak 31,250 baud serial to the other microcontrollers in the synthesizers. How can they do this without a common ground? All devices with a MIDI-in port send the voltage over the wires straight into an optocoupler.

Imagine that my microcontroller is on the right side of this circuit, plugged into the synthesizer’s MIDI-in port. It signals the synth by sending up to 5 mA down the cable, lighting up the LED inside the opto, and pulling down the “To UART” line on the left side. There’s no common ground to hum at 50 Hz (here), but the serial data gets through: current signal → LED → (created light) → phototransistor → current signal → isolated device.

Just as important, an optocoupler can protect the rest of the world from your microcontroller if it’s running at an odd voltage. For instance, a project that uses a transformerless power supply should be isolated because what the microcontroller sees as “ground” may be up to a few hundred volts off from earth ground. Any input to the microcontroller or output from the microcontroller will need to pass through the LED side of an opto to keep you from getting shocked.

This clever H-bridge uses the optos as logic elements as well as isolation.

A final example of a good use for optocouplers is connecting logic circuits up to beefy motors with an H-bridge circuit. First, the motors may require a voltage that would fry your microcontroller, so you’ll usually need at least a transistor between the micro and the motor-driving transistors. But especially with stepper motors or DC motors driven with PWM signals, the motors’ power rails can be a very noisy place. And with large currents ebbing and flowing, not even the ground wires are safe.

Using optocouplers in a motor driver design kills two birds with one stone. Not only can you interface the low-voltage microcontroller with the higher voltages needed to turn off the high-side transistors in this example, but there’s absolutely no way for all of the voltage noise in the bridge circuit to disrupt the microcontroller. You’re free to use the ADCs on your little robot, safe from motor noise!

In all of these examples, notice that the optocoupler works one way only. Signals can only pass from the LED side to the transistor side. So if you want to couple something like an SPI or UART signal, you can. But if you want to isolate I2C, because signals need to go in both directions, you need to buy an I2C switch to disentangle the signals.

Circuit Characteristics and CTR

The main selling point of an optocoupler is the isolation between the two sides. A 4N25 optocoupler boasts an isolation test voltage of 5,000 V between the LED and transistor. If you put 500 V across it, you would see an effective resistance of more than 1012 Ω. For all normal-voltage purposes, an optocoupler keeps the hot side hot and the cold side cold.

So what do you need to know before using an optocoupler in your circuit? The sending side turns on an LED, so you’ll just need to know its threshold voltage and how much current it can take. The circuitry for the receive side is more involved, because it can be a photodiode, which will probably need an op-amp buffering circuit, or a phototransistor, which can sometimes get along without.

To figure out what kind of conditioning circuit is required, there’s one more missing ingredient: the amount of light the LED puts out per milliamp of input current (the efficiency of the LED), and the number of milliamps of output current the transistor or diode will pass per photon of light that hits it (the gain of the photo-device). Cancelling out the light in the middle, you get the current transfer ratio (CTR), the current through the collector of the transistor divided by the current put through the LED.

From Vishay’s 4N25 datasheet (PDF)

CTRs vary from 1/100 for photodiode-based optocouplers to around 1/2 for phototransistors and up to 5-ish for photodarlingtons. The tradeoff for this gain, all the way up the chain, is in speed of response. You probably shouldn’t be sweating the CTR very much anyway, because you’ll likely be driving another transistor or feeding a microcontroller’s high impedance input with the opto’s output.

CTR varies by a factor of two across the LED’s drive current, and even with temperature and across different parts. In short, CTR is useful for ballparking, but it’s not a hard design spec. The bottom line is that you’re definitely going to need an external amplifier, usually in the form of an op-amp, with a photodiode, and you might be able to get away with a single transistor amp for the transistor types.

For an optocoupler with a Darlington output, you may not even need any other active components. The simplest circuit consists of a resistor to limit the current from the power supply into the transistor. If you know that the LED is driven with 5 mA, for instance, and the CTR is 1, then the transistor should also be able to pull 5 mA to ground, so if you pick your load resistor to pass less than 5 mA, the output should swing nearly rail-to-rail. Since CTR is a fuzzy parameter, you might want to design around 2 mA or so in this example.

Finally, you’ll also often see a reversed diode (as in the MIDI spec) in parallel to the LED. This is to prevent reversed or AC currents from blowing the LED out. Some of these IR LEDs burn up with as little as two or three volts applied in reverse, so an external diode is cheap insurance for a penny.

The Need for Speed

Besides an abstract appreciation for optocouplers, my main reason for writing this article is a circuit of Bob Pease’s that turns a mediocre jellybean optoisolator into a high-speed powerhouse. As I mentioned briefly above, I was implementing MIDI for a synthesizer project. MIDI is basically an agreed-upon set of codes transmitted over an opto-isolated 31,250 baud UART, 8N1.

The MIDI spec calls for shorter than 2 μs rise and fall times when 5 mA is pushed through the LED, and it recommends a Sharp PC-900 or 6N138 (PDF datasheet) for the optocoupler. The 6N138 is a photodiode with a built-in amplifier; it has just enough speed and a CTR > 3. It would be totally convenient. I don’t have one in my parts boxes, so I started looking around for alternatives.

I first started out with a 4N29 Darlington optocoupler because it has a high CTR and I was hoping to get away with just a load resistor, but its rise time is too slow at around 9 μs even when the resistor is fine-tuned. So I took out a 4N25, which is a normal transistor optocoupler, which according to the Vishay part’s datasheet has a typical 2 μs rise time, which is right on the edge, but that’s when it’s driven by a 10 mA current into the LED. In the simple circuit above, I couldn’t get it any faster than 5 μs at 5 mA. Boo!

The solution was this circuit from Bob Pease’s excellent Troubleshooting Analog Circuits. This gem reduces the rise and fall times of the 4N25 I had on-hand by a factor of at least 25, from a not-in-spec 5 μs to well under 200 ns. Problem not just solved, but completely obliterated. Beautiful!

The Pease circuit essentially follows the output of the 4N25 with another transistor, increasing the effective CTR of the circuit as a whole, and letting the output voltage swing rail to rail. This is the kind of amplification that you’d need with any but the simplest phototransistor circuits anyway.

But it also adds two resistors. R1 pulls the base of the output transistor down which helps shorten the fall time when the phototransistor is no longer conducting. R2 provides positive feedback to the base of the phototransistor, helping it to snap on faster by adding to the photo-electric base current when the transistor starts to turn on. I used Pease’s suggested values of 2 MΩ for R1 and 1 kΩ for R2.

This circuit is fantastic. If you’re building a MIDI device, and you’re afraid of slow rise times, which you should be, give it a try. With zero tuning, it turns a heap of common components into the equivalent of a much faster optocoupler.

Your Turn

Optocouplers are somewhat of an odd beast. On one hand, they’re entirely intuitive: an LED and a phototransistor. On the other, they can be pushed to performance extremes with the right supporting circuitry. What’s your favorite opto circuit?

65 thoughts on “Optocouplers: Defending Your Microcontroller, MIDI, And A Hot Tip For Speed

    1. That’s the part suggested in the MIDI spec, so that should be a good choice.

      As many folks have pointed out below, there are faster options available today that would blow the late-80’s tech out of the water.

      I didn’t have either in my closet, although I’ve since ordered some 6N138s for the next project, whatever that’s going to be.

  1. My favorite application for optos:
    While maybe not technically an “optocoupler”, solid state relays with FET outputs make nearly perfect audio switches with extremely low distortion and low noise coupling – with no added risk of “ground loops”. They can be switched remotely with a current loop that makes the control very noise immune. And since they turn on fairly slowly, clicks and pops are very low.

    1. Hey that sounds pretty interesting, I’ll keep that in mind for future audio projects.

      I’ve never actually learned the difference before and now you got me wondering. What makes a solid state relay not an optocoupler, anyway?

  2. Pretty impressive performance. I like to use the output as a current steering device. This reduces the voltage across the phototransistor during change, it tends to be the capacitance that reduces the performance, and less voltage change means less effect of capacitance. Basically try keep the output voltage swing as low as possible, build your circuit to detect current change, not voltage change.

  3. One thing to keep in mind when using optocouplers used for high voltage DC isolation (as in the motor driver example) is that you should always check that the device you’re using is rated for DC use.

    While almost any optocoupler is fine for AC or ground loop isolation, many of them will slowly fail if exposed to standing, high-voltage DC potential for months at a time. It has something to do with charge injection into the photo transistor substrate.

    There’s usually a note or two in the datasheet, and, for extreme cases, there are devices specifically designed to resist kilovolts of DC forever.

    1. As long the the working voltage does not exceed the rated working voltage of the IC, there is no significant MTTF difference between AC and DC.

      The differences in AC vs DC isolation have more to do with PCB layout and the design of the opto’s surrounding circuit.

  4. It’s also worth checking out the IL600 series. They have a completely different operating principle (the giant magnetoresistive effect), and are much faster than typical optocouplers.

    Just keep them out of strong magnetic fields. Setting a neodymium magnet on the package will temporarily shut it down.

  5. You will also degrade speed by over-driving the input LED. It result in an super saturated transistor which takes longer to turn off. Just because you can drive the LED with 20mA or more doesn’t mean you have to!

    1. Another point – Because it’s an LED, an opto-isolator will suffer from degradation over time as the brightness of the LED degrades. Driving the LED at a lower current lessens the effect over time so the design will last longer. This is especially true if the design nreds to work for extended periods of time at hot temperatures.

    2. True, but. I was experimenting around with these (admittedly slow) optos, and noticed that turn-on speed increases with drive current. This also shows up in the datasheets.

      MIDI spec is a 5 mA loop, and I’m connecting to all manner of external devices, so although I _could_ drive the LEDs harder, it’s not guaranteed that any other devices will.

  6. I’ve got a system with better than 100 kV of isolation: it’s called a cell phone with a probe plugged into its mic jack (through a voltage divider, of course), sending data over WiFi or Bluetooth. Sampling rate >40kHz.

  7. Hang on. This explanation doesn’t make much sense.

    “R2 provides positive feedback to the base of the phototransistor, helping it to snap on faster by adding to the photo-electric base current when the transistor starts to turn on.”

    First, R2 doesn’t connect to the optocoupler base except through 2 Mohm R1. The time constant there is going to be a few microseconds, generously assuming the base to be less than a few pF.

    Second, the base of Q1 (and therefore R2) can’t swing more than 0.7V above ground.

    Third, R2 is always more negative than the base of the phototransistor: there’s no way it can add current to the base of the phototransistor.

    Pease, Himself, doesn’t describe the circuit that way: he claims it gets it to only 5 us, not 200 ns, and He abbreviates the explanation, saying R1 is to “tailor the bias”.

    My guess is that R1 just biases that phototransistor further off, and removes photo-generated charge faster when the light stops, rather than waiting for charge to dribble away through the base.

    1. I tried the schematic myself and I also did a LTspice simulation and it seems like either I miss something, or it doesn’t work:

      It seems to me like he is trying to bias an NPN transistor (the one inside the opto) with the emitter.
      I automatically thought of my project and tried to see if I can improve the slopes of my mosfet and then tried with a bipolar transistor and then with multiple optocouplers and transistors, different values, voltages and resistors. The effect it’s the same and I don’t know where Elliot Williams took the schematic from. Any additional info, Elliot?
      I’ll keep trying maybe to switch the resistors between themselves. Here is my project page:


  8. There is a very similar but slightly more simple (elegant?) circuit in the book ‘More Advanced MIDI Projects’ by R. A. Penfold published by Bernard Babini in 1989 (if you can find it). It uses a BC549 switching transistor at the output to increase a relatively inexpensive TIL111’s switching speed and does away with two of the resistors. The book has plenty of other practical MIDI hardware circuits to investigate…

  9. An opto I was using loaded the circuit too much, and I was pressed for time. Used a FET to switch the higher voltage instead… and ended up blowing up an expensive piece of kit.

    I knew better, ignored it and am paying the price. Always use an opto to switch higher voltages!

    1. I remember doing something similar when I was about 15 trying to make a light chaser using an electronic dice kit to drive triacs. Using one Chanel was fine but when I added a few more triacs directly connected to the counter chip a large hole suddenly appeared. ( thankfully I knew enough about mains voltage not to touch anything when it was plugged in)

  10. It’s a small jump from optocouplers to fibre-optic cables.

    I’ve been told it’s technically possible to use the same fibre in duplex (for your I2C condition) by using different wavelengths, but when you factor in the cost of a 2nd fibre it’s rarely considered practical.

  11. Nice trick with the 4N25, but the schematic is near inscrutable, especially what’s happening around R1 and R2. Would it be possible to get a better image in the article, or a link to the original?

  12. It would be interesting to see physical teardowns of different kinds of opto- / magneto- / etc isolators.

    Is it possible to extract say the phototransistors or photodiodes? how do they compare to easily sourced discrete photodiodes? I can imagine them being faster than usual BPW34, if they are smaller and hence have less capacitance?

    Same for the giant magnetoresistive based isolators: while we all knew HDD heads contained them, these would be a more reliable, cheap, repeatable source since you don’t need to scavenge them from HDD heads…

  13. I have a small nit pick of the statement: “..and that provides the rock-solid, one-way isolation.” ISOLATION is “all ways” not just one way. Diode isolation is one way, ignoring their reverse current. The other thing to say about HV isolation is that failure modes are typically catastrophic, maybe even more so than ESD zaps on an IC (e.g. “lightning bolts”). I worked for a company that sold navaids to the FAA, and you should have seen some of the stuff we got back that got hit my lightning, even through huge solid copper bus bars and layers of lightning protection. Trouble was, these were from VOR equipment located on top of mountains and the only good lightning target was their metal shelter and its contents.

    PCB layout is also critical to the success of any overall isolation scheme, and may even require something like a tiny Faraday shield. I recently got some HV stuff from China and noticed PCB material removed between a relay’s HV and LV terminals in order to affect better isolation (assuming low humidity).

    IR remotes and their receivers have good isolation. IrDA can do >1 Gbps — check Wikipedia. Full duplex complicates designs.

  14. My favorite opto circuits are home made vactrols I make to build audio fx (compressors etc). One led here, one photoresistor there, black tubing around and voila: a resistor that can be driven by everything, from the same signal rectified and amplified to a microcontroller pin. Make two and connect the two leds in series with their center connection wired to a push-pull capable output, then wire the two photoresistors in series and you get a potentiometer you can drive using pwm. Photoresistor also are inherently slow, so unless one uses a frequency in the audio range, there’s no need for filtering as the driving signal will never bleed into the audio path.

  15. If you end up here trying to get a 4pin optocoupler like the l817, ltv817 or pc817 working for MIDI data transfer you need to use the following amplifier layout https://www.mikrocontroller.net/attachment/296701/PC8x7-MIDI.png as found on this german forum https://www.mikrocontroller.net/topic/400055

    Without this the output will look like a bunch of shark fins with an 8k pull up and like a single blob with a 220ohm pull up (as per the fastest response time on the ltv-817 datasheet!)

  16. Hello. Thank you for the schematic, but there’s a smal error or misinterpretation possible in the schematic. Usually all ground symbols are tied to the same point. If you do that in this schematic, you loose the isolation and create a ground loop. Pin two of the optocoupler should be tied to pin 5 at the back of the midi in plug ONLY, and not to the rest of the schematic ground. The reverse protection diode at the input is also missing.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.