A digital DC powersupply

ArticleCategory: [Choose a category, do not translate this]


AuthorImage:[Here we need a little image from you]

[Photo of the Author]


original in en Guido Socher

AboutTheAuthor:[A small biography about the author]


Abstract:[Here you write a little summary]

A very important device for hobby electronic is a reliable DC powersupply. A proper electronically stabilized powersupply can easily cost over 150 Euro.
Using a clever microcontroller based design we can build a power supply which has more features and is a lot cheaper.

Those readers who are new to this series should first read Programming the AVR microcontroller with GCC.

Don't worry if the printed circuit board looks like it is too complicated for your home lab. All parts and a properly etched PCBs will again be available from shop.tuxgraphics.org.

ArticleIllustration:[This is the title picture for your article]


ArticleBody:[The article body]


In 2002 I wrote a linuxfocus.org article about a Microcontroller based DC powersupply (LF November2002 article251) The article received a lot of interest as I noticed from emails which I received on this subject. The design of this powersupply was however something for advanced hobby electronic fans due to the complexity of the circuit.

So here is now a new design which is less complex but has a lot more features.
  1. Only cheap and standard components are used.
  2. Only one power source is needed (no separate negative supply voltage for operational amplifiers)
  3. The display shows pre-set and actual values for voltage and current at the same time.
  4. You can completely control the powersupply via your PC or you can use it standalone.
  5. It is very small and very powerful.
How was it possible to remove components and add more features? The trick is to move functionality which was previously based on analog components like operational amplifiers into the microcontroller. In other words the complexity of the software and algorithms is higher but hardware complexity is reduced. This reduces the overall complexity for you as the software can just be copied. It has also helped that the Atmega8 can do much more than the now phased out AT90S4433 microcontroller.

In this article you will also learn new things about the Atmega8. You have seen how to use the analog to digital converter. Now we will add a very fast digital to analog converter which can be useful for a lot of other circuits.

In this article we will discuss the hardware and electrical design. There will then be two more articles where I explain the software. We will also gradually add more features. However adding those will require only software changes.

The basic electrical design idea

I could of course give you just the circuit diagram and some instructions on how to build it. It will probably work but you will not know how it works. Most hobby electronic kits are like that.

The idea of the shop.tuxgraphics.org online shop is however to provide good and free documentation together with the development kits. In the documentation (e.g this article) we explain really how things work and why it was designed that way. I find it much more fun to build something that I understand and I hope you like it too.

Let's start with the simplest possible electronically stabilized powersupply. It consists of 2 basic parts: a transistor and a reference voltage generated with a Z-diode.
simplest possible building block

The output voltage of this circuit is Uref - 0.7V. The 0.7V are approximately the voltage drop you get between B and E on the transistor. The Z-diode and the resistor generate a reference voltage which is stable, even if the input fluctuates and is noisy. The transistor is needed to handle higher currents than the Z-diode and resistor alone can provide. In this configuration the transistor just amplifies the current. The current which the resistor and Z-diode need to provide is output current divided by hfe (hef is a number which you can lookup in the datasheet of the transistor).




Today microcontrollers are so fast that all this can easily be done in software. The beauty is that you get as a side effect a voltmeter and an amperemeter for free. The control loop in the microcontrollers has to know voltage and current values anyhow. You just need to display it. What we need from the microcontroller are: The problem is that DA-converter needs to be very fast. If there is a short circuit detected on the output then we must immediately reduce the voltage on the Basis of the transistor otherwise it will die. Fast means within milliseconds (as fast as an operational amplifier).


The R-2R ladder




Instead of using separate switches we can connect the R-2R ladder to the microcontroller output lines. A output pin of the atmega8 can provide about 10mA but at this current you notice already a voltage drop. We would like to use the full output range from 0-5V so the load on the output should be less than 1mA. In other words we build a R-2R ladder with 5K and 10K resistors.

The AD-converter of the Atmega8 has a resolution of 10bit. To use the resolution completely we need also 10bit for the DA-converter. In other words we need to find 10 output pins which are not used by anything else. This is a little challenge as we would also like to have a keyboard, LCD display and I2C serial interface to the PC but the Atmega8 is quite good. It just fits.

A more detailed design

detailed schematic idea


The final circuit

When adding amplifiers we must keep in mind that those must work with large signals. Most amplifier design (e.g for audio) is done under the assumption that the signals will be small compared to the supply voltage. So forget all the classic books about transistor amplifier design.


There is also the additional requirement that the amplifier must go from zero supply voltage to a stable state without generating any output peek. In other words there must not be any short oscillation or output peek when you switch on the powersupply.

What to do? Well this is not an easy task at all and requires some experience. I will go with you through the final circuit and do the needed calculations.

We start with the power transistor. According to the datasheet the BD245B has a hfe=20 at 3A output. It will therefore draw about 150mA on the Basis. To amplify the current (reduce the current needed to drive the circuit) we use a configuration known as "Darlington transistor". For this we put a BD137 in front. It has a hfe value of 50-100. This will reduce the current needed to less than 3mA (150mA / 50). 3mA are manageable with small signal transistors like BC547/BC557. Those small signal transistors are then very good for building a voltage amplifier.

Vampl= (R10 + R11)/R11  
The powersupply shall be available in 2 version: Max 30 output and max 22V output. A combination of 1K and 5.6K gives a factor of 6.6 which is good for the 30V version. For the 22V version we use 1K and 4.7K.


- hfe is about 100 to 200 for a BC547 transistor
 about 50 [unit=1/Ohm]

The inner equivalent output resistance is:
Low enough to drive the following BD137.

R9 ties Basis of BC557 to Emitter which means "off" for the transistor until the DAC and BC547 come up. R11 and R10 tie the Basis of BD137 initially to ground which shuts the output Darlington stage down.

Now you have seen how such a circuit is designed. We need to add some protection diodes and capacitors to stabilize the circuit and we are done.
final circuit
The final circuit in big as: [PNG] [PDF]
The values in square brackets are for the 30V version.

The circuit diagram and the board layout file (pcb format) are also included in the tar.gz package which you can download at the end of this article.

The connector called "Raw DC in" (=CONN6) has 3 pins. Pin 1 is "plus" pin 2 is "minus" (=GND) and pin 3 should be connected to the earth pin. In other words "earth" is neither directly connected to GND nor to "plus".

The limits

78L05: max input voltage 30V, the ZD8.2 extends this limit
       to about 38V. Using a different Z-diode you can extend this
       a bit. I would not go beyond 45V.
       The max output voltage should be at least 2V lower than
       the input voltage.

BD245B: 10A 80W, The 80W are however at a temperature of 25'C
        (Max input voltage * Max current) < 70W

        that the current distributes equally add a 0.22 Ohm resistor 
        into the Emitter line of each BD245B. 
        The same circuit and board can be used. Mount the transistors 
        on a proper aluminum cooler and connect them with short 
        wires to the board.

Current measurement shunt:
        This is a 0.5 or 0.55 Ohm resistor with 6W. This is good enough
        for about 3A of output (Iout^2 * 0.55 <= 6W). Use a resistor
        with more watts for higher currents.

Power sources

You can either use a transformer, rectifier and big capacitors or you can try to get a 32/24V laptop powersupply. I went for the later option. Those laptop powersupply "bricks" are sometimes sold very cheap (over stock) and some of them provide 70W at 24V or even 32V DC.

22V 2.5A version:  you need a 18V 2.5A transformer, a rectifier
                   and a 3000uF capacitor. (reason: 18 * 1.4 = 25V,
                                            at least 1000uF per ampere)

30V 2A version:    you need a 24V 2A transformer, a rectifier and
                   a 2200uF capacitor. (reason: 24 * 1.4 = 33.6V, 
                                        at least 1000uF per ampere)


A power diodes bridge with 4 diodes which are specified for a 
low volatage drop (e.g BYV29-500) gives a good
Note that the above dimensioning is not meant for permanent maximum power output (reason: 22*2.5 > 18*2.5). There is no problem to use the maximum power for 10-20min. The transformer will get a bit warm but that is only for a short time. If you want max power output not only for peak current but over hours and days then limit the max output current or voltage in the hardware_settings.h file.

You can also use a "heavier" transformer but be aware that the upper limit is given by the power transistor. Formula:
VotageOfTransformer * 1.4 * MaxCurrent < 70W
The 70W is Ptot of BD245 minus 10W savety margin.

Check your circuit for proper insulation. Make sure that it is not possible to touch any part that may carry 110V/230V even when the case it open. Connect all metal parts of the chassis to earth (not to GND of the circuit).


When you have soldered everything together then do not insert the microcontroller into the socket yet. Do some basic tests first.

Test1: Connect some powersupply (at least 15V) to the power input of the circuit and check that you get 5V DC behind the voltage regulator.

Test2: Measure the output voltage. It should be 0V.

Test3: Connect pin 7 and pin 26 on the microcontroller with a wire (no microcontroller in the socket). You should get on the output a couple of volts less than what is used at DC input. Remove the wire and the output should go back to zero. Be sure to not cause any short circuit on the output.

Insert the microcontroller and load the LCD test software by running the commands in the directory of the unpacked digitaldcpower tar.gz package.
make lcdtest
make lcdtestload
You should see "ok works" on the display.

Now you can load the final software as described above.

A word of warning for further testing with the final software: Be careful with short circuits until you have tested the current limitation function. A save way to test the current limitation is to use a low Ohm resistor, e.g a car bulb. Set a low current limit, e.g 30mA at 10V. You should see the voltage going down immediately to almost zero once you connect the bulb on the output. There is still fault in the wiring if it does not go down. The car bulb will protect the power supply circuit even if there is a fault as it is not a full short circuit.

The software

For the curious ones I have included a quite long description of each .c file in the README file of the digitaldcpower tar.gz package. The code contains also plenty of comments. Otherwise I plan to write more articles which will just explain the software part. This article is already quite long and you need to build the hardware first.

I will also add gradually more features with the coming articles: Now you want to know how the use the software and how to load it.
gedit hardware_settings.h
make wrfuse4mhz

software is designed for this frequency.


This will compile the software.

make load

This will load the software.

Some pictures and ideas

Here are some pictures from the powersupply which I have build. Pictures are sometimes much better than long description especially when it comes to hardware and mechanical parts.



The two printed circuit boards. The smaller one is for the keyboard.


The circuit. Very small, feature rich and powerful.

The final powersupply.

Have fun! ... and there will be more fun because this hardware can do much more...