What's a good circuit to use to generate a square wave? The exact waveform isn't too important - I just want to get a piezo buzzer cranking at 150 kHz. I also want efficiency and adjustable amplitude.

(Motivation: I want to vaporize some oil in order to burn it. I choose 150 kHz after the Glade Wisp as hacked in Make.)

The simplest I found was this one consisting of a capacitor, 3 resistors and an op amp a comparator. Is this design a good way to go?

Assuming so, according to the same page, it has a period of

\$T = 2RC ln \dfrac{1+L}{1-L}\$ where \$L = \dfrac{R1}{R1+R2}\$

Choosing R1 = R2 gives L = 1/2, giving (1+L)/(1-L) = approximately e, giving the simpler

T = 2RC

I'm in the woods here, but I'll suppose that R1 = R2 = R is a good choice.

The T I want is 1/150kHz; thus RC = 3.33e-6

Another abitrary choice presents itself. Say, a 100 ohm resistor and a 0.033 uF capacitor? Is this choice important? Is choice of op amp important?

Sorry for the long question, but if someone who knows what they're doing could walk with me here, I'd surely appreciate it.

  • 3
    \$\begingroup\$ I'll add just a little more explanation, as requested by @Lou. My goal is to build an olive oil burner suitable for lightweight backpacking use. I don't know if this is going to work but it's an idea I want to try. This would turn olive oil into a multi-use item, burnable by me and my stove. It has higher energy content per oz than alcohol but its flash point is too low to burn as liquid at normal temps. So my idea is to vaporize it ultrasonically & burn the vapor. \$\endgroup\$
    – Grumdrig
    Nov 10, 2009 at 18:02
  • \$\begingroup\$ Olive oil burns fine with a wick, but that generally doesn't produce much bulk heat. It'll be more like a small candle. \$\endgroup\$
    – XTL
    Jul 21, 2010 at 17:12
  • \$\begingroup\$ Yeah I know. It's not really enough to cook anything and combustion isn't very complete. (Soot is produced.) \$\endgroup\$
    – Grumdrig
    Jul 21, 2010 at 21:04

8 Answers 8


If you google for 555 square wave generator you'll get thousands of hits for circuits based on a 555 chip that produce a square wave. There's a square wave calculator here, which should allow you to experiment with the calculations.

Plus as an added bonus 555 chips are dirt cheap.

Or look at 556 chips which are basically two 555s on the same chip.

  • 4
    \$\begingroup\$ If there are thousands of those circuits you could at least reproduce one here! \$\endgroup\$ May 4, 2012 at 14:52

For a simple oscillator people often think immediately of a 555 timer IC. This ciruit is even simpler:


The 74HC1G14 is the single gate version of the more common 74HC14 in SOT-23 package.


Please note: the circuit you linked to uses a comparator, not an op-amp. You can use op-amps in comparator circuits but they aren't up to the job for various reasons: op-amps are optimized for amplification applications where the inputs are driven to the same voltage through feedback, and may take a long time to recover from saturation when their inputs zoom apart through positive feedback like in this circuit. A comparator will be faster and will do the right thing.

As for circuits: I'd either use a LM393 comparator or a 555 (hard to beat: lots of manufacturers and you can get it from Radio Shack or in high quantities from Digikey at 11c) or a 74xx123 (this one from TI is 16c in large quantity). The comparator will need a few more parts than the other two.

  • \$\begingroup\$ The LM358 is a dual op-amp, not a comparator. \$\endgroup\$ Nov 28, 2009 at 3:28
  • \$\begingroup\$ gack! you're right, I had a brain cramp, I was thinking of an LM393. \$\endgroup\$
    – Jason S
    Nov 28, 2009 at 3:47
  • \$\begingroup\$ of course, an op-amp with no feedback will behave somewhat like a comparator. true, it's not the same as an o.c. output, but you can make use of the rail-to-rail swings to do similar things. \$\endgroup\$
    – JustJeff
    Aug 8, 2010 at 1:21

If you are wanting to build an A-stable vibrator, then the circuit you chose is fine. You will want to keep the R value from loading the op amp. This means selecting R so that it doesn't load an op amp. I would suggest that mean staying in the 10k-100k region of resistance keeps you safe if you use a baseband op amp like a TL072(FET) or an LM358(BJT).

With your circuit you will need trim resistors to get the thing to 'load up' right. A potentiometer in line with R (your feedback resistor) will probably be necessary for tuning.

I think you will find that it is a lot of trouble to make an oscillator circuit this way. I would only do it if you have some very compelling reason not to use a micro controller. A basic stamp, propeller, or Atmel based mcu circuit would be able to create this same squarewave much more accurately. A 555 timer would also work but I would just go the MCU route, an ATtiny 8 pin is 3 bucks so why not just use that.

But multivibrators are fun to play with if you are just playing, remember to buffer the output so you don't load the thing! Good Luck.

  • \$\begingroup\$ Thanks for this info! The reason I didn't want to use a microcontroller is because I assumed it would be less power-efficient than a simpler circuit. But maybe if the amplification stage is the major power drain, the MCU would be a minor issue. \$\endgroup\$
    – Grumdrig
    Nov 10, 2009 at 17:51

Can't you just use a standard crystal oscillator circuit, like the Pierce oscillator, and drive the piezo at its natural resonant frequency?

Here's a circuit for an ultrasonic cleaner, which would seem to be the same principle as your vaporizer. You can also look at patents for things like ultrasonic humidifiers, atomizer, nebulizer, etc.

No matter what you use, you should have a resonant inductor in series with the piezo to get the hundreds of volts to drive it. http://www.techmind.org/sl/#electric

Surely a microcontroller is overkill when the micro has exactly this kind of oscillator inside it to run the clock. You'd be using a crystal oscillator to drive a computer to drive a crystal oscillator.

  • \$\begingroup\$ My first attempts to implement didn't do anything to crank up the volts and therefore failed, but I haven't done anything about it yet - thanks for the info - I'll check this out. \$\endgroup\$
    – Grumdrig
    Jan 26, 2010 at 18:09

As advised by @Scott Murphy and @Lou, I'm going to implement this with an Arduino (with which I'm familiar) running into an amplifier. Depending on power consumption it may make sense to switch to some other circuit later, but I'll cross that bridge when I come to it - if the oil burns and power use is higher than it could be. In that case I'll try a 555 circuit or modify the astable multivibrator I mentioned, as advised.

For amplification, for now, I'll use a headphone amp, and put together an op amp circuit if needed.

Will update here as the implementation comes together (or falls apart).

  • \$\begingroup\$ Great. I'll be very interested to see how you get on, and videos/photos/details of your success (or catastrophic failure) will surely prove helpful. \$\endgroup\$
    – Amos
    Nov 10, 2009 at 21:24
  • \$\begingroup\$ An Arduino to make a square wave??? Do you think that will do? You'll need *at least*(!) a Core i7-950 @ 3 GHz. \$\endgroup\$
    – stevenvh
    Sep 10, 2012 at 14:38
  • \$\begingroup\$ I'd go for a Cray - what the heck, eh? \$\endgroup\$ Sep 11, 2012 at 4:02

I agree with Scott above: A micro is the way to go here, unless you're just playing about with the specific intention of learning oscillators. Making the amplitude adjustable could be a bit tricky, though. Can you tell us more about that? Does it need to be adjusted once (or very infrequently) for calibration purposes, or do you need to be able to change it frequently? Does it need to be user-adjustable, or will it adjust based on parameters in the circuit? What is the range of the amplitude you need, and the resolution (or rather, how many steps) you need in that range?

The simplest method is to just build an adjustable gain amplifier using a potentiometer for the adjustment, if you only need the amplitude adjustable for calibration purposes or for infrequent manual adjustment.

Another way to make it adjustable is to use the PWM output of the micro and feed that to a filter, but you'd have to build a filter that passed 150kHz and smoothed out anything at your PWM frequency (which will depend on your micro frequency). This will be difficult and will strictly limit your resolution.

If you need a square wave above the micro voltage, you'll definitely need an amplifier circuit, and you can probably just control the gain of the amplifier with the micro as well.

Come to think of it, are you sure you need to control amplitude? You can probably control whatever you are trying to control through other tricks as well. If you could share more information, we can probably give you other control ideas.

  • \$\begingroup\$ Thanks for this info too. Wish I could accept more than one answer. The amplitude needs to be adjustable because 1) I don't know how much power I'll need and 2) conditions (e.g. temp) will probably affect the power level needed (though I could probably set it to "high enough" and be done). So it can be pretty coarse and maybe fixed, eventually. \$\endgroup\$
    – Grumdrig
    Nov 10, 2009 at 17:56
  • \$\begingroup\$ @Grumdrig: This is where it's useful to answer the question yourself, mark your answer as a 'community wiki' answer, and then add in all of the good parts from the other answers. By marking it as a community wiki answer, you let others improve the answer over time, while not taking credit for other's work. \$\endgroup\$ Nov 10, 2009 at 18:37
  • 1
    \$\begingroup\$ I agree with Craig. The thing about electronic projects like this is that the questions asked are usually not atomic, which makes it impossible to pick one answer. Another nice feature of the community wiki is that the answer can evolve as the question evolves, and it makes it easier for people to follow the development of the project. If you are willing, would you post the results of your first shot with the circuit? I'm really interested to see how well it atomizes with an ultrasonic solution, and I'm interested in the backpacking aspects. I'll think of efficiencies while I wait. \$\endgroup\$
    – Lou
    Nov 10, 2009 at 19:17
  • \$\begingroup\$ Thanks @Craig. Didn't know these meta-use subtleties; I'll accept my wikified answer in 36 hours(!) when chiphacker lets me. \$\endgroup\$
    – Grumdrig
    Nov 10, 2009 at 20:45
  • \$\begingroup\$ I've been playing with StackOverflow for over a year; you'll pick it up in time. \$\endgroup\$ Nov 10, 2009 at 21:15

If you just want simple gain adjustment, I'd go with the 555 timer. Then use a potentiometer in parallel with a resistor on the output, to create a log pot, (don't buy log pots, they're a rubbish estimation of a log curve, unless you spend mega bucks) the potentiometer set up is here -> https://sound-au.com/project01.htm

If you want accurate control, I'd agree with the other answers, an Arduino type board or an MCU would be much better.

Don't forget, volume is not linear!

I've made an open source pocket oscillator, called a Posc, it features two square waves produced by a pair of 555 timers, have a look, it may help -> http://www.sonodrome.co.uk/tutorials.html There's a couple of PDFs on this page that show the circuit and component layout.

  • \$\begingroup\$ Forgot to mention, the joy of a 555 timer is that it will not require amplification to drive a small speaker or piezoelectric buzzer, however most other oscillators will require amplification with an extra IC or a couple of Transistors. \$\endgroup\$
    – Jim
    Dec 23, 2009 at 11:58
  • \$\begingroup\$ The second URL ("tutorials") is a dead link. \$\endgroup\$
    – gbarry
    Sep 10, 2012 at 14:45

Your Answer

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

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