I have been playing around trying to get a handle on the current required to drive a piezo buzzer in various configurations. But, the numbers I'm measuring don't make sense to me - or, rather, seem unrealistically low.
First, I tried using an external BJT NPN transistor (a BC337) to drive the piezo, with a 1K resistor in parallel with the buzzer. Current measured at 2.8mA. Next, given that the current was so low, I figured why bother with an external transistor, when I can drive it straight from the MCU's I/O pin? So hooked it up with a 220R series resistor to provide some kind of safe current-limiting just in case, and the same 1K parallel resistor across the piezo. Current measured 2.4mA.
However, I then figured that in this configuration the 1K resistor was redundant (when there is a permanent path to ground for the piezo, it doesn't need the resistor to discharge it in the off periods of the frequency cycle, right?), so I removed it and measured again. I was puzzled to see that now zero was registering on my meter.
After double-checking everything, I switched the range down from 20mA until it finally did register... around 5
uA!
Wha? How?
Surely a piezo buzzer cannot possibly be using that little current to produce a loud sound? I was expecting something in the low single-digit mA range - the spec sheet for this particular buzzer claims 7mA max. @ 9V p-p 4KHz. If it truly is drawing such a minuscule amount of current, it appears that the current consumption I measured in the earlier iterations was simply that drawn by the parallel 1K resistor (5V @ 50% duty cycle = 2.5V avg, so 2.5V / 1000R = 2.5mA).
Is it something to do with a piezo being extraordinarily efficient when driven at its resonant frequency? Or is the square wave signal somehow messing with the reading of my meter?
Circuit diagrams below if it helps.