I'm trying to design a square wave oscillator to control an LED with a LINEAR frequency control range of ~0.017 Hz to ~17 Hz (1 BPM to 1000 BPM).
EDIT
Oli's excellent answer and circuit indeed make the duration between discharges linear wrt the control voltage. However it's not clear to me how to scale the input as suggested. Even with a large capacitor the control voltage range is narrow and the circuit throws a huge amount of current around.
To get the usual BPM range for music of between 40 and 240 BPM, that corresponds to periods of 1500 ms and 200 ms respectively. A BPM of 120 is exactly 500 ms.
I have another circuit that I believe also correctly linearizes the period based on the size of a resistor (e.g. a potentiometer):
Could a current mirror like the one above with a different ratio be used to scale the control voltage / resistance? How?
As it is, the circuit would require an R4 of 14.5 Mohm to yield a period of 500 ms (120 BPM). I need the value to be exactly 5K (10K pot in the center position).
Note that I think adding an emitter resistor (R2) to the load will scale down the current (wildar current source?) but it also seems to ruin the linearity.
EDIT 2
Here's another version. That string of parallel transistors provides a 4:1 ratio step-down current mirror so that resistors can be smaller. It also makes the control current relative to ground which is nice depending on how you power your op amp.
Despite the extra parts, the're mostly transistors so the build is probably not as complicated as the schematic looks.