© 2006 Science Publications Corresponding Author: Microcontroller Based Power Supply

These days, majority of electronic devices work on DC power source, so there was a requirement of a reliable and customized power supply. Generally, the requirements are not too varied, but still they require every time a new hardware designing. The idea presented here is to build a microcontroller controlled power supply[1] that is flexible enough to meet different customer requirements, with minor software changes and no corresponding hardware change. Hardware issues are discussed, with a goal of developing a generalized power supply that has programmable output voltage and current. It is able to recognize faults and take corrective actions to prevent any permanent damage to the system. The system discussed here is capable of functioning independently by its own without any intervention from the user. The system finds application at remote sites to automatically manage primary (AC) and secondary (Battery) power sources to provide smooth uninterrupted power output even during switchovers between AC and DC power sources. It would also be helpful to insurance companies who expect that the products covered by them be reliable, robust and not prone to be damages.


INTRODUCTION
The trend and demand these days are to develop systems that are reliable and intelligent. People need products that are reliable and do not require constant supervision [2] . From the manufacturer point of view, they require a product that is highly reliable and does not damage if the parameters run out of specifications or even on mishandling by the user. To increase the market base of their products the manufacturer tries to put enough intelligence in the system so that it is capable of functioning by itself. Embedded system's is one such area, which fits well in these situations.
The microcontroller based power SUPPLY is developed with a view to make a flexible and an intelligent power supply controlled by a microcontroller of 8051 family [3] and to eliminate the drawbacks or limitations of the existing systems. They are discussed.
Most of the existing systems are hardwired and expensive, which increases the production and procurement cost. The PCBs are larger and complex because of low component integration [4][5][6] .
Due to hardwired logic the flexibility is low and a particular PCB circumvents to the specified requirements only. There is no room for change, as any modification in specification requires redesigning. The system parameters such as battery charging voltage, current are not programmable.
They do not have the ability to generate logs or have periodic automatic self-testing techniques. User interface is not that interactive or informative. The project is implemented in two stages: Hardware design: This required the designing of the microcontroller circuit along with the other hardware as ADC, LCD, RTC [7] and keyboard design [8] (Fig. 1). At the center of the whole system is the microcontroller 89LS8252 [9] . To enable it to read the analog signals an Analog to Digital converter ADC 0808 [10] is used. Necessary amplification is provided before the ADC.  To control voltages a 4 channel DAC 8426 [11] has been used.
The hardware designed is flexible and can be easily scaled to the requirements (Fig. 2). The microcontroller (89LS8252) used has an internal 2K byte EEPROM, 256 bytes RAM and 8K-code memory that is adequate to store program data, parameters and logs.
Keyboard is interrupt driven so the controller need not waste time in scanning keys. Whenever a key is pressed, an interrupt is received and the controller can read the pins to which each key is attached. It has a 16 X 2 character display interface with backlight for user interaction and to display system's health and parameters. Each individual pin of the controller can be programmed as input only, output only or made bidirectional eliminating the need of external digital read/write ports for control and monitoring. There are 5 on board LEDs, 3 off board LEDs and 3 relays that can be used to indicate various error conditions.
To measure certain analog signals that are in the range of 0-28 volts they are linearly scaled down. Other voltages as developed across the current resistances are in the range of mill volts; they are accurately amplified to be in a range of 0-5 volts, this is required so that they can be measured by the ADC. Further, each signal requires filtering to remove high frequency transients before feeding them to the ADC inputs for accurate measurement. The controller generates the clock to the ADC and this is software programmable. As such, a balance between speed and accuracy of ADC conversion can be achieved [12] .
The Real Time Clock has an internal battery backup, which enables it to maintain accurate time even if the system is switched off; which is a necessary requirement to maintain accurate error logs.
As the response time of the system is 250mses in the worst case, some additional hardware protection, an optocoupler has been used to shut down the battery charging mosfet when the battery is reverse connected (Fig. 3). The load mosfet is also controlled by a comparator which does not allow the load current to exceed the programmed limit in case of a short circuit until the controller recognizes the overload condition and shuts off the load.
Temperature sensor's (LM335) are used to measure system and battery temperature. It is a constant voltage source that gives an output of 1mV/°K. The output is amplified to make it operate from 0°C to 50°C. The controller can measure the temperature with 0.2°C accuracy. The system temperature is monitored to switch on the fan if the gets heated up.
The charging current of the battery is temperature dependent and charging is done in two steps, namely boost charge followed by trickle charge. The system continuously monitors the charging status of the battery and switches off the charger as soon as the battery gets charged to prevent overcharging. All this enhances battery life and performance.
Software Design: The software is written in C based KEIL COMPILER. The compiler converts the code written in C language into its equivalent 8051 machine code. The compiler also supports other microcontrollers of the 8051 family. Using this compiler the whole code has been written under different header files for easy understanding and enhanced clarity.
At power up it is the task of the software to program each controller pin and to initialize hardware devices. The RTC 12C887 [13] is programmed to generate hardware interrupt every 250ms, the service routine and control code is executed once. This limits the maximum response time of the system is 250ms.The controller has an in built watchdog protection which is programmed to reset the system in a maximum of 512ms, this restricts the system down time to 512ms.
At every interrupt of 250ms, the system looks for any errors and takes appropriate actions to enable safe and proper system functioning. The error messages displayed on the LCD are updated every 250ms. System parameters as voltages, currents and temperatures are refreshed after 1sec and not 250ms, so that the least significant digits does not change too frequently. It also displays the current time and date on the LCD. To brief the user about the various errors or emergencies there are upto 8 LEDs and 3 relays whose status is updated and each corresponds to different error conditions.
The software is responsible for updating the DAC output voltage so that battery charging current can be controlled according to the battery temperature. The DAC value for each temperature is stored in a look up table in the non volatile code memory. Similarly, the value of the maximum load current entered by the user can be controlled by the other DAC's output.
Each time an error is generated it is logged in the non-volatile memory EEPROM along with the time, date and nature of fault. The user can see these logs, even after power failure or system shut off. There can be upto 250 logs and the latest log is at 1 st index. If the logs are full, the new log entry is overwritten over the last entry in the in FIFO order. The EEPROM is also used to store various user programmable parameter values. The EEPROM write has been disabled through software after each write so that it is not corrupted accidentally at power up.
There are separate pages through which the user can set various parameters so that the operation of the system could be easily customized according to varied user requirements. There are ranges assigned to each of these updateable parameters and a responsibility of the software to ensure that the user does not enter out of bound values, accidentally or intentionally and harm the system.
The battery charging mosfet is switched on for 8 seconds, then the charger is switched off for 250ms and during this time battery voltage is read, the charger and battery fuse is checked. In case the battery voltage is found below some threshold value then the controller automatically shuts down the system. After every 12 hrs and if the system is running on mains, then the battery is put to load of 33 for 10 seconds and after that if the battery voltage is greater (Less) than threshold it is logged as good (Suspect). This test can also be initiated by the operator. One thing the software has to ensure is that if the mains go off then the battery testing 33 load has to be immediately removed as the output load is also transferred to the battery and it may burn the battery or heat it up.
The software multiplexes between -Calculation of ADC values to corresponding Voltages and Ampere, User commands, Keyboard reads, Updation of LED and relay status, Logging of errors, Display refresh at 250msec and Execution of control program.
Alarms: Various alarms are discussed below: OVER LOAD: It happens when load current exceeds the set limit. This is detected by measuring the ILOAD value of the ADC. The processor sends a 3sec OVLD signal to forcibly shut the load mosfet and thus stopping the current flow in the load.

AC ON /AC OFF:
If the input DC voltage is > or < than 25V. This can be detected by reading the V+ value of ADC.

TAMPER:
If the power supply is run with its case open. This is detected by the processor's read input TAMPER which is shorted to ground if the case is closed and is read as logic 1 when the due to the open case.

NO LOAD:
If load current at the output is less than 0.2A. This can be detected by measuring the ILOAD value of the ADC.

BATT OK:
If there are no battery related faults, namely from alarm no. 6 to 9. This can be detected by checking the condition flags.

BAT REV:
If the battery is reverse connected. This can be detected by reading the BATTREV* signal, which is made low by the optocoupler when the battery is reverse connected.

NO BATT:
If the battery is not connected. This can be detected by first switching off the charger by making BTFTG signal low and then if the value at the BATT+ signal of ADC is less than 3V it is recognized as no battery.
BAT LOW: If the battery voltage has fallen below 23 V. This can be detected by switching off the charger and if the voltage at BATT+ signal of ADC is less than 23V.

BT FUSE:
If battery fuse has blown due to flow of excessive current through the fuse. This can be detected by switching of the charger and if the battery is present then the voltage at the VFUSE signal of ADC should not be < than 3V.

CHG FLT:
If the battery is not being charged. Switch off the charger if the battery voltage is below its maximum voltage and the mains is present and fuse is ok. If the value at ILOAD is less than 0.05A the charger is termed as bad.

DDSC (Deep Discharge):
The power supply is automatically switched OFF at a battery voltage less than 21.2 V. This can be done when the AC is off and the battery voltage has fallen below 21.2V. The controller makes the DDSC signal HI and shuts down the voltage regulator.
Battery good/suspect: If the battery automatic test passes/fails. To do this the mains should be present. The processor sends a HI BATCHK signal, which switches on the battery check mosfet connecting 33E load across battery. The BATCHK signal is then made low and if the battery voltage is above cutoff it is termed as BATTERY GOOD else BATTERY SUSPECT.

CONCLUSION
It is a software controlled microcontroller based system, which makes it intelligent, independent of operator supervision and can adapt to a restricted set of changed requirements without any hardware change.
The system can log upto 250 faults and events with time and date of occurrence in a non-volatile memory. The manufacturer can verify from the logged events whenever the customer mishandles or fiddles with the power supply. This helps in resolving the issues related to providing guarantee or warrantee benefits.
It can handle most of the alarms by itself and adjust its parameters as the situation demands. Three relays provided indicate emergency fault conditions. Due to fast response of the system, the controller is able to shut down the power supply even in case of short circuit at the output of the supply.
The charging of the battery is temperature dependent, this enhances the battery life and its performance. Battery is automatically checked every 12 hrs and the result logged.

Limitations:
The system's reaction time is 250ms so in some cases additional protective hardware is required. * The system output voltage is not programmable. * The system cannot locate own hardware faults. * To ensure proper functioning of the system one has to make ensure that the DC voltage is kept greater than battery voltage, so that it can be charged properly.

Future scope:
The future work can be done on the development of software that makes the system selfdiagnostic, detecting damage of components in itself. E.g., Some controllers are there which generate an interrupt if the output of a pin does not match the sent value.The separate controller portion can be designed so that it can be put on to any supply and after programming various parameters in the controller any power supply could be controlled.