# Can I make a VCO full audio range with only one capacitor?

I'm trying to make a VCO with a low voltage setup (3.3V), and i 'm using a mcp6002 op-amp. I'm controlling the frequency with an MCP4822 (dac). The problem is that i get a limited range of frequencies.

I'm willing to make it full audio range (20-20000Hz) but till now I am only able to add an offset to the base frequency by using different values for the capacitor or changing resistor values. Is it possible to make it full range and my control signal to modulate the oscillator frequency to a wider range?

I have tried using this circuit but my op-amp does not oscillate with this configuration. How should I proceed to adapt this configuration for my low-voltage op-amps? • You want to control a 1000:1 dynamic frequency range with a linear 0 to 3.3 V input? Or do you expect to a function more like $f = e^{\frac{7}{3.3} \cdot V_c + 3}$?
– jonk
Apr 12, 2017 at 22:21
• If you are using a DAC and if it is part of a microcontroller, I'm not sure why you aren't using the timer system of the micro, instead of the DAC. Micros can easily handle the dynamic range in their time systems. Can you expand on this?
– jonk
Apr 12, 2017 at 22:30
• The use of external DACs vs internal and associated noise wasn't really my question. It was more about simply generating all needed square waves directly at the I/O pin(s). It's somewhat complex software, but quite doable to achieve dozens (or even hundreds) of simultaneous and independently controllable outputs (given the I/O pins, of course) and do it with precision. But that's a different direction, given you are focused on analog vco's. Thanks. I'll ring off.
– jonk
Apr 12, 2017 at 22:50

Yes, you can get 20-20000 Hz with linear control voltage output from something very similar to this circuit with a single capacitor.

Substitute a CMOS-input RRIO op-amp with a low Vos guaranteed to work at 3V (and with GBW of at least 5-10MHz) and substitute a MOSFET such as the DMN5L06K for the BJT + 10K base resistor.

If 3V = 20,000Hz, then 3mV = 20Hz, so keep the maximum offset spec of the op-amp at maybe a few hundred uV. Microchip probably has an inexpensive part that will suit.

It's a bit easier with a higher supply voltage such as 15V because the offset requirements are less stringent, so the BJT and op-amp offsets don't matter as much.

By the way, rather than coming up with V+/2, simply split the right-hand 51K resistor into two 100K resistors as a voltage divider between V+ and ground.

• Thanks, the mcp6002 has a GBW of 1MHz will it work? Apr 13, 2017 at 0:19
• It should function but it may be fairly nonlinear at the high end and at the low end due to Vos. Apr 13, 2017 at 0:38

It's possible to design a voltage-controlled oscillator circuit with a range that extends down to zero, up to "infinity" (subject to the limits of the oscillator parts), or both, but such designs are apt to be very touchy when operated anywhere near the ends of their range. For example, if a circuit charges a cap up to 4 volts and times how long it takes to discharge down to the control voltage, and such a circuit would output 1000.0Hz when given a control voltage of 2.0 volts, then in the absence of noise or device limitations, the voltage required to get any frequency would be 4 volts/2^(1kHz/freq)--a value which will always be in the range 0 to 4 volts for any frequency, but the response would be most helpful near the middle. Starting at 1kHz and going down, for example:

Freq    1kHz/freq   voltage
1000Hz      1       2.0v
500Hz      2       1.0v
250Hz      4       0.25v
125Hz      8      ~0.0156v
62.5Hz     16      ~0.0000610v


Going up, things would again start nicely but get icky at the top

Freq    1/kHz/freq  voltage
1000Hz      1       2.0v
2000Hz     1/2      2.8v
4000Hz     1/4      3.36v
8000Hz     1/8      3.67v
16000Hz     1/16     3.83v
32000Hz     1/32     3.91v
64000Hz     1/64     3.957v
128000Hz     1/128    3.978v


If one were to increase the RC time constant of the circuit by about a factor of six, the resulting range might be usable (a range from 0.0156v to 3.978v would handle frequencies from about 20Hz to about 20KHz) but the circuit would be more sensitive than ideal near the edges of its frequency range.

• @JohnAm: While it's possible to design a circuit whose frequency approaches zero as a control voltage approaches one value and whose period approaches zero as the same voltage approaches another, it's probably more useful to construct a circuit which uses two control values, and have the frequency approach zero as one approaches a certain value, and have the period approach zero as the other approaches a certain value. Such an approach can allow for reasonably linear adjustment of both frequency and period over their entire range. Apr 19, 2017 at 21:30
• Thanks you, much appreciated. But isn't frequency and period interrelated? What I miss here? Apr 19, 2017 at 21:51
• @JohnAm: If an oscillator has an 8-bit control register whose value is proportional to frequency and a top frequency of 2550Hz, then the top frequencies will be 2530, 2540, and 2550 (quite close together) but the bottom three will be 10, 20, and 30 (very widely spaced). If an 8-bit register controlled period and the bottom frequency were 10Hz, then the bottom three frequencies would be 10.00Hz, 10.04Hz, and 10.08Hz (nicely close together) but the top three frequencies would be 2560Hz, 1280Hz, and 853Hz (widely spaced). Apr 19, 2017 at 22:04
• @JohnAm: If one has a device with two 8-bit registers N and D, and outputs a frequency of 100N/D, then setting N to a power of 2 and D to a value 128-255 would allow any frequency 0.5Hz-100Hz to be achieved with 1% accuracy, and setting D to a power of 2 and N to a value 128-255 would allow any frequency 100Hz to 25,500Hz to be achieved with 1% accuracy. Apr 19, 2017 at 22:11 You can remove the series and just use the Log Pot or a 5 turn pot and get 4 decades. However you compromise sensitivity greatly. MY DESIGN AND SIMULATOR

To make a quasi Sine, one can use a Decade counter and R DAC ( Johnson , Gray code or binary)

But to make a 4 decade VCO will have excessive Phase Noise due to high f/V noise. Varicaps have a limited range even with 0~50V differential to 3 decades. The most common approach is to use a TIA.

• Don't use WW pot if you want >1MHz Apr 12, 2017 at 22:31
• Unfortunately I don't recognize the triangle symbol Apr 12, 2017 at 22:31
• 74xxx14 Schmitt Inverter (Hex) Apr 12, 2017 at 22:32
• The wire that says 2.1V is high impedance and needs an Iin=<1uA Op Amp to buffer a triangle wave 1/3 to 2/3Vdd constant amplitude with fast slew rate ok? Apr 12, 2017 at 22:35
• Thanks I'll give it a try, but I am mostly interested to accomplish it with my mcp6002 op-amps. Apr 12, 2017 at 22:36