Sunday, December 26, 2021

Making a deafening piezo buzzer is harder than it seems

Since I was a kid, when dissecting toys, I would find these disc shaped components called piezo transducers or speakers, which were responsible for producing the beeps, melodies and what not, emitted by the toys.

I would often play with these, and try to connect to DC supplies or audio outputs from other devices, but was always frustrated with the sound never being nearly as loud as that produced in the original device.
Just as 20 or 30 years ago, presently these exist in a large variety of electronic equipment. While the moving coil speakers are the predominant technology in reproducing the lower end of the audible frequencies (i.e. the speakers you will normally find in your headphones, sound system, car stereo, etc), on the other hand, for emitting higher pitch or ultrasonic waves, the piezo transducer is the most important technology. Because buzzers/beepers are by definition relatively high pitched sound emitters, the piezo device is an appropriate option, because it can be designed and tuned to operate adequately in frequencies above 1 KHz.

Principle behind the piezoelectric transducer

This type of speaker, as the name suggests, explores the converse piezoelectric effect that certain ceramic or crystalline materials exhibit. Basically when the crystal or other special material is exposed to an electric field, it deforms itself mechanically. This effect can therefore be used to induce vibrations across an acoustic medium (e.g. air). Unlike the moving coil speaker, the piezo transducer electrically behaves closer to a low value capacitor. As such it is a relatively high impedance device. 

Piezo transducers can be found everywhere from small child toys, to large sonar transducers installed in vessels. It is also a key element in the medical ultrasound scanner. 

It produces the ultrasonic pulses and picks up the echoes that are fundamental for imaging. The use of the piezo effect also spans to other applications such as automotive fuel injection systems, and inkjet printers.

Challenge of driving a piezo speaker

However, because as mentioned these are high impedance devices, while the amplitude of deformation is in most part proportional to the voltage  that is applied, on the other hand in order to produce substantial acoustic amplitude, a relatively high voltage is required. This makes it incompatible with the output signal in audio amplifiers that would normally drive an 8 Ohm speaker. The amplitude (Voltage) required to drive such a moving coil speaker is very small, compared to the several tens or even hundreds of Volts that a piezo speaker needs in order to produce comparatively loud sounds.

This brings a challenge, and justifies my frustration as a kid in driving these piezo transducers/buzzers using regular amplifier circuits designed for 8 Ohm speakers: the challenge resides in the fact that battery powered devices are usually limited by battery voltage, as the maximum amplitude possible. As such outputting 3, 6, 9 or even 12 Volts of amplitude to a piezo speaker will barely produce audible sounds. In order to produce the decibels required for a burglar alarm or a motorcycle horn, a much higher voltage is required. This raises the question: how to obtain say, 100 Vpp of amplitude at the speaker when the battery voltage is limited to 9 Volts for example?

Basic implementation

That is where inductance and  electrical resonance fundamentals come into play: if properly matched, when the capacitive reactance of the piezo speaker and the inductive reactance of a certain coil (forming an LC tank with the piezo speaker) are equal in amplitude, then this circuit is in resonance. This means that the signal (as long as close enough to the resonance frequency) as it is provided to the circuit, will add up to the inductive energy stored in the coil, resulting in a higher amplitude signal. Below is a sample circuit based on this approach:
This approach works great, but only as long as the target frequency is in a relatively tight range, in line with the electric resonance of the circuit. If we need a more flexible circuit, i.e. able to play different frequencies, then this approach is not adequate.

Reverse engineering other implementations

By doing a bit of research and dissecting a few devices using piezo transducers to produce loud sounds, I found that one thing in common is the use of a 3-tap inductor:

Doing a few measurements, I could easily tell that this inductor is configured as an auto-transformer:

In two different devices I found somewhat different inductance values in each tap:

Another aspect is the fact that these use either the SS9014 or the SS8050 transistors to drive the output. In the more powerful alarm module, the SS8050 is used in combination with the 172 mH coil. In my own experimentations, I attempted to use a 2N2222 instead of the SS8050, with limited success (it would get hot and the output power was very small).


Reproducing the circuit with the same components, while using my own signal source (a PIC programmed to generate a couple of different tones), the result was very good, producing the intense beeps I expected.

I noticed that the transistor would get hot, and after inspecting the voltage between the collector and emitter of the SS8050 transistor, I found the amplitude would peak somewhat above the maximum ratings of the transistor (interesting how it wouldn't fail quicker), with peaks of about 32 Volts:

Adding a 1N4148 diode in parallel with the primary side of the auto-tranformer (the pair of pins measuring 8 mH), prevented these voltages to appear at the transistor. Looking at the ratings of the 8050 transistor, we clearly seem to be hitting the "red line" on this one:

After adding the diode (it must be mounted with the cathode connected to the positive supply rail, and the anode connected to the collector of the transistor), we are already within healthy limits (about 13 Volts peak to peak):

There is a performance penalty, but still loud enough for my intended use. By touching it, I could not notice significant heating of the transistor.

Comparing the voltages going into the piezo speaker (I have switched the oscilloscope probe to x10, and set the channel accordingly in order to get the amplitudes within range), before adding the diode we were getting about 176 Volts peak to peak:

And after adding the diode, it dropped to 96 Volts:

Sure enough we have halved the performance. On the other hand we are likely to have a more reliable circuit in the long run. 

Working implementation

Given these results, I came up with the following circuit:

The PIC will generate a couple of 20 ms tones every 2/3 of a second, one at 1 kHz and another at 2 kHz. These are intended to simulate the sound of a turn signal relay.


Given the differences in performance of using two generic but slightly different transistors, and considering the experience described by other people who went through a similar challenge - having failed by not achieving the correct component combination, I can only assume that the setup, especially the transistor, autotransformer and piezo speaker must be somewhat accurately matched in order to obtain good results. I haven't done measurements on that, but I also would expect a rather narrow frequency response window. It is also mentioned that the use of these ferrite core autotransformers is only efficient while the pulse duration is narrow enough. When it becomes too long, core saturation will occur, and the transformer primary will behave like a short circuit. This means that we can only go as low in frequency with the tones we want to play, before this starts to occur and the transistor getting blown.

It is probably worth experimenting with different transistors, ideally finding one with similar electrical characteristics to the 8050, but capable of withstanding higher voltages. This way we could eventually omit the diode around the primary side of the autotransformer and achieve full efficiency. It does however require more time, some fried transistors, and a lot of trial and error. For the application I have in mind these results should be sufficient.

One final aspect that needs to be taken into consideration with these piezo transducers is the fact that given their shape, the acoustic vibrations will get scattered in many directions, largely limiting the effectiveness of its output. By adding a Helmholtz chamber, the vibrations in the cavity converge through a single opening, exiting the chamber with a much higher amplitude. As such it is essential to have this mounted to the piezo element in order to obtain the loud output that we expect. We see that production devices will always have these. In spite of the slight variations in shape, the function remains the same.


PicoNano said...

The best write-up on the entire freaking internet!!
Just wondering why instead of the 1N4148 (a signal diode), use a 1N400x right after the collector, connecting cathode to the collector, and the anode to the coil?
The new diode will not allow high voltages to reach the collector, but at the same time allow AC to resonate through the piezo.

Creation Factory said...

@PicoNano thanks for your comments. That is definitively a good point. I guess I was concerned with bandwidth and voltage dropout, and also a bit biased by the its selection in the chinese buzzers, but am certainly curious to replace with your suggestion. Thanks.

juanluisrc said...

Great, I found this info very usefull.
I've been trying to improve the sound level on the buzzer of my project and there is not much reliable info on the web.
After buying a keyholder alarm from aliexpress I realized that there are high loud buzzer devices powered only by 2AA batterys and powered by a 3-pins components (thanks this post I realized it is an autotransformer)
I will test this design.