Saturday, 14 April 2018

Achieving low THD at modest power level with jellybean parts

My power amps to date follow a reasonably simple recipe: Differential JFET front end, a couple more voltage gain stages, then power MOSFET followers, based on the Tilbrook AEM6000, with updates to more modern parts and some minor tweaking. They work pretty well. I'm able to achieve reasonably good distortion performance, hitting 1ppm THD at 1KHz, low input referred noise level, of 5 ish nV/√Hz, and plenty of output power, easily putting 100W into an 8Ω load.

But most of my speakers don't need 100W. Most of them don't last terribly long at such power levels, and I get a lot of complaints from Perry when I wind the wick up too much anyway.

Also, they're expensive. Each of those output transistors are >$10. The differential JFET on the front end is another $5. I'm probably up for $100 or so in parts just to build one amp, which is something of a waste if I use it with a little 4" bass driver or tweeter.

I'd like to play with line arrays - it would be cool if I could drive each speaker independently, as then I could play with multi-channel DSP. That's not going to happen when the amp for each driver is $100. I have a workmate who's doing similar things - his question each time I suggest he use a linear amp rather than a class-D eBay one is "how much?" This is perfectly valid.

So I got to wondering what was possible using really cheap transistors for driving a single 3.5" speaker. I set the following as my design goals:

  • Absolutely no compromise in THD. Preferably 1ppm at 10KHz.
  • 5-10W should be adequate.
  • Better noise performance than my AEM6000 derived amps, as I'll be running them at lower levels where noise will dominate.
  • For exactly the same reason, better PSRR. I really don't like listening to hum.
  • Really, really cheap. Like $10 per amp in parts.
Given that each of my nice Lateral MOSFETs costs more than my budget, that totally rules them out. This means I'm stuck with jellybean bipolars.

My basic three stage amp design should work well with a bipolar input stage. Similarly I can whack a bipolar follower stage on the output. How about if I use a diamond configuration for the current buffer. Even better, how about if I cascade a pair of diamond stages, to minimise loading of the final voltage amp transistors. Rumour has it that this is sure to oscillate, but I'm game.

I was able to get this topology to work well in simulation, with BD139 & BD140 transistors as my final drivers. I could hit 120dB open loop DC gain, with better than 50dB available to correct output stage distortion at 10KHz. This led straight away to sub ppm THD at 10KHz with 20dB gain under simulation. However I wanted a bit more output current than the 1.5A max the BD139 was happy giving me, so I tried TIP41 & TIP42, which are good for 6A. They proved a little slow with stability issues, so I stepped back to a BD179 & BD180, which provides up to 3A in a TO-126 package and is reasonably fast, plus really cheap, at $0.40 each in quantity.

A few simulations later I had the following: A simple input differential pair using BC547's for reasonably low noise, followed by a folded cascode with differential current sink loads to a pair of differential amps, then finally a very conventional symmetrical voltage amp stage using 2N3904 & 2N3906 transistors, then the first current gain stage; a diamond composed of 2N3904 and 2N3906 transistors, and finally our output stages, a bunch of BD179 & BD180's in a diamond configuration. One nice thing about the diamond is that the quiescent current is set by a simple current source/sink pair, making them immune to thermal runaway. A bad thing is that I'm effectively doubling the number of output drivers. Not a big problem when they're $0.40 each.

I published the simulated design on DIYAudio, and received some really useful feedback, adding a cool "clipping control" stage, which sucks charge out of the compensation caps in the event of clipping, ensuring there's no sticking to the supplies.

I then went ahead and knocked out a PCB for the "5W" version, using two sets of output drivers. I used KiCAD, as it's completely open source and it was about time I broke away from closed PCB software (Protel) and used something where I could share the design work with others.

This worked reasonably well, though I initially missed my THD target by rather a lot - measuring 15 ppm at 1 KHz into 8Ω when I was expecting closer to 1 ppm.

After some measurements I found the source of the problem was simply due to where I was sampling the output voltage for the feedback network. By tapping the net away from the output connection, I wasn't getting an honest representation of the output, being influenced by currents between output drivers. Cutting a trace and adding a link from feedback resistor to the actual output connection of the amp fixed this, and I was able to achieve around 2.4 ppm at 1 KHz, up to 6W into 8Ω with gain of 10 (20 dB). This mod has been folded into the rev 2 PCB.

Noise performance is also pretty good - with 4.2nV/√Hz (input referred - the plot shows the output with a gain of 10) at 1 KHz with the input shorted.

The folded cascode gives me a pretty wide common mode range of ~10V with +/-18V supplies, and the current sink loads for the first stage mean the whole lot will keep on trucking with a supply as low as +/-5V or so. When it clips, it does so cleanly, with no rail sticking or oscillation.

It plays square waves neatly too - here's a 10KHz square wave. Slew rate is ~12V/µs.

There's also a 10W variant with twice as many output transistors, a dual 5W/15W version with active crossover for driving my two way transmission line "noiseUnit" speakers, and a preamp implementation with relay-based volume control.

So if you're keen on a no compromises driver for headphones or small speakers, give this one a shot - the full design details, including all my KiCAD design files and Gerbers are at diyAudio. It's cheap but good :)