Look around the synth DIY world and before long you’re likely to find a circuit containing something like this:
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:
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.
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.
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:
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:
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.