Hi all,
I am working on a state variable VCF and found that different waveforms (sine, saw, square) would come out attenuated to varying degrees. Anything tuned to make the square wave reasonable and not clip would cause saw and especially triangle or sine waves to be very quiet (7--7.5 Vpp out for 10 Vpp in). Different resonance CV also caused the output signal to change amplitude a bunch. Especially since I plan to hook multiple 12 dB / octave sections together, this would result in too much attenuation for these signal types.
I designed this automatic gain control (AGC) circuit to compensate. Specific design constraints on ICs were that my VCF section design involved 3 OTAs (i.e. 1.5 IC's) and 2 opamps, leaving 1 OTA free as they come in pairs, and 2 opamp elements could be had by upgrading from TL072H to TL074H (or just adding another TL072H; SOIC-8 is small). Works in simulation as well as on the breadboard. Calibration is two trimpots; one to set the overall circuit gain and another to zero out any Vos / Iabc feedthrough.
I'm posting this here in case it helps others as I did not find good low-distortion AGC schematics based on an OTA / opamp readily available. It expects a 7 Vpp signal in and amplifies it to 10 Vpp. It will maintain a 9.8--10.5 Vpp output for inputs between about 6 and 13 Vpp.
If using LM13700, the output buffer is unused. If using CA3280, two resistors should be changed due to the gm of 16 instead of 19.2 * Iabc. You can change the nominal amplification over a factor of 2x by adjusting the threshold voltage. Scaling R11 up or down based on your desired nominal gain will help the AGC to maintain compliance over a wider working input voltage range centered around your target input signal Vpp.
The working principle of the circuit is based around using the OTA and one opamp as a VCA. A fixed 375uA control current sets the nominal gain of the circuit. R14 is shown as a 10k resistor, but this should be substituted for your output/load and does not need to be directly placed. The output is rectified and put through a 16 Hz low pass filter. This produces a stable "rms value" from the output, which is compared to a threshold voltage controlled by a trimpot. Another opamp is rigged as a current source, with differential inputs comparing Vrms and the threshold voltage. If Vrms is less than the threshold, the current source is off. Otherwise the output current increases as Vrms exceeds the threshold by greater amounts. This current is fed, in turn, into a Wilson current mirror that "steals" current from the fixed 375uA control current, reducing the VCA gain and locking Vrms to the threshold voltage through negative feedback. This is eventually limited as the current source and mirror run out of headroom, and do not completely eliminate the control current, so very large input signals will cause the output to rise above the 10 Vpp regulated output size.
The simple resistor scheme for setting Iabc does have tempco variation. Higher PSRR is achieved by using a local 8.00V reference generated from an LM4040 and an opamp rather than connecting the Iabc / Id input resistors directly to the Vcc+ rail. Temperature variation can be at least partially mitigated by choosing low-tempco resistors, although that won't help with Vbe tempco inside the OTA. Using a current source for each of R2 and R5 (or just R2 if you're using a CA3280 instead of the LM13700 shown) would be better, at the cost of an additional opamp and transistor.
The amplitude average is accumulated in a 4.7uF capacitor with a 2k or 2k2 input resistor, providing a cutoff frequency around 16-17 Hz. As such, the worst case timing for the AGC to adjust to a change in input amplitude is around 50ms. The 100nF C7 helps accelerate the response, at the expense of some mild undershoot when first scaling down the output voltage, but is not perceptible to my ear.
I am working on a state variable VCF and found that different waveforms (sine, saw, square) would come out attenuated to varying degrees. Anything tuned to make the square wave reasonable and not clip would cause saw and especially triangle or sine waves to be very quiet (7--7.5 Vpp out for 10 Vpp in). Different resonance CV also caused the output signal to change amplitude a bunch. Especially since I plan to hook multiple 12 dB / octave sections together, this would result in too much attenuation for these signal types.
I designed this automatic gain control (AGC) circuit to compensate. Specific design constraints on ICs were that my VCF section design involved 3 OTAs (i.e. 1.5 IC's) and 2 opamps, leaving 1 OTA free as they come in pairs, and 2 opamp elements could be had by upgrading from TL072H to TL074H (or just adding another TL072H; SOIC-8 is small). Works in simulation as well as on the breadboard. Calibration is two trimpots; one to set the overall circuit gain and another to zero out any Vos / Iabc feedthrough.
I'm posting this here in case it helps others as I did not find good low-distortion AGC schematics based on an OTA / opamp readily available. It expects a 7 Vpp signal in and amplifies it to 10 Vpp. It will maintain a 9.8--10.5 Vpp output for inputs between about 6 and 13 Vpp.
If using LM13700, the output buffer is unused. If using CA3280, two resistors should be changed due to the gm of 16 instead of 19.2 * Iabc. You can change the nominal amplification over a factor of 2x by adjusting the threshold voltage. Scaling R11 up or down based on your desired nominal gain will help the AGC to maintain compliance over a wider working input voltage range centered around your target input signal Vpp.
The working principle of the circuit is based around using the OTA and one opamp as a VCA. A fixed 375uA control current sets the nominal gain of the circuit. R14 is shown as a 10k resistor, but this should be substituted for your output/load and does not need to be directly placed. The output is rectified and put through a 16 Hz low pass filter. This produces a stable "rms value" from the output, which is compared to a threshold voltage controlled by a trimpot. Another opamp is rigged as a current source, with differential inputs comparing Vrms and the threshold voltage. If Vrms is less than the threshold, the current source is off. Otherwise the output current increases as Vrms exceeds the threshold by greater amounts. This current is fed, in turn, into a Wilson current mirror that "steals" current from the fixed 375uA control current, reducing the VCA gain and locking Vrms to the threshold voltage through negative feedback. This is eventually limited as the current source and mirror run out of headroom, and do not completely eliminate the control current, so very large input signals will cause the output to rise above the 10 Vpp regulated output size.
The simple resistor scheme for setting Iabc does have tempco variation. Higher PSRR is achieved by using a local 8.00V reference generated from an LM4040 and an opamp rather than connecting the Iabc / Id input resistors directly to the Vcc+ rail. Temperature variation can be at least partially mitigated by choosing low-tempco resistors, although that won't help with Vbe tempco inside the OTA. Using a current source for each of R2 and R5 (or just R2 if you're using a CA3280 instead of the LM13700 shown) would be better, at the cost of an additional opamp and transistor.
The amplitude average is accumulated in a 4.7uF capacitor with a 2k or 2k2 input resistor, providing a cutoff frequency around 16-17 Hz. As such, the worst case timing for the AGC to adjust to a change in input amplitude is around 50ms. The 100nF C7 helps accelerate the response, at the expense of some mild undershoot when first scaling down the output voltage, but is not perceptible to my ear.
Statistics: Posted by kimballa — Fri Jun 28, 2024 3:38 am