While this is not my design, this is my analysis and derivations.

I used this in my sound reactive lighting project. I had only one op-amp to spare for a triangle wave generator, so I couldn’t use the popular two op-amp design.

For those who are not interested in the details, you can find the final formulas in an example here.

Overview

triangle wave 60

view this circuit simulation here

This single op-amp circuit uses positive feedback with hysteresis to create a square wave, which charges and discharges an RC circuit, which roughly produces a triangle wave.

Before we begin, assume the op-amp is acting like an ideal comparator. The highest voltage the comparator can output is VCC and the lowest is 0V. These high and low output voltages are determined by the power supply connected to the op amp (which isn’t shown in the schematic).

Start at V1. For now, let’s ignore R3. Currently, V1 is equal to VCC - this voltage comes from the comparator output. The output is VCC because the noninverting input is greater than the inverting input.

Connected to the comparator output is R4 and C1. Together, they act as an integrator. As the voltage on the capacitor ramps up, it produces the up ramp of a triangle wave. This triangle wave appears at V2.

As V2 is increasing, it eventually becomes greater than V3. When this occurs, the comparator sees the inverting input is now greater than the non-inverting input. Accordingly, the comparator switches its output from a high voltage (VCC) to a low voltage (0V). With a comparator output of 0V, C1 drains through R4. This produces the down ramp of a triangle wave.

Eventually, V2 becomes less than V3 - the comparator output goes back up to VCC and the cycle repeats.

So far, we’ve ignored R3. However, it is a very important resistor. It allows for the cyclic action by adding hysteresis. It affects the voltage V3. We’ll look at R3 in more detail below.

Hysteresis and R3

triangle wave 63

Left: simplified diagram when comparator output is high (V1 = VCC ).

Right: simplified diagram when comparator output is low (V1 = 0V).

View circuit here

This simplified diagram shows all inputs for V3. In this diagram, we’ve simplified the comparator output (V1) as a voltage source. VCC, R1, and R2 form a voltage divider where the divided voltage is V3. So does VCC, R3, and R2.

When the comparator output V1 is high, the voltage at V3 increases. This sets the upper threshold for the triangle wave - the voltage the comparator’s inverting input must reach in order to cause the comparator output to switch low (0V) and begin the down ramp of the triangle wave.

When the output V1 is low, the voltage at V3 decreases. This sets the lower threshold for the triangle wave - the voltage the comparator’s inverting input must reach to cause the comparator output to switch high (VCC) and begin the up ramp of the triangle wave.

In short, R3 is adding hysteresis, making the triangle wave possible. The amplitude of the wave depends on VCC, R1, R2, R3, and the maximum voltage output swing of the op-amp. We’ll look at calculating this amplitude next.

Determining Amplitude

triangle wave 63

Notice the way I set up the figure from the previous section. It’s ready for Millman’s Theorem. It allows us to quickly write the minimum and maximum voltages of the triangle waves:

triangle wave 55 triangle wave 54

We won’t be solving directly for Vtri,max or Vtri,min with these equations. Let’s introduce some more variables first:

  • VO,max is the maximum output of the comparator (you can find this on the data sheet under Maximum Voltage Output Swing). It is typically within 1 volt of VCC.

  • VO,min is the minimum output of the comparator (you can find this on the data sheet under Minimum Voltage Output Swing). It is typically within 1 volt of VEE.

  • Vtri,amp is the desired amplitude (peak-to-peak voltage) of the triangle wave. This is a value you choose. It is equal to:

triangle wave 35
  • Vtri,max is the maximum peak voltage of the triangle wave. While this value won’t be calculated for determining amplitude, we’ll need it to determine frequency in the next section.

  • Vtri,min is the minimum voltage of the triangle wave. Like Vtri,max we will need this value to determine frequency.

Again, our goal is to solve for R3. We can set the two equations from above equal to each other and get the following:

triangle wave 56

To further reduce this equation, we can set R1 equal to R2. This is a fine assumption for 99% of applications. We’ll also replace Vtri,max - Vtri,min with Vtri,amp.triangle wave 64

After reducing, we’re left with the following formula:

triangle wave 65

where all resistances are in ohms and voltages are in volts.

You choose the value of R1 in order to calculate R3. As it is a simple voltage divider, anything between 10 kΩ and 1 MΩ is fine. In the example at the bottom of this page, I chose 100 kΩ.

Determining Frequency

As mentioned early, the frequency is determined by the R4 and C1 integrator. Our goal here will be to choose a value for C1 then calculate R4.

triangle wave 37

simplified diagram of the RC section

To determine the triangle wave frequency, we’ll start with the RC time constant equation:triangle wave
40

This is the formula for the rising section of the triangle wave.

Graphing the formula above as a function of time produces something like this:

triangle wave 39

The graph above shows that Vtri,min occurs at time ta and Vtri,max occurs at time tb. The time from ta to tb is the upramp of the triangle wave.

Vtri,min and Vtri,max will be needed to determine frequency. Assuming R1 is equal to R2, we can calculate them with the following formulas:

triangle wave 34

ta and tb don’t need to be calculated. However, what we need is Δt - the time between ta and tb. This Δt is one half of the period, so we can express it in terms of frequency:triangle wave
43

Notice the 2 in the denominator. It’s because we are calculating the up ramp of the triangle wave, which is only half of a period.

We can create two equations. One at time ta and another at time tb:

triangle wave 49

Rearranging in terms of t gives:

triangle wave 50

Subtracting these two equations from each other gives:

triangle wave 51

We now substitute tb - ta for frequency:

triangle wave 52

Solving for R4, we get:triangle wave 53

where f is the desired triangle-wave frequency. Frequency is in Hz, capacitance is in farads, voltage in volts, and resistance in ohms.

Note - you have to choose C1 first. I recommend starting with 100nF. See more details on this in the Example Design section.

C2, R5, R6, and the output load will change the frequency. As long as the output load is high impedance(100k+), the frequency shouldn’t change more than 1%.

Output Stage

If you want to remove DC bias from the output, then you’ll need to add a coupling capacitor on the output.

Example Design

This is an example from my Sound Reactor project.

Step 1 - Define Criteria

For this example, we’ll use the following criteria:

  • f = 1.1 kHz
  • Vtri,amp = 1 V
  • VCC = 12 V
  • VO,max = 11.715 V (this value came from the comparator datasheet when the comparator is powered by 12V. I used the MC4558)
  • VO,min = 0.285 V (this value was from the comparator datasheet)

Step 2 - Choose R1 = R2

R1 and R2 form a voltage divider. I recommend anything in between 10 kΩ and 1 MΩ. Too low of a value will waste power. Too high of a value will cause inaccurate results. I chose R1 = R2 = 100 kΩ.

Step 3 - Calculate R3

triangle wave 65

I calculated R3 = 521.5 kΩ, which is close to the standard 520 kΩ.

Step 4 - Calculate Vtri,min and Vtri,max

triangle wave 34

This is an intermediate step to get values for R4 and C1.

I calculated Vtri,min = 5.5 V and Vtri,max = 6.5 V.

Step 5 - Calculate R4 and C1

triangle wave 53

Note - you have to choose C1 first. The quick way is guess-and-check. Guess a value for C1 and check if R4 is a reasonable value.

I recommend starting with C1 = 100 nF. If the resulting value of R4 is too high (>1 MΩ), choose a lower value for C1 and recalculate. If the resulting value of R4 is too low (<10 kΩ) choose a higher value for C1 and recalculate.

I started with C1 = 100 nF. The calculation gave R4 = 25.9 kΩ. I settled for an actual value of 24.9 kΩ.

Results

triangle wave 66

view this circuit here

  • f = 1.1 kHz
  • Vtri,amp = 1 V
  • R1 = R2 = 100 kΩ
  • R3 = 520 kΩ
  • R4 = 24.9 kΩ
  • C1 = 100 nF

Comparison to the Two Op-Amp Design

The most common design for an op-amp triangle wave generator uses two op-amps. It looks something like this:

triangle-wave-6 Typical Two Op-Amp Design (source)

The two op-amp design generates a square wave then integrates it to produce a triangle wave. It uses an active integrator, instead of a passive RC integrator.

The two op-amp design uses 8 discrete components and 2 op-amps whereas the single op-amp design uses 5 discrete components and 1 op-amp.

I believe the two op-amp design is overall less dependent on component tolerances and op-amp specs and therefore more consistent from circuit to circuit.

Neither should be used for any circuit that needs accurate, precise, or stable frequencies or amplitudes. Nor for circuits that need a true triangle wave instead of the RC integrated approximation.

Overall, the single op-amp triangle wave generator is certainly simple to implement and practical for real world circuits!