MOSFET headphone amplifier

The last few months have been busy with a crazy (crazy? Let’s say different, experimental) headphone amplifier design.

The following is a single ended Class-A MOSFET headphone amplifier, featuring: current drive, minimal feedback, single supply, DC servo, virtual ground, and low supply modulation to minimise IMD.

After many hours of simulations and comparing different topologies, I was able to achieve numbers like:

0.005% THD (@100mV out, 1kHz, 250 ohm simulated headphone load with reactance and zobel network)

0.01% @ 200mV out, 0.07% @ 500mV out. Increasing the positive rail from 20V to 22V can improve the THD to 0.002%. The benefit of increasing the rail voltage is twofold: it increases overhead and bias current. However, as simulations show, it’s not at all obvious whether a maximally high bias current is a universally good idea.

By varying R4, I can alter the harmonic balance as shown.

100mV out @ R4 = 4.7k:

100mV out @ R4 = 5.6k:

100mV out @ R4 = 6.8k:

Which is best?

5.6k is clearly better than 4.7k. But is 6.8k better 5.6k? I’m not so sure. By only looking at the linear sums, 0.002% (6.8k) is clearly better than 0.007% (5.6k), but take a look at how that is achieved. At 6.8k some of the harmonics appear to cancel out (4, 6, 8, 10), while others are actually higher (5, 7, 9, 11).

It may be a moot point — I calculated that the threshold of hearing should be around 8uV for the DT-880 headphones (sensitivity of 95dB @ 1mW, IIRC), but similar effects may also occur at higher levels.

Increasing the volume to 500mV out:

R4 = 4.7k:

R4 = 5.6k:

R4 = 6.8k:

Again, the highest bias provides the lowest THD, but by looking at the graphs, most of the improvement is achieved by reducing H2, while the higher harmonics remain at very similar values and in some cases go up.

What’s more important? Performance at 100mV or performance at 500mV?

I wasn’t sure how loud a ‘normal’ listening level would actually be, so I measured it and found that the music level hovered within a +/-200mV band most of the time.

6uV output noise @ 20kHz

Actual noise may be a little higher as the simulation doesn’t factor in noise from the LM317 supplying the 20-22V positive rail.

Amplitude response:

The top shows the amplitude response. Due to the broad impedance peak of the Beyerdynamic DT-880 headphones, gain peaks at around 16dB @ 100Hz, versus ~14dB elsewhere. This may result in a slightly warmer sound than the default.

The bottom curve is measured across R1, showing that the constant current source has strong and consistent performance across the entire audio range. It stops the audio signal from leaking onto the power rail, where it could otherwise modulate the input stage and generate unwanted intermodulation.

Topology decision walk-through

It started off vaguely Zen-like (open-drain MOSFET output, output capacitor) with the goal of being a current source amplifier for lower distortion (as argued by Esa Meriläinen on his current-drive.info website, et al).

There was a long, protracted battle on my favourite spice simulator (TINA) to determine what would be the best topology to build in terms of absolute THD, but also in terms of the relative height of various harmonics as shown on V/frequency graphs. Bearing in mind Fletcher Munsen curves, the high sensitivity of the ear around the 1-4kHz range means that a one-size-fits-all “total” harmonic distortion is highly misleading without some serious weighting adjustments.

In order to approximate a current source, I decided to forgo negative feedback.

For one thing, headphones usually run on a 3-wire system with a common ground. Therefore it would not be possible to use a voltage-sensing resistor to ground, meaning that some other method would have to be used.

Some time after my decision, I found another justification (which I already knew) — speakers are duplex devices. This means that they convert mechanical vibrations into voltages and currents. These tend to be distorted and with unknown phase as well. If an amplifier attempts to improve the accuracy of cone displacement, the side-effects of cone resonances and distortion could be worse than the improvement in the amplifier’s own theoretical distortion.

In the simulator I ended up with a couple of strong contenders:

Single-ended class-A with CCS

Push-pull class-A

with only a tiny difference between the two, whereby a single JFET input stage either drove one MOSFET (SE) or both high and low MOSFETs (PP).

Simulated distortion was actually slightly better with the PP version. But I ultimately decided that I wanted that CCS because of its constant current-ness. As seen above or “in front” of the CCS, it looks like a (nearly perfect) resistive load. This means there is minuscule audio leakage on the voltage rail feeding back to the input stage or to the other channel. The same could not be said about the push-pull version. Therefore, inter-modulation distortion should be much lower in the CCS version. (Pity that I forgot all about that aspect when adding a virtual ground! 😉 But no matter. The capacitance multiplier and RC network pre-filtering the JFET pull-up resistor should be enough on its own.)

Here is a full schematic of one channel, not including “page 2”, which has auxiliary stuff like the boost converter, dual-coil relay, LPC microprocessor, debug connector and LEDs.

Virtual Ground

I wanted to get rid of the unsightly 470-1000uF output capacitor.

Why? Such a large value would produce significant leakage and noticeable DC. The leakage resistance could also be expected to be non-linear and noisy. Not exactly a good component to have in series with headphones.

My first attempt at getting ridding of it, only succeeded in moving the capacitor off to the side, as a capacitor load for an LM317. However, I wasn’t happy with that either.

The design used a +24V/0V single supply, so my answer was to create a virtual ground. My first (2nd) attempt was still too simple (single-ended transistor was liable to switch off during high signal levels), so I designed an op-amp regulated push-pull version. On the plus side, the voltage is regulated to within ~2uV when the other side is blasting out +/-1V. Therefore its linearity (or lack thereof) should be a non-issue, only its potential to modulate the 20V rail.

On the other hand, I have yet to fully analyse its immunity to injecting distorted audio onto the positive rail. Hopefully the RC + capacitance multiplier filter should be enough.

I was forward-thinking enough to add a spare resistor spot on the PCB to vary the idle bias of the virtual ground.

Parts should be coming in very shortly! So I’m excited that I’ll be able to test it out and hear once and for all what the reality of the matter is.

DC servo

Apart from a virtual ground, the amplifier also needed a DC servo to keep the output voltages exactly equal, on average. Rather than an integrator, I used a 1st order low pass filter and limited gain. An integrator would probably be highly dependent on a linear capacitor.

Boost SMPS

After ambitiously creating a 5V to 25V boost converter SMPS, I found that the boost IC I wanted to use were all out of stock. So I’ve reverted using an off-the-shelf 24V supply for the prototype. OK for now, but I still like the idea of running the amp on USB power.

Soft Start

The dual-coil relay that I used is not shown, and I may talk about it in a later post.