The pretty-good 12V-5V DC-DC converter

I put the power supply on a board and wired it all up. I figure I'm getting around 60-65% efficiency — far better than the 42% efficiency of using a linear regulator. In other words, if my lighting stuff (the motivation for the 5-volt supply in the first place) outputs 1 watt, the battery will be hit with 1.5 watts whereas if I had used a linear regulator, it'd see 2.4 watts — the 84 watt-hour battery could run for 56 hours instead of 35 hours. Heck, it's almost half as much time as I put into making the fucking thing!

Loading


5 volt success on the breadboard

I got around to the basics of the circuit below. I set up the MOSFET in the configuration below and drove it from the op-amp. I added the PNP in a similar configuration to ensure that maximum current would get to the gate — I need to get that gate to 12 volts, and the 20 mA output on the op-amp wouldn't cut it. I got nice square square-waves but, using a simple pulse-width modulation to the capacitive output, I was getting the same problem of current-in equals current-out. I set up the buck configuration again and finally got some success: 6.6 watts in and 4.2 watts out for an efficiency of 63%.

At this point I realized the output-as-driven would end up as 5-volts from the positive battery rail. I remembered having 7905 negative-rail 5-volt regulators around (and always thinking, "what the hell will I ever use these for?") I switched to the terminology where the positive battery terminal was ground (calling it 0-volts) and the negative rail was -12 volts. I spent some time diagramming the circuit (using CADintosh from Lemke Software, GMBH.) I went back and set things up like I had drawn, made a few changes, and did some final tests on the breadboard. By varying resistors, and using the 51-ohm load I got 97mA out (4.95 volts at 470 mW) with 52 mA at the input (624 mW) for an efficiency of 75%. I tried the 8-ohm load and got 620mA out (4.96 volts at 3.08 watts) with an input current of 419 mA (5.03 watts) which gave me an efficiency of 61%. I think this looks pretty good.

So, after three days of slaving for a total of 20 hours or so, here's the circuit …

Here's the final (so far) circuit diagram for the inverter.

You can look up explanations for a twin-T oscillator and a buck converter for the oscillator and the inductor on the Internet, but one thing that I don't think is too obvious is that the diode after the op-amp is there so the base of the PNP transistor can actually go to the rail — the op-amp may not reach it, but the diode will be shut off so the 470-ohm resistor will shut the transistor down. The other thing is that the inductor has no value. I don't know what it is: it's a yellow torroid with red magnet wire that I pulled out of a dead computer UPS, so I don't know its value, but of the ones I had lying around, it worked best. I guess I should put parallel lines below it because it's iron-core … oh well.

Loading


DC-DC converters via the 10-potentiometer method

First, the "10-potentiometer method" is when you have the basic idea for a circuit but tune it by varying values until it works the way you want. That's basically where I started.

The general idea is that I wanted to make a high-current source for the 5-volts I'll need to run the logic circuits and LED's (I wired the LED's to expect 5-volts on the input resistor) that's pretty clean, but it doesn't have to be perfect. I knew I didn't want to start with a linear supply: if I went from 12 volts to 5 volts, the power efficiency is 42% (i.e. at 1 amp it's 12 watts in for 5 watts out and 5 watts / 12 watts = 42%.) However, I also didn't want to go with an off-the-shelf solution — mostly because I thought my requirements were really easy.

I got up on Monday, August 1 really early and got started. I dug through my transistor bin to find an NPN that could handle around 3 amps. When I started I figured I could go from 12 volts to half that (6-volts) and then drop the rest through a 7805 regulator to give a nicely cleaned-up output.

I got a buck-style converter set up. It was similar to the circuit above — using the twin-T oscillator as a source for pulse-width modulation on an op-amp — but I didn't use the 7905 and just had a couple 100K resistors on the input pin of the feedback op-amp to approximate 6 volts, I didn't have a high-pass filter on the feedback circuit, the oscillator was running from +12 volts to 0 (or 0 to -12 volts as I've got it diagrammed) and the output was just a current follower where I had an NPN set up with the base tied to the output of the PWM op-amp (top right) with its collector tied to battery-positive, and the emitter driving the diode/inductor/capacitor buck setup.

I ran 127mA through 51 ohms to get 6.7 volts (850 mW) and I was able to source 5 volts at 1 amp into 5 ohms (25 watts) although it seems to go linear. I suspect the transformer I'm was using as an inductor doesn't have enough current capacity. I tried 8 ohms and managed to source 800mA at 6 volts (2.4 watts) and that seemed to be the limit of the power source before going linear (the transistor was on at over a 90% duty cycle.) With that output current, I checked the input and it was drawing around 650mA at 12 volts or 7.8 watts — hardly efficient at all at 33%. With the 51-ohm load, it uses 130mA just like the output … then again, maybe my meter just isn't very good at measuring transient currents like the circuit is drawing from the battery. I used the oscilloscope instead so I could estimate the waveform (and actually calculate RMS voltages) with an 0.1 ohm resistor — a handy value for converting to current (volts times ten.)

I tried some differnet chokes and found one that would cause the circuit to input 700mA RMS (2A peak-to-peak) at 12 volts (8.4 watts) for an output of 1 amp into 8 ohms (8 watts) so that's pretty good (although for some reason it decides to output 8 volts instead of 6 volts.) I tried switching to another op-amp (now the LM324 which is what I stuck with throughout) figuring that it could get its output closer to the rails — that got me to around 65% at 8 ohms but only 24% at 51 ohms, but running that inefficiently, I would expect 2 watts dissipated on the bare transistor to get hot really fast … hmm … I'm concerned about my measuring efficiency. I tried estimating the waveform power levels with some calculations and got to a 45% efficient — worse than the 50% efficiency of just dropping half the voltage as a resistive load.

I kept switching coils, transistors, and resistors. Man am I sick of staring at breadboards and oscilloscopes. I got varying figures and even created perpetual motion machines: I had a 115% efficiency at one point. I was certain it was measurement error.

Up until now, I was using a linear power supply for the 12-volt input. When I switched to the battery, everything stopped working. I had to start all over again — I tried varying the frequency of the PWM oscillator then I tried removing the feedback loop to see if I could get something out unregulated and met with some success. I also floated the PWM oscillator (oh yeah: originally I had the emitter tied to ground, so the oscillator was running very close to the rails.) I added a filter capacitor at the input. All this helped but didn't get me any closer to something that could significantly beat a linear supply.

I decided to check my 0.1 ohm resistor to make sure it's good. Using the meter, I measured a 203 ohm resistor in series with the 0.1 ohm and measured 12.67 volts across it (when I hooked the two series resistors across the battery) for a current of 62.41mA. The 0.1 ohm resistor dropped 0.0123 V so the resistance is actually 0.197 ohms. Once I figured that out, all my efficiencies were twice as good. I took a break and enjoyed the catharsis, but I really didn't believe my measurements so I went back and did them again. Using a 303 ohm resistor, I get 12.74 volts across it which is 42mA and I measured 4.0 mV across the 0.1 ohm resistor, making it 0.095 ohms. Darn. I tried the other resistor: it now reads 205 ohms and dropped 12.70 volts or 61.95 mA. Given the 5.9mV drop on the test resistor, I get 0.095 ohms again.

I tried making a PNP current source to drive the NPN current follower off the op-amp … somewhat similar to what I've got above, but the PNP output goes to an NPN current follower. That gave me an efficiency of 42%. I stripped the circuit back to the point that the transistor is switching a full 12 volts on-and-off at a 50% duty cycle, and still it has a 50% efficiency. The collector-emitter voltage switches between 12-volts and 1.5 volts, but that only accounts for some of the inefficiency. I decided to try a MOSFET in the same configuration but got the same result.

Tuesday I got up early again and I figured the feedback loop was giving me trouble by switching off the resistors too soon regardless of the high-pass filter I added yesterday. I thought about using a sample-hold circuit on each pulse, but then thought that was stupid and would be a waste of time. Instead I figured that the output transistor can't get fully on or fully off based on the op-amp. I couldn't figure out what to do about it. I tried using a buck-boost configuration where the inductor is in parallel to the output but that didn't work. Heck, the inductors had no appreciable effect at all.

Once I did some measurements, I figured out the big problem. The MOSFET output was swinging from 0 volts to 8.1 volts when using the 8-ohm load. That 4 volts at 670 mA (6 ohms) with 50% duty cycle accounts for 1.3 watts of power loss (out of a total input of around 8 watts and an output of 3.5 watts, so there's still some 3.2 watts going somewhere I haven't found yet.) I tried the 51 ohm load and the peak is around 9.1 volts with a current of 120mA but with about a 30% duty cycle — 75 ohms this time accounting for 360 mW out of a total loss of 710 mW. I checked, and if I supply a full 12 volts to the gate of the MOSFET, the maximum output is only 9.1 volts into 51 ohms. Harumph.

I switched to some 2N277 PNP transistors I had lying around in the switch-configuration I have on the first stage of the output in the circuit above. However, that didn't work. I tried the more reliable small-signal PNP's but that didn't work either.

Loading