Joule Thief boost convertor

I previously breadboarded a circuit using an AVR, LED bar graph and a piezo buzzer. I used an Arduino clone running at 5V, but I'd like it all running off battery so 5V is wasteful. My LEDs have typical forward voltage of 2.2V and the AVR needs 1.8V at 4MHz. The buzzer works at a wide voltage range but needs at least 5V to be loud enough.

Ideally I'd like to run off 1 NiMH cell. The AVR and LEDs need a regulated supply but the buzzer does not. There's a famous unregulated boost convertor circuit, the Joule Thief. This traditionally uses a torroidal ferrite core transformer, but I only have a powdered iron core. It's based around a blocking oscillator, which Wikipedia claims relies on the magnetic core saturating. Iron cores typically saturate at a higher flux than ferrite, with a softer knee to their BH curve. This might be a problem but I've seen a lot of variation in working Joule Thief circuits, including air cores, so I expect it will work anyway.

I made a transformer by adding a second reverse polarity winding to a toroidal iron core inductor:

Hand wound torodal transformer

Using a 2N2222 NPN and a 1Kohm base resistor, it successfully drives a white LED from a "dead" (0.7V open circuit voltage) alkaline cell. The current is tricky to measure because it's AC with a non-sinusoidal waveform, but it's high enough that I had to cover the LED with some tissue paper to diffuse the light.

Joule Thief powering a white LED from a single alkaline cell

It fails to start from a small coin cell at 0.8V open circuit. I measured the cell's short circuit current at less than 1mA, so the internal resistance is much too high and this cell really is unusable.

I tested it powering the buzzer from a single NiMH cell. The dummy cells are alkaline cells insulated to prevent shorting then wrapped in aluminum foil. I switched the whole Joule Thief circuit on and off with a 2N7000 MOSFET instead of a bipolar transistor so as not to be mislead by base current. The 2N7000 works fine here for testing purposes because of the 5V gate drive but it is not suitable for lower voltages. The buzzer volume was very low until I added a series diode to the output. With the diode in place the volume is acceptably loud.

Joule Thief powering a piezo buzzer controlled by an Arduino clone

Here's the waveform across the buzzer:

Waveform of voltage across the buzzer

It's pure coincidence that the peak-to-peak voltage is about 5V. Here I sabotaged the toroid by threading a wire loop through it. This wastes energy by inducing a current in the loop that does nothing but heat it.

Toroidal transformer with added wire loop to waste energy

The voltage across the buzzer reduces as expected:

Waveform of voltage across the buzzer

Occasionally there's a glitch in the square wave on the 2N7000 base, maybe because of the AVR's interrupt timing. The voltage rises a bit higher then. This suggests the software should be modified for longer pulses to increase maximum voltage.

Waveform of voltage across the buzzer showing glitch

Here I'm sending a slower wave with higher duty cycle:

Waveform of voltage across the buzzer

It's only slightly louder, and that's probably more because of the longer pulse time than the voltage. Looking at the ripple you can see the Joule Thief oscillating at about 330kHz. It reaches a steady state after a small number of cycles, with maximum voltage not much higher than before.

Waveform of voltage across the buzzer

I also tried powering the buzzer from the single NiMH cell directly without the Joule Thief and it was still audible, although IMO unacceptably quiet. However, this dramatically reduces the complexity, and at 2.3V or so it might be acceptable, so this is also worth testing.