Microcontrolled Lab Power Supply
Posted on Dec 28, 2012 4802
Under: AC-DC & DC-DC Circuits
This unit delivers 0 to 20 volts at up to 4 amps in 0.1 volt increments. The entire device runs on a PIC16F870 (about $3 in small quantities). This is basically a switching power supply with the voltage regulation done in software. The PIC used here has analog inputs (used to measure voltage and current) and hardware PWM (pulse width modulation) output used to control the power. Only two controls are used on the front panel - an 'on/off'' push button and a rotary encoder. The on/off button is a 'soft' control; the unit actually stays powered up all of the time. In the 'off'' mode, the display is blanked except for the far right decimal which acts as a standby indicator, and the voltage output is set to zero. Also, while in this mode, the rotary encoder is not active so that the previously selected voltage will be maintained when the unit is powered back on.
Click here to download the full size of the above Circuit.
This design has a 'current cutout' which will turn off power completely. To access the cutout limit, turn the unit on, then hold down the button for about 2 seconds. The left display shows 'ALI' and the right displays shows the current. To go back to normal operation, hold button for 2 seconds again. The displays are standard red 7-segment LED's. They are multiplexed in software to simplify the circuit design. A set of 6 small pnp transistors activates each one in turn at about a 100 hz scan rate. Because of the nature of switching supplies, it is actually possible to get more amperes out of the unit than the transformer is rated for. I got over 4 amps out at 5 volts. As you increase the voltage, less current is available. The software listing is included here allong with the Object File,as is the Schematic.Like other projects shown on this site, you are welcome to use whatever information you want but this is not a step-by-step guide to making your own. Some of the parts used here were scrounged from the junk box and the values are unknown - they just seem to work.