I work on a function generator project. It generates waveforms such as sine, triangle, rectangle with PWM regulation, saw. I would like to digitally adjust the signal output amplitude.

Input signals for different waveforms don't have the same amplitude, e.g.
Rectangle: 5V
Saw: 3V
Sine, triangle: 0.7V

Frequency: from 1 Hz to at least 1MHz
Input voltages never go negative.

I would like to regulate output amplitude in the range of ±12V.

The first approach was a digital potentiometer. First potentiometer was X9C102S. It’s not expensive, have a small capacity Cw, resistance of 1k and a lot of steps: 100. Unfortunately, it have a capacitive pump which distort the output waveforms.

Later, I tried with the AD840X series. For the 10k potentiometer, f3db = 600kHz. For 1k version the input current is only 2.1mA and will not tolerate 5V input voltages. Generally, I don't want to use digital potentiometers due to the low frequency response and the reduced range of regulation.

I tried a circuit with a JFET transistor: JFET circuit 1

It works well. But it have disadvantage - you cannot go down with the output voltage to 0 due to the fact that the RDSon of the transistor is quite high (about 300R). Increasing R56 value make signal distortion. I tried to eliminate it with the following circuit:

JFET circuit 2

With a potentiometer I tried to subtract the signal which is on the RDSon resistance of the JFET transistor. Unfortunately, there is probably a phase shift between inputs of the amplifier (capacitance?) and it does not work properly (e.g if i feed in triangle signal and try to compensate, on the output i get square wave, effect increases with frequency)

I would like ask for some hints about circuit that could regulate amplitude at the given parameters (maybe a modification of the circuit with a JFET transistor or something else), because I do not know what to do next.



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.