# Square wave generator won't work

I'm trying to generate a square wave at 21kHz (+13V,0V) using this schematic:

I used formulas and this website to find the correct values for my components but it doesn't seem to work on Simetrix.

Do you see any problem?

• If you start with IC=0 all nodes being being 0V is a valid. Solution but not stable in the real world due to noise. Try setting a different IC, does this help? Aug 29 '19 at 10:36
• Simetrix examples include at least one square wave generator that works! Aug 29 '19 at 12:58
• This is just a canned comment to let you know that what you're trying to build from discrete analog components (possibly incorporating Opamps and/or NE555) is a digital control problem and thus can easily and with lower parts count be solved with a microcontroller with really minimal firmware to write. Aug 29 '19 at 13:04
• Hi Gragon. Another canned comment - ground symbols should never point anywhere but down. Rotate the op-amp, flip it, whatever it takes - convention is very important for readability. Here is a short reference on how to draw great schematics. Aug 29 '19 at 13:35

Your positive feedback attempts to move the non-inverting input above and below ground. This would work with a dual supply system - ie negative rail below ground.

In a single supply system you need to provide hysteresis above and below some intermediate voltage - this may be Vcc/2 or some other value to allow for eg the fact that input common mode range is typically ground to Vcc-1.5V.

As Jasen notes - the resistor values are on the small side.
The LM2904 will source and sink 10+ mA but it is best to limit I/O current to usefully less than I_out_max.

In this case try eg at the non-inverting input

• Remove R2

• Change R1 to 10K.

• Increase R3 and decrease C1 - or reduce the hysteresis range (smaller R1) to increase frequency.

That should provide an OK starting point for playing.

LM2904 data sheet

• also use higher resistors, the LM2904 can only do a few milliamps, Aug 29 '19 at 11:27
• @Jasen Yes. Probably around 10 mA but quite a lot less is desirable. I've added related comment in my answer. Aug 29 '19 at 12:04
• @Peter Karisen - your answer was OK, but (as you know) only covered part of the options. Leaving it there would have done no harm. Aug 29 '19 at 12:05
• @RussellMcMahon Thank you for you answer. At first it wasn't working but then i reduced R1 to reduce the hysteresis range and it worked! But i only have spikes and not a square wave, where does that could come from ? Aug 29 '19 at 12:17
• @Gragon You have not advised what R & C values you have used or what the frequency of operation is. We are unable to start to guess what you are doing or seeing - and updated circuit and functional description would give us some chance of being helpful. The cap max V value MUST remain below (Vcc-1.5V) and preferably lower yet. That's why I made the suggested bias resistors assymetrical. Increasing R1 will reduce the hysteresis voltage swing - which increases frequency but may be a good idea. || What component values are you now using? | What is the frequency of operation? Aug 29 '19 at 20:46

Let's first look at the output divider pair, $$\R_1\$$ and $$\R_2\$$, you provided. This takes the opamp output and divides it in half. (We are assuming you aren't over-loading the output's current compliance for the moment.) If you assume the opamp is a perfect rail-to-rail output then the output may either be $$\V_\text{CC}\$$ or else $$\0\:\text{V}\$$. So that means that $$\0\:\text{V} \le V_{\text{IN}_+}\le \frac{V_\text{CC}}{2}\$$. But clearly, given $$\R_3\$$ and $$\C_1\$$, it follows that under all circumstances $$\0\:\text{V} \le V_{\text{IN}_-}\le V_\text{CC}\$$.

Note the fact that both ranges have $$\0\:\text{V}\$$, inclusive? Not so good.

What you want is that the range for $$\V_{\text{IN}_-}\$$ to completely envelope, clearly and unambiguously, the range for $$\V_{\text{IN}_+}\$$. Let's leave the basic concept presented by $$\R_3\$$ and $$\C_1\$$, so that we continue to allow $$\0\:\text{V} \le V_{\text{IN}_-}\le V_\text{CC}\$$. But we must now restrict the range of $$\V_{\text{IN}_+}\$$.

It's really convenient to set a range such that $$\\frac{1}{3}V_\text{CC} \le V_{\text{IN}_+}\le \frac{2}{3}V_\text{CC}\$$. Then you may keep your resistor values all the same; for both $$\R_1\$$ and $$\R_2\$$, as well as a new one I'm adding to your circuit. (But I'd recommend increasing their values, somewhat -- perhaps to $$\10\:\text{k}\Omega\$$ to lighten the load on the opamp's output.) And then simply add one resistor from $$\V_{\text{IN}_+}\$$ to $$\V_\text{CC}\$$, using the exact same value for it that you use for $$\R_1\$$ and $$\R_2\$$.

If you sit down with the simple RC exponential decay equation and work out the timing required to go from $$\\frac{1}{3}V_\text{CC}\$$ to $$\\frac{2}{3}V_\text{CC}\$$ you will have half of the total cycle time. And you can use that equation to solve for a value for $$\R_3\$$ given some value for $$\C_1\$$, pretty easily. In that way, you can achieve your $$\21\:\text{kHz}\$$ value.

You should be able to write that equation very quickly in this fashion:

$$\frac13 V_\text{CC}+\left(V_\text{CC}-\frac13 V_\text{CC}\right)\cdot e^{^-\frac{t}{R_3\:C_1}}=\frac23 V_\text{CC}$$

That reads as, "The capacitor voltage starting at $$\t=0\$$ is one-third of $$\V_\text{CC}\$$. To that, we add the charging rate which is driven by the difference between $$\V_\text{CC}\$$ and the starting point voltage, that difference then times the exponential decay rate over time. We want this result to reach two-thirds of $$\V_\text{CC}\$$." Or something like that, anyway.

You can work out that half the time is $$\t=\frac1{2\:f}\$$ where $$\f=21\:\text{kHz}\$$. Just drop in your value for $$\C_1\$$ and you should be able to compute a value for $$\R_3\$$.

It's really no more complex than that.