I designed a circuit for a voltage-controlled oscillator (VCO) for use in a synth and had it fabricated and assembled as a PCBA. I got three assemblies back and while two behave exactly to spec (and as seen in a breadboarded version before), the third is misbehaving.

The entire circuit takes a number of control voltages in and sums them; for each 1V increase in control voltage (CV), the output waveforms should increase 1 octave (double in frequency); an exponentiator circuit uses a temperature-compensated monolithic matched NPN pair and an op-amp to generate a voltage proportional to e^(a*CV + b) (VCore in the schematic).

The core of the oscillator is an op-amp integrator that integrates VCore and generates a sawtooth waveform in conjunction with an op-amp Schmitt trigger. (When fired, the Schmitt trigger switches on a 2N7002 mosfet that discharges the integrator capacitor.)

The formula for integrator output voltage is VOut(t) = (VIn * t)/RC. My integrator has R=6800 and C = 2.7nF (implemented as an 0603 1% C0G MLCC). The sawtooth oscillates in a 12.7V range before the Schmitt trigger resets it. By design, when CV is 0V, the exponentiator produces VCore ~= 26mV, which by the formula above would be ~110 Hz. When VIn is 1V, the expo output is ~52mV, and the sawtooth is 220 Hz, etc.

On two of the assemblies, this is true, with minor (acceptable) deviations corrected by various calibration potentiometers built into the circuit, and the circuit produces several octaves of faithful tracking.

On the third assembly, the "neutral" oscillator rate is 127 Hz. If the "base frequency shift" were the only issue, I could calibrate that out via a pot. But doubling input CV does not double the frequency -- or obey any other fixed multiple octave-over-octave. (The frequency does increase with increased CV but it goes from 127 Hz to 233, to 442, to 846... it's not any consistent multiple. If the multiple were anything consistent, that can also be corrected to 2.0x through a potentiometer; "high frequency flatness" could also be corrected through a tunable high-frequency feedback boost mechanism, but this behavior isn't that either.)

The sawtooth output wave (which is the "core" sawtooth wave with DC offset eliminated and scaled to run from +5V to -5V) looks as follows:

Sawtooth core output waveform

I'm stuck figuring out how to proceed. So far I have:

  • Visually inspected the PCBA and see no obviously damaged or shorted-out components or traces.
  • Double-checked the specs on the BOM components; the behavior is outside the limit of manufacturing tolerances on the individual components.
  • Detached it from a second PCB with control knobs and drove the DUT inputs solely from DC power supply test equipment; the behavior is the same, so the separate control/interface PCB is not the issue.
  • Verified the power supply as seen by the board (+/-12V) and internal reference voltages (+/-6V and +/-9.1V) used across the board are within tolerance
  • Ruled out noise issues; on the FFT generated by my DSO, I see +/-40mV of noise on the voltage ref signals (which could easily be from the DSO probes themselves...) at well below -50dB across the frequency spectrum. There's a spike to about -35dB at 1.1MHz -- possibly from the sawtooth reset discharge, which lasts ~1--2 uSec -- and -40dB at various multiples of that, but that should be way too fast to affect the audio range. The FFT of the sawtooth itself is textbook clean to well above 20 kHz.
  • Confirmed the exponentiator is functional; sweeping the input CV from -2V to 3V causes the 'core voltage' to start at 7.26mV and double with each +1V on CV, with very high precision / accuracy.
  • Probed various other test points upstream of the oscillator to confirm those subcircuits are functioning correctly. Thus, the issue is somewhere within the oscillator subcircuit itself (or how it interacts with the board as a whole).
  • Measured resistance across various test points on the board and confirmed expected values for particular resistors or resistor sequences, and/or equivalence to readings from a good PCBA.
  • Probed the sawtooth output and the Schmitt trigger output with the DSO. Per the screenshot above, they look correct; they're just... not following the timing to be expected.
  • Checked the sawtooth core range; it's actually showing 12.45V not 12.7V, but that would only explain an acceleration from 110 Hz to 114 Hz at VCore=26mV, and does not explain the nonlinear oscillator response to increasing VCore.
  • Confirmed the derivative signals (inverse sawtooth wave, triangle wave, square wave, sine wave) are generated properly and all DC offset / gain scaling pots work; they're just all tracking the uncalibrated and uncalibratable fundamental sawtooth wave. Nothing "downstream" of the oscillator core seems amiss.

Given that this was assembled in a factory, and the other two PCBAs that work fine were built at the same time from the same reels of components, I don't know what sort of assembly issue it could be. (At minimum, it's definitely not my poor soldering skills to blame!)

How should I go about troubleshooting this from here?

I am vaguely suspicious that if capacitor C10 (the integrator capacitor) were faulty, it might both (a) have less capacitance than per-spec (which could explain the faster base rate) and also (b) have behavior that varies with frequency (which could explain the inconsistent multiplier). But I don't know how to test this. I also think it's unlikely given that it doesn't have visual damage... ESR plots for capacitors generally show ESR at frequencies increasing by powers of 10 (100 Hz to 1kHz, 10kHz, etc.), which makes me think the difference in performance between, say, 127 Hz and 233 Hz is not especially variable.

Beyond that hunch, I am out of ideas. (And I don't love the idea of trying to rework a 0603 part with hot air, so I'd rather not start swapping out parts without better evidence.)

Oscillator subcircuit schematic:

schematic for oscillator core

PCBA front:

Front of VCO PCBA

PCBA reverse:

Reverse side of VCO PCBA

Circuit schematic notes:

  • VCore is the output from the exponentiator
  • VRef6, VRef-9v1, etc. are +/-6.0 and +/-9.1 volt references, each generate by a Zener diode and buffered by an LM324A; each has a 22uF tantalum decoupling capacitor to smooth out transients. (They are not used as sources of significant current/power, nor are their consumers dynamic; mostly fed through potentiometers to op-amp inputs as signal offsets.)
  • Assembly is double-sided on a four-layer board (signal-GND-power-signal).
  • SYNC_IN and SquareWaveDutyCtrl are held at GND during testing.

1 Answer 1


Looking at your schematic, I'm very concerned about the design of your Schmitt trigger, U4B. The threshold voltages are set by R48, R52, Vref6 and ±Vcc. Nominally, the thresholds should be -3 V and +9 V.

However, the TL074 does not have a rail-to-rail output; the output voltage can be as much as 1 V away from the rail. This means that the actual threshold voltages can vary by quite a bit, which has a direct effect on the stability of the oscillator.

The fact that the peaks of your sawtooth are actually nowhere close to these threshold values suggests that there are other effects contributing, too. I suspect timing issues. For one thing, R48 and R52 are shown as 1 MΩ each — this could be interacting with the input capacitance of the opamp (but I can't find a value for this in the datasheet) to slow down the switching between the two threshold voltages. Also, this is a low-power opamp with a typical slew rate of only about 20 V/µs.

I would suggest examining the output of this section in detail; zoom in on both the voltage and time scales. Also look at the waveform on the noninverting input. I suspect that the difference between the faulty board and the others is the specific performance of this opamp. Have you tried replacing it?

  • \$\begingroup\$ Thanks Dave, that's a helpful analysis. I have not attempted to replace/rework any components. I should clarify that the waveform capture in the image above is SAWTOOTH (DC-shifted and scaled output) not SAWBASE (the actual oscillator waveform) - easier to access with a scope. I also probed SAWBASE and saw the limits at 9.82V and -2.64V, which is a bit closer than the spread I saw on my breadboard version, but only enough to explain 114Hz vs 110Hz nominal - not 127Hz. Also how does this explain the nonlinearity when VCore increases? \$\endgroup\$ Commented May 30, 2023 at 16:20
  • \$\begingroup\$ I can take another look at the scope pictures this evening after work. Also, would reducing R48/R52 to 100kohm help? Those 1M values were set fairly early in the design process and probably should have been reduced for noise elimination; the effect of resistance on amplified noise was a thing I didn't learn about until midway through the project. \$\endgroup\$ Commented May 30, 2023 at 16:23
  • \$\begingroup\$ Another clue, in case it helps: in development testing, I found the lower octaves had a tendency to go a bit flat (by only 1-4 Hz, but that's enough to sound out of tune), which is why I added the LFBOOST circuit built around U9. Perfect tuning would see CV of -1V and - 2V at 63.5 Hz and 31.85 Hz respectively. In this faulty unit, they're quite sharp - 70-some Hz and 40 Hz. \$\endgroup\$ Commented May 30, 2023 at 16:39
  • 1
    \$\begingroup\$ Thanks for the additional scope traces. They confirm my idea that you have a timing problem. The noninverting input is still changing when the Schmitt trigger toggles the second time, which means that you don't have good control over the peak-to-peak amplitude of the sawtooth waveform, and therefore poor control over its frequency. The circuit performance is strongly dependent on the individual performance of certain components, including the opamp and the MOSFET. \$\endgroup\$
    – Dave Tweed
    Commented May 31, 2023 at 21:30
  • 1
    \$\begingroup\$ Thanks @Dave Tweed, with your help I was able to fix it. I reworked the 1M r's (R48/R52) to 47K, changed the FET input resistors (R45/R47) to 10K and increased the pulldown resistor R42 to 22K. I changed U4 to use TL074H instead of TL074; the H variant has much better common mode input and rail-to-rail output. I also added a 4.7pF speedup cap across the Schmitt trigger output & noninv. input. DISCHARGE rises much faster, no race condition, clear 1us hold time at 11.5V. Oscillator now tracks great over 8 octaves and doesn't even really need most of the cal/compensation circuitry I built in. \$\endgroup\$ Commented Jun 10, 2023 at 7:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.