Thursday, May 2, 2013
Power Supply Refactoring - finishing the details
In spite of already being a working device, there were aspects that like I explained in the previous post, required some attention. One of the major fixes was the voltage drift. This was caused by the 5 K potentiometer used to set the voltage end point. It was too large (the sweet spot of my setup was around 500 Ohms), which besides making it difficult to adjust, caused temperature induced resistance drift to be too large, causing an increase of around 200 mV from the initial voltage once the temperature settled.
To fix this I replaced the 5 K pot with a combination of a 500 Ohm potentiometer and a 220 Ohm resistor. The result was a benefit both in adjustment accuracy and drift minimization (I accounted for a 10 times lower drift):
Another thing was the transistor dissipation imbalance. I was planning to replace the coldest transistor with a spare one, but instead I decided to put fresh thermal compound over all the transistors. This resulted in a more even distribution of heat dissipation.
In the initial version, fan control was crappy. I decided to go to town with this, and elaborate a better algorithm. The basic concept behind it is to increase PWM (and as such fan RPM) in a linear manner in respect to the temperature once the temperature increases above 28ºC. Below this temperature, the fan is completely off. Above 50ºC the fan goes full on (Pulse Width = 100 %). One of the problems that I have faced was PWM noise. At 1.6 KHz and 4.8 KHz this is quite obviously high. At 19 Khz (the finally selected frequency) noise is lower but still present (low order harmonics most likely). I've chosen this setting because above this frequency the overall efficiency of the fan most likely will degrade due to inductance and capacitance factors. Another challenge was the added weight of using floating point mathematics. The PIC has to perform all the calculations by software, therefore increasing the CPU and memory demand. I had to take this into consideration during the programming. Still for a relatively simple firmware, it consumed around 77 % of the PIC Flash and RAM (it is a PIC 12F683).
To avoid (the remote probability of) blowing up the transistor used for the switching of the fan because of back EMF, a diode in parallel with the 2N2222 transistor was added, so that it is bypassed if reverse current happens to flow. I've just used a 1N4007. A bit overkill but it was what I had laying around.
The overtemperature LED was also tested, but attaching it to the front panel is a task still to be done.
In respect to testing, this should be further exercised. Possible tests includes various combinations of output voltage/current. One relevant aspect would be to determine the largest power dissipation (in the transistors) for which a safe and steady temperature is still obtained.
The 2N3055 are expected to operate at up to 150ºC without being destroyed. To keep things in the safe side, staying below the 100ºC should be the aim. Besides this, at these temperatures the transistor characteristics change significantly. And furthermore, the use of several transistors that have small differences between them increases the risk of thermal runaway, which is an evil from which bipolar transistors suffer (as temperature increases, current flowing through the transistor also increases, causing the temperature to further increase, and so on, until the transistor releases magic smoke, or simply dies silently).
Bringing some theory to the table (and here we will not be too distant from it, as long as our measurements are correct), we can easily verify that in order establish a relationship between output voltage, current, and the dissipation on the transistors we need only to consider the following simple equivalent circuit. All other components have negligible impact on the end results:
As such we have a given Vin, which ignoring the transformer own voltage drop in respect to the load, has a value of about 28 Volts. In this PSU this is fixed, as we don't have multiple transformer taps and relays to switch between them. We also consider this to be both a corrent and voltage source, as it can operate in both forms. So applying the law of the meshes we have:
Vin = Vreg + Vload + Vshunt
The resistor for Vshunt has a value of 0.18 Ohms so that the dissipation is very small here.
To define a function where the Power dissipation in the transistors depends on the output voltage and current is easy. We know that P = Vreg * I. Our Vin = 28 Volts. From looking at the circuit it is clear that:
28 = Vreg + Vload + 0.18 * I
As our two independent variables are Vload and I, and knowing that P = Vreg * I, then our function translates to:
28 = P / I + Vload + 0.18 * I <=> P = (28 - Vload) * I - 0.18 * I^2
Translating this into a 3D graph, we have the following:
X, Y and Z axis represent Vload, I and Power respectively. As such we can clearly see that our maximum dissipation occurs for the combination of maximum current and minimum output voltage. For the graph we considered the voltage to be between 0 and 20 Volts, the current between 0 and 8 Amps, and the power peaking at 212.48 watts for V = 0 V and I = 8 A. This is therefore the worst case scenario our transistors need to handle. With the current size of the heat sink and at moderate (> 20ºC) ambient temperatures this may not be feasible without damaging the transistors. The maximum theoretical dissipation of each 2N3055 is of about 70 W considering that its temperature is kept below 30ºC. This gives us a 280 Watt power budget, which in practice will be smaller because it is impossible to stay below this temperature with the current heat sink (at about 40 Watts dissipation the heatsink temperature settles at about 50-55ºC). However in the green area of the graph, healty operation seems possible, as the dissipation is not huge.