How to vactrol

Look around the synth DIY world and before long you’re likely to find a circuit containing something like this:

Vactrol driven by CV through resistor

This is an attempt to give voltage control to a circuit, using a vactrol. A vactrol is a light source (classically a little neon or incandescant light, but these days an LED) and a photoresistor butted up against one another and enclosed in a light tight case — you can buy them, though they’re rather expensive, or you can make your own, though your results may be unpredictable. A voltage applied to R1 produces a current through the LED, which lights it up, which changes the resistance of the photoresistor, and that might change the cutoff frequency of a filter or the frequency of an oscillator or whatever. Easy voltage control.

But not so great voltage control.

There are a couple of problems with this design. For one thing, someone could presumably plug a negative voltage source by accident into the CV input, and that could damage the LED. A diode from the CV input to ground, or antiparallel to the LED, would fix that. Let’s just assume such a diode is in place from here on, okay?

There’s also the question of whether this does what you want to the downstream circuit. The photoresistor value and response curve is what it is, and may or may not give you a suitable range of resistances. There are other pitfalls associated with vactrols, which Matthew Skala discusses near the bottom of this blog post.

But assuming you really do want to use a vactrol, and you’ve taken steps to protect the LED, there are still problems with this design. To start with, it uses the CV source to supply current to the LED. But CV sources generally are designed to be voltage references, not current sources. They usually assume the load they’re driving has an impedance (essentially a resistance to ground) of about 100kΩ or more. Here, well, it depends on the LED, but typically the forward voltage is around 2 V and maximum current about 20 mA, so if the CV is 0 to 10 V then you want R = (10-2) / 0.020 = 400Ω. That’s way lower than 100kΩ!

Things get even worse if you try to attenuate your CV:

Vactrol driven by CV through attenuator and resistor

With nothing connected to the wiper, the wiper voltage will vary linearly from 0 V to the CV value as you turn the pot. But connect the wiper to that 400Ω resistor and that nice behavior goes out the window. You still get 0 V to CV, but not linearly; most of the voltage change will happen in the last few degrees of knob turning. See the curve below. It’s better with a smaller value pot, but then you’re demanding more current from the CV source which, again, may be trouble.

Wiper voltage vs wiper position

There’s another problem with this setup. The brightness of the LED is roughly proportional to the current going through it, and that current is not proportional to CV. In particular the LED won’t light up at all unless the CV is above about 2 V, and when it does light up it won’t be a simple linear function of the CV.

LED current vs CV

All of which is not to say you can’t get this arrangement to work. In some situations, if you don’t care much about proportional response and maybe you can add a 2 V bias to the CV, it might work fine. Or it might work fine sometimes — with some CV sources but not others. But it would work better if you did it differently.

Brightness is proportional to current, so you want the LED current to be proportional to the CV. Above, the current I = (CV-V_f)/R, where V_f is the forward voltage of the LED and is (1) not zero and (2) not constant, it depends on I, so current is certainly not proportional to CV. What you need is an LED driver, and in its simplest form that’s just an op amp:

Vactrol driven by CV with op amp driver

The two things to always remember about op amps are: (1) Given a suitable feedback path, the voltage on the – input will be the same as the voltage on the + input, and (2) No current can go into or out of the op amp at the + or – inputs. Here the voltage on the + input is CV, so the – input voltage is CV too, and that’s tied to the top of R1. So the voltage drop across R1 is CV, and by Ohm’s Law the current through R1 is CV/R1. But since current can’t flow into or out of the – input, that current must be the same as the current through the LED. That’s what we want: an LED current proportional to CV. You would choose the value of R1 to get the desired current range. For CV from 0 to 10 V and maximum LED current of 20 mA, you’d use R1 = CV_max/I_max = 10 / 0.02 = 500Ω.

You might want to elaborate on this. To suppress high frequency oscillations you might want a filter in the feedback:

Vactrol driven by CV with op amp driver with filter

R2 and C1 make a low pass filter with a cutoff frequency of 1/(2πR2C1). Their presence doesn’t change the low frequency behavior of the driver: No current flows through R2 or C1, so the voltage at the top of R1 is still CV and the current through R1 is still the same as the LED current.

You’ve now also gone from an input impedance (assuming CV_IN connects directly to the input jack) of hundreds of ohms, too small, to something like gigaohms, very big. And if there’s no CV plugged in, the + input is floating and that can cause unpredictable behavior. I’d add a 100k resistor from the + input to ground.

This certainly is rather more complicated than the idea we started with, and maybe not worth pursuing for, say, a circuit bending project where “nice” behavior isn’t what you’re aiming for. But if you really want good response to an input CV, adding at least an op amp is the way to do it.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s