i'm want to produce an AC signal an +-3.3V (or 3.3v-0) voltage supply with a small frequency around 1kHz-2KHz and a low output voltage too(200mV,for example), where the frequency stability is not important but the wave amplitude stability is.

I'm having some doubts about deciding which solution can suit better my needs. I was looking for a stability within the mV magnitude.

My first focus was on the Wien Bridge Oscillator, using diodes as Amplitude Gain Control conductors[fig2], but i'm afraid its forward voltage drift with temperature and current could compromise significantly the output signal. I also found Wien Bridges Oscillators using a FET[fig1]. And lastly i looked at Phase Shifts Oscillators which looked as good option as only element that has a significant drift is the Amplifier and i could minimize it using a low drift OpAmp.

Can someone please help me choosing the solution which has a higher voltage stability or advice me if there is better solutions with similar complexity.

Thank you in advance.

Wein Bridges Oscillators with FET AGC

Wein Bridges Oscillators with Diodes AGC

  • \$\begingroup\$ Question: You spoke about the amplitude STABILITY only. But what about the absolute VALUE of the output signal? Around 200mV or EXACTLY at this level? \$\endgroup\$
    – LvW
    Aug 9, 2016 at 14:30
  • \$\begingroup\$ My question was not well made, I am not really concerned in expressing the exact absolute value because i can get whatever i need with a voltage divider at the output of the oscillator. I'm concerned with the voltage drifts of the components. \$\endgroup\$ Aug 9, 2016 at 15:02
  • \$\begingroup\$ Does it need to be a sine wave? You could make a square wave or triangle wave with a well defined peak voltage. \$\endgroup\$ Aug 9, 2016 at 16:23
  • \$\begingroup\$ It's a good question. I'm not sure. If a square wave would swing from +-3V would be considered an AC signal ? And would the PWM harmonics mess up the OpAmp response ? \$\endgroup\$ Aug 9, 2016 at 16:34

4 Answers 4


At such a low frequency (2 kHz), you can generate the sine wave by streaming values into a D/A. 256 samples per cycle only requires 512 kHz sample rate, which is quite easily doable.

The harmonic content will be so low in amplitude and high in frequency that it can be filtered out with little effect on the intended signal, and that effect can be calculated up front. For example, two poles of R-C low pass filtering after the D/A at maybe 10 kHz should yield quite low harmonic content.

The amplitude can also be easily adjusted with the right kind of D/A. It will produce a voltage proportional to something you give it. To adjust the amplitude, you only need to adjust the reference voltage being fed to the D/A. The same micro that is feeding the D/A can produce a PWM signal in hardware that you low pass filter to create the D/A reference signal.

Alternatively, you can use a high resolution D/A. Arrange the full amplitude to be a bit more than the maximum you ever want, then multiply the samples by some number a bit below 1 to digitally scale down the amplitude of the resulting waveform. This scale factor would be automatically adjusted by frequency to account for the slight frequency-dependent attenuation of the fundamental by the output filter.

This method will produce a highly stable output waveform. The shape is a function of the digital samples, and the amplitude a function of the A/D reference voltage.

  • \$\begingroup\$ and there are even ICs especially for this purpose: DDS generators, e.g. AD9833 \$\endgroup\$
    – Curd
    Feb 16, 2017 at 8:43

Sine wave oscillators need amplitude stabilization and you have focused on two different types but you haven't focused on the root of the problem and that is the accurate measurement of amplitude.

If you really need "great" amplitude stability then use an RMS to DC converter to measure the sine wave amplitude with a much higher precision. Then feed the RMS/DC output to an op-amp circuit to produce an error voltage. The error voltage is the actual RMS amplitude minus the demanded amplitude (set via a simple pot fed from a stable voltage reference).

The error now tells you how far the RMS value is from the set point.

Next, integrate the error so that long term errors (in one direction) produce a large correcting voltage output.

The correcting voltage output then feeds the JFET in your first diagram.

This will give you accurate stability and a somewhat cleaner sine wave shape.

  • \$\begingroup\$ Hello Andy aka, thank you for the answer, i would achieve a indeed a great amplitude stability but an RMS to DC converter is a too expensive IC for the budget of my project. \$\endgroup\$ Aug 10, 2016 at 10:38
  • \$\begingroup\$ @user3689576 well, you never mentioned a budget in your question ("great" usually equals "money") and you still haven't mentioned how stable you want the amplitude to be. \$\endgroup\$
    – Andy aka
    Aug 10, 2016 at 11:26
  • \$\begingroup\$ You haven't fulfilled your part of the deal - you ask a question, folk give good answers and you realize your spec was inadequate and therefore you should come back with a more reasonable proposal (which you haven't). Folk spend their valuable time giving answers - it's not done for money and questions like this should be answered to your satisfaction. If you have no further need to ask this question then consider deleting it but, before you do consider the time people have spent answering you and the good guidance given. \$\endgroup\$
    – Andy aka
    Jan 8, 2017 at 11:33

You don't mention whether you're looking for ~1% or ~0.01% or whatever stability so there is some guesswork here.

You can replace the diode with a precision full wave rectifier circuit and heavily low-pass filter it, which will improve the stability. You might have to add some more gain in the feedback loop.

There's an inherent trade-off between distortion and amplitude stability and the amount of time it takes the oscillator to stabilize.

Another option is to produce the sine waves by filtering a DAC output, either from a microcontroller or by using a dedicated DDS (Direct Digital Synthesis) chip such as those from Analog Devices. Then your amplitude stability will be primarily determined by how good the DAC (and the reference for the DAC) is. That kind of circuit will happily operate from 0/3.3V (+/-1.65v) where JFETs may not be that happy.

  • \$\begingroup\$ I'm using a PIC18F26k22, the DAC has only 5 bits, but in the other hand i could maybe make an SPWM with PWM module. After connect it to a level switch stage to make it swing from -1.5 to 1.5, do you think i would achieve a better performance ? \$\endgroup\$ Aug 9, 2016 at 14:33
  • \$\begingroup\$ You can use an external DAC such as an MCP4725 (SOT-23-6), which is 12 bits I2C, however I don' t think that micro supports anything faster than the 400kHz mode. \$\endgroup\$ Aug 9, 2016 at 14:56
  • \$\begingroup\$ Yes it doesn't, but is that a problem ? \$\endgroup\$ Aug 9, 2016 at 15:12
  • \$\begingroup\$ It limits your update rate. By too much? That's for you to figure out, right? \$\endgroup\$ Aug 9, 2016 at 15:13
  • \$\begingroup\$ Yes i have to agree. Thank you. I would like to ask you, connecting the PWM to an active RC Low Pass filter and get a Sin wave from there would be a bad idea? \$\endgroup\$ Aug 9, 2016 at 16:58

I have had that need too; an amplitude stable sine wave; I did the DAC generation; I used the DAC (12b) from a MCU (STM32F103) whose power supply was a stable precision 0.24% reference of 2.5V ( IC supplied from a 3.7 battery); The stability of the generated sine wave by the DAC was loose; +/- 30mV for a full swing 0...2.5V sine wave; I needed maximum 0.5mV. Although the DAC was outputting very stable singe constant voltages; e.g. 1.5V DC ( nonsinusoidal , but constant voltage) had a far better amplitude stability than the 1.5V sine wave.


Your Answer

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

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