You are on page 1of 21

PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub




PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


My first semester at Cornell University ended late December (2013). I went back home to Dhaka,
Bangladesh for my winter break. During this period of time (late December to mid January), there was a
lot of political turmoil in the country due to which I could not leave the house a lot to spend time with
friends and family. So I ended up spending a lot of time in the house with electronics specifically on
two things: making some small projects with the PIC32MX250F128B (Microchip PIC32 series), and,
making an automatic voltage stabilizer circuit.

Ill talk about the automatic voltage stabilizer here. First Ill give a short introduction as to the motivation
behind me working on it before I go on to talk about the operating mechanism of the voltage stabilizer
and then the circuit diagram and source file.

At the end of the article, youll find the links to download all the files. Also do check out the Youtube
videos where I demonstrate the voltage stabilizer and its operating mechanism.

My dad knows a man named Kamruzzaman who worked under my dad (in electronics) for a very short
amount of time, doing stuff like soldering boards, etc. A few days after I went back to Dhaka,
Kamruzzaman called my dad and mentioned that he wanted to talk to my dad about something. We
invited him home, where he showed us a nice Chinese-made automatic voltage stabilizer circuit he was
trying to replicate albeit unsuccessfully. At the same time, he mentioned about his financial hardship
and asked for our help with designing the automatic voltage stabilizer so that he could have some good
financial support from this product.

In Bangladesh, the automatic voltage stabilizer (AC-AC) is a ubiquitous little piece of hardware that is
used to somewhat compensate for the varying line voltages (which while being advertised as 220V, can
on a given day vary between 170V and 240V in Dhaka and can vary over a larger range in other parts of
the country, due to the unreliable electrical grid).

This was a good learning opportunity, a great opportunity to gain some experience and most
importantly, a great way to help someone in need through doing something I truly love.

PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


And I got to it. I spent about somewhere between a day and a half, and two days thinking about how
best to go about designing this voltage stabilizer circuit, while maximizing performance and minimizing
build hassle. Then I built the test prototype on verroboard and tested it out. Kamruzzaman and I tested
the entire product through a long eight-hour testing process where I kept on refining and improving the
circuit until I achieved what I wanted a blend of the right amount of performance and a minimal
amount of build effort/hassle. After that, I designed the PCB for the board; it was a long night designing
the PCB fuelled by coffee (=P), I started at around 12 AM and finished at around 9.30AM after which
Kamruzzaman got the PCB made (that very day) and we performed the final testing of the product that
night. The circuit worked as expected and the project was complete.

Now, lets go on to talk about the technical part of the project. For this automatic voltage stabilizer, the
parameters were decided initially:
Output voltage must lie between 200V and 240V for all input voltages above 150V and upto
Input voltage range must be 150V to 260V, preferably wider.
Output frequency and waveform should be unchanged from the input frequency and waveform.
The voltage stabilizer must be inexpensive.
There should be no variable resistors in the final finished product. This was something
recommended by Kamruzzaman, as he said that sometimes, some of the variable resistors he
uses tend to drift in resistance slightly and this causes the circuit to become less reliable over
time. Although this seemed quite challenging (due to resistor tolerances in the voltage sense
section, tolerances in the diode forward voltages in the AC-DC rectification section, etc), I quite
liked the idea.
Based on the above initial design decisions, the final parameters/specifications are as follows:
Input voltage: 125V/135V (Ill explain this later) to 270V
Output voltage: >=200V and <= 240V for all input lying between 140V and 270V
Input and output frequency are the same
High cut feature at 270V
Low cut feature at 125V/135V
Input voltage is displayed (to the nearest voltage, 1V) on a 3-digit seven segment display
There are no variable resistors in the final finished product. However, this does not mean that
there is no variable resistor at all. A variable resistor is used to initially calibrate the circuit
before it can be removed from the circuit more on this later.
4 relays are used
The auto-transformer has a 0V/neutral connection and 4 additional tappings 165V, 190V, 215V
and 240V (notice that the tapping voltage ratings are in 25V increments)
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


The automatic voltage stabilizer is controlled by an inexpensive PIC 16F873A microcontroller. The
voltage conversion and control are done by using one autotransformer along with four relays (all control
signals are obviously generated by the microcontroller). The microcontroller senses the input voltage
and turns the relays on/off as required to provide an output voltage between 200V and 240V at all input
voltages between 140V and 270V. These relays work in conjunction with the auto-transformer to step
up or down the input voltage to provide the required output. Two of the four relays are used to switch
the input voltage connection between the 165V, 190V and 240V tappings, while a third relay is used to
switch the output voltage connection between the 215V and 240V tappings. The fourth relay is a
master on/off control relay this relay is always on when the automatic voltage stabilizer is operating
normally (this ensures that there is an output), but is turned off in the low-cut and high-cut modes to
disconnect the output.

The input AC voltage is first rectified to DC using a bridge rectifier. This is then filtered with a relatively
large high voltage capacitor to reduce/minimize the DC voltage ripple to obtain a constant smooth DC
voltage. This high voltage DC is then stepped down to a low-voltage DC level (that is within bounds
acceptable by the microcontroller). This is done using a simple resistive voltage divider circuit.

Initially, while I was testing the voltage stabilizer, I noticed that the input voltage sensing section was not
working satisfactorily. While the output low voltage DC was directly (linearly) proportional to the input
AC voltage for most input voltages, this (linear) proportionality was being lost at higher voltages. I
calculated that the power dissipation across the upper resistor (initially selected as 100k) was about
1.5W at high input voltages and had thus used a 2W resistor. However, the resistor heated up
excessively at the high voltages. This caused its resistance to drift and thus the sensing circuit was thus
not working properly. Later, the single 2W resistor was replaced with multiple lower power resistors in
series to decrease the power dissipation per resistor and thus the heat dissipation per resistor, in order
to ensure that the resistors did not heat up ensuring that the resistors had a constant resistance while
operating. This worked nicely. I further modified the voltage divider so that the resistances were no
longer 100k:1k (as initially selected) but (47k*6):3.3k. While the resistance ratio of both circuits is
approximately the same, the latter configuration further reduces the power dissipation, promising
better performance.

At the output of the voltage divider, two diodes were used to form a clamp circuit. In the event of
overvoltage presence at the voltage divider output, one of the diodes would become forward biased
and thus clamp the voltage to VDD + one diode forward drop. This would be about 5.7V for our circuit.
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


In case of undervoltage (too low negative voltages) presence at the voltage divider output, the other
diode would become forward biased and thus clamp the voltage to VSS one diode forward drop. This
would be about -0.7V for our circuit. While +5.7V and -0.7V inputs to the ADC are not ideal, these are
definitely better than the presence of high positive or negative voltages at the ADC input (which would
immediately destroy that portion of the microcontroller). Regular rectifier diodes were used in the
circuit, which is why I assumed the forward voltage drop to be +0.7V. To improve the clamping, schottky
diodes could be used instead of regular rectifier diodes. At the very small current level present, it is
reasonable to expect a diode forward voltage of +0.3V or perhaps even lower, depending on the diodes
being used.

While this is all good and well, there are two things here that could potentially disrupt proper operation
of the circuit: the input filter capacitance and the input impedance for the PIC ADC (the voltage divider

If too large an input filter capacitance is selected, it will discharge slower and give poorer response to
quick voltage drops. Thus, a value of the capacitance should be used such that the voltage ripple is low
but the response to quick voltage drops does not suffer too much. Capacitances of 10F, 22F and 33F
were tested and all gave good results. 22F seems to be the match here providing a good compromise
between response to quick input voltage drops and DC voltage ripple.

To ensure that the ADC measured the low-voltage DC level properly, a capacitor was placed at the
output of the voltage divider section such that this would act as a parallel capacitance to the internal
one (of the ADC). Furthermore, the ADC sampling time was chosen to not be too quick so that more
accurate results can be obtained. The default settings of the mikroC PRO for PIC ADC library support this

There is a switch in the circuit for calibration. When this switch is shorted and the microcontroller is
reset, upon startup the microcontroller enters calibration mode. I have mentioned above that there is
no variable resistor in the final circuit but that one would be needed for calibration. The reason a
variable resistor would be needed in the first place, is that the output of the voltage divider will not
always be the same ie, from circuit to circuit, due to variations in component values and parameters,
the output voltage will be the same. The main reasons for this are the tolerances in the resistances, the
inconsistencies in diode forward drop voltages and the discrepancies from part to part. To compensate
for this, traditionally, a variable resistor is used as part of the voltage divider. The resistance is altered to
compensate for the different errors and discrepancies and thus provide the expected output.
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


Now, sometimes, the value of the variable resistance may not remain constant even when the wiper
position is unchanged. Thus, in this circuit, where reliable and consistent output over long periods of
time is a necessity, it was decided that a variable resistance will not be used in the final product at
least not one on which the circuit depends while running.

So, in this circuit, I have provided the calibration mode. Upon entering the calibration mode, the
microcontroller displays what it thinks is the input voltage. The real input voltage is measured with a
voltmeter. Then, the variable resistance is changed and accordingly, the microcontroller displays a
changed voltage. In the software, I have done some floating point mathematics where the ADC result is
converted to an AC voltage level. In this calculation, there is a constant with which the entire expression
is multiplied. Upon changing the resistance of the variable resistor in calibration mode, the value of
the constant is changed as well, and this is reflected in the voltage displayed on the three digit seven
segment display. When the calibration switch is opened, the microcontroller exits calibration mode
and proceeds to save the value of this constant in its internal memory in the EEPROM. Since a floating
point value cannot be saved in the EEPROM, the floating point number is multiplied by 10000 to obtain a
value that is smaller than 2
, meaning that this value can then be saved in two memory locations the
high byte in one and the low byte in the other. Once the microcontroller exits calibration mode it
cannot reenter calibration mode unless it is reset, upon which calibration may again be performed.

Every time the microcontroller starts up, it checks to see if it has been calibrated. This is understood
from the value written to a specific EEPROM location this value is written when the calibration
constant is saved onto the EEPROM. Thus, if calibration has already been done and the calibration
switch is not pressed, the microcontroller retrieves two bytes of data from two EEPROM locations and
puts them into one 16-bit value. Now, when this value is divided by 10000, the corresponding floating
point value is the original required calibration constant. This is used by the microcontroller in all further
voltage calculations and interpretations.

When the microcontroller starts up for the first time, it waits for the calibration switch to be pressed.
Once the calibration switch is pressed and calibration is done, the calibration switch is opened and the
microcontroller saves the calibration constant in the EEPROM and proceeds to carry out its required

Once proper calibration has been completed, the variable resistor and the calibrate switch may be
removed from the circuit, if desired. This will not affect the performance of the circuit, unless of course
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


the user wants to recalibrate at any time. This is what I initially meant when I mentioned that the final
product has no variable resistor in it.

The input switches between the 165V, 190V and 240V transformer tappings while the output
switches between 240V and 215V tappings.

The transformer is a simple autotransformer with the turns ratio 165V: 190V: 215V: 240V along
with an auxiliary winding for powering the circuitry.

PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


The microcontroller runs off of a 4MHz external crystal oscillator. An external crystal oscillator has been
used since the PIC 16F873A lacks an internal oscillator, which would have been sufficient since there is
no precise time-critical aspect to the automatic voltage stabilizer.

The microcontroller is powered off of a regulated 5V DC supply. The autotransformer has a 12.5V
auxiliary winding. The voltage at this winding will remain around 12.5V and not vary too much with the
input voltage variation due to the switching of the relays and the output voltage regulation which acts to
regulate the voltage across this winding too. This low voltage AC is rectified to DC using a bridge rectifier
and then filtered with a bulk capacitance. You will also find that decoupling/bypass capacitors have also
been used. This filtered DC is fed to the input of a 7805 linear voltage regulator. Since the current draw
is not too high, a linear regulator such as the dirt-cheap ubiquitous 7805 is sufficient and no fancy
switching regulator is required (I still do recommend switching regulators, cost permitting, especially
with large current outputs and/or large input-output voltage differences). It is critical to use at least one
decoupling capacitor (which should be placed as close to the microcontroller as possible) and you can
see that it has been used.

The regulated filtered DC voltage that is fed to the 7805 input is also used to power the relays. However,
this voltage is not directly provided as the voltage is a tee-bit higher than what the 12V rated relays
would probably like. Thus, the voltage is dropped by approximately 2.8V by passing this input voltage
through four regular rectifier diodes in series.

Each relay switching is controlled by the microcontroller. However, since the microcontroller cannot
provide sufficient current to drive the relay coils, transistors are used to amplify the current and drive
the relays from the required signals provided by the microcontrollers. The configuration is the simple
common emitter mode. Each relay coil also has in parallel with it an anti-parallel diode that is used to
catch or rather bypass the inductive kickback that occurs whenever the current flow through the
relay coil is stopped, ie when the driving transistor is turned off.

Now lets move on to the seven segment display. As you may have already guessed (and it should be
quite apparent, given that Im using a 3-digit segment), the decimal points in the display are not used.
Thus that leaves us with seven LED segments (conventionally referenced as segments A through G) that
needed to be driven. Additionally, to minimize the number of pins required to drive the seven segment
display, the three digits are turned on one after the other. However, this is done so quickly that to our
eyes, it seems that the three digits are always turned on. I have chosen to use a 167Hz refresh rate
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


meaning that the entire display is refreshed 167 times a second once every 6 milliseconds. Each digit is
turned on, kept on for 2 milliseconds and then turned off before the next display is turned on and so on.

Since the microcontroller output drive current is limited and we want optimum brightness (and thus
drive current) of the seven segment display, seven transistors were used in the common collector (also
known as emitter follower) mode to drive the seven LED segments in the display. Additionally, three
transistors were used to provide or disconnect the supply to the individual digits, as required for
continuous subsequent switching between the digits.

Upon start-up, the microcontroller enters delay mode. This is when, for a specified amount of time
(that is pre-programmed), there is no output. There is a switch that is used to select between short
delay (default mode, when switch is open) and long delay (when switch is closed/pressed). These delay
times are pre-programmed, and I have chosen to use 2 seconds for the short delay and 3 minutes for the
long delay. These, as far as I know, are the standard times present in the voltage stabilizers available in
the market. The delays are set by simple software loops that do nothing such delay functions are
provided in the mikroC PRO for PIC library.

There are three LEDs in the circuit that are used to provide visual feedback, besides that already
provided by the seven segment display. These LEDs are used to indicate:
1. When the delay mode is on
2. When the microcontroller is operating in low-cut or high-cut mode
3. When the microcontroller is operating in normal mode

PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


PICTURES (because nothing is complete without pictures):
(The circuits on verroboard are from the test stage. You can see the PCB at the end.)

PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


voltage is
218V for
an input
of 175V
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


voltage is
220V for
an input
of 154V
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


You can see the PICKIT3 and my laptop. This really is the entire test bench for this project.
Output voltage is 218V for an input voltage of 153V
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


PCB with the display board mounted. Output voltage is 201V for an input voltage of 138V
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


look at
the PCB
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


Thats me calibrating the PCB you can see my dad and Kamruzzaman as well
PIC16F873(A) based automatic voltage stabilizer Syed Tahmid Mahbub


You can download all the files related to the voltage stabilizer:

PCB images:

Making the automatic voltage stabilizer was a great experience it was fun making it and it was
also a good learning experience. Ive shared all the files in hopes that itll help you make a
voltage stabilizer yourself. Do let me know what you think! Leave your comments and feedback
in the comments section. Dont forget to look at my Youtube videos where I demonstrate the
voltage stabilizer.