You are on page 1of 29

# AUTOMATIC POWER FACTOR CONTROLLER USING MICROCONTROLLER

The thirst for new sources of energy is unquenchable, but we seldom realize that we are wasting
a part of the electrical energy every day due to the lagging power factor in the inductive loads
we use. Hence there is an urgent need to avoid this wastage of energy.

Before getting into the details of Power factor correction, lets just brush our knowledge about
the term power factor. In simple words power factor basically states how far the energy
provided has been utilized. The maximum value of power factor is unity. So closer the value
of P.F to unity, better is the utility of energy or lesser is the wastage. In electrical terms Power
factor is basically defined as the ratio of the active power to reactive power or it is the phase
difference between voltage and current. Active power performs useful work while Reactive
power does no useful work but is used for developing the magnetic field required by the device.

Most of the devices we use have power factor less than unity. Hence there is a requirement to
bring this power factor close to unity. Here we are presenting a prototype for automatic power
factor correction using PIC Microcontroller.

Comparator Section
The 230 V, 50 Hz is step downed using voltage transformer and current transformer is used to
extract the waveforms of current. The output of the voltage transformer is proportional to the
voltage across the load and output of current transformer is proportional to the
current through the load. These waveforms are fed to Voltage Comparators
constructed using LM358 op-amp. Since it is a zero crossing detector, its output changes during
zero crossing of the current and voltage waveforms. These outputs are fed to the PIC which
does the further power factor calculations.

Microcontroller Section
PIC 16F877A microcontroller is the heart of this Automatic Power Factor Controller, it find,
displays and controls the Power Factor.. To correct power factor, first we need to find the
current power factor. It can be find by taking tangent of ratio of time between zero crossing
of current and voltage waveforms and two successive zero crossing of voltage waveform.
Then it displays the calculated power factor in the 162 LCD Display and switches ON the
capacitors if required.
Correction Section
When load is connected the power factor is calculated by the PIC microcontroller. If the
calculated power factor is less than 0.9 then the relay switches on the capacitor. The relays
are switched using ULN2003 which is basically a driver IC. ULN2003 consists of seven
DARLINGTON PAIRS.
The current lead in capacitor compensates the corresponding current lag which is usually
present in loads. Hence the phase difference between the current and voltage will be reduced.
Power Factor Correcting capacitor connected parallel to load through relay, if the relay is
energized by microcontroller it will connect the capacitor parallel with load, if relay
deenergized it will remove the capacitor from the load. When the resistive load is on the power
factor will be near to unity so the microcontroller doesnt energize the relay coil. When the
inductive load is on the power factor decrease now the microcontroller energize the relay coil
in order to compensate the excessive reactive power. Hence according to the load the power
factor is corrected.

MikroC Program

## //LCD Module Connections

sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
//End LCD Module Connections
int powerFactor()
{
int a=0,b=0,t=0,x=0;
float tm,pf;
TMR1L=0;
TMR1H=0;
do
{
if(PORTA.F0 == 1)
T1CON.F0 = 1;
else if(PORTA.F0 == 0 && T1CON.F0 == 1)
{
T1CON.F0 = 0;
break;
}
}while(1);
a = (TMR1L | (TMR1H<<8)) * 2;
TMR1L=0;
TMR1H=0;
do
{
if(PORTA.F0 == 1)
{
T1CON.F0=1;
if(PORTA.F1==1)
{
T1CON.F0=0;
break;
}
}
}while(1);

b = TMR1L | (TMR1H<<8);
tm = (float)b/a;
pf = cos(tm*2*3.14);
x=abs(ceil(pf*100));

return x;
}

void main()
{
char c[]="0.00";
int a,b,d,x,f,e;
float tm,pf;

Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

## ADCON1 = 0x08; // To configure PORTA pins as digital

TRISA.F0 = 1; // Makes First pin of PORTA as input
TRISA.F1 = 1; //Makes Second pin of PORTA as input
TRISD.F0 = 0; //Makes Fist pin of PORTD as output
TRISD.F1 = 0; //Makes Second pin of PORTD as output

while(1)
{
a = powerFactor();
Delay_us(50);
b = powerFactor();
Delay_us(50);
d = powerFactor();
Delay_us(50);
e = powerFactor();
Delay_us(50);
f = powerFactor();

x = (a+b+d+f+e)/5;
c[3]=x%10 + 0x30;
x=x/10;
c[2]=x%10 + 0x30;
x=x/10;
c[0]=x%10 + 0x30;

Lcd_Out(1,1,"Power Factor");
Lcd_Out(2,1,c);

if(x<90)
{
PORTD.F0 = 1;
PORTD.F0 = 1;
Delay_ms(2000);
}
else
{
PORTD.F0 = 0;
PORTD.F0 = 0;
}
Delay_ms(250);
}
}

The function powerFactor() will find the current power factor by using the Timer 1 module of
PIC 16F877a. Power Factor may be fluctuating, so to avoid it we will find power factor more
than one time and its average is taken.

## Note: This is only a prototype of Automatic Power Factor Controller, for

practical implementation you may need to make some modifications in the program and circuit.

https://electrosome.com/automatic-power-factor-controller-using-microcontroller/

fatih

i don t know why this program did not compile. can i know what exact version of
mikroC it has written for. thank you?

Ligo George

Stefaev

## author put mistakes in the source code.

Ligo George

The code is correct.& we made this project with above code.. ,for the practical
implementation you need to modify the power factor correcting section of the code.
as this is only a prototype

Stefaev

## first error: missing line sbit LCD_EN at RB5_bit;

compiler (mikroC PRO for PIC 6.0.1) says:

## 59 404 c Identifier redefined automatic-power-factor-controller-using-

microcontroller.c
77 318 Assigning to non-lvalue automatic-power-factor-controller-using-
microcontroller.c
81 324 Undeclared identifier e in expression automatic-power-factor-controller-
using-microcontroller.c
83 324 Undeclared identifier e in expression automatic-power-factor-controller-
using-microcontroller.c
83 317 Operator is not applicable to these operands automatic-power-factor-
controller-using-microcontroller.c
83 317 Operator is not applicable to these operands automatic-power-factor-
controller-using-microcontroller.c
60 1163 Variable tm has been declared, but not used automatic-power-factor-
controller-using-microcontroller.c
60 1163 Variable pf has been declared, but not used automatic-power-factor-
controller-using-microcontroller.c
0 102 Finished (with errors): 17 mai. 2013, 12:50:37 automatic-power-factor-
controller-using-microcontroller.mcppi

Ligo George

## Sorry, it was a mistake while coping the code..

all where simple C syntax errors
It is corrected now..

Ligo George

## Hello, Mistakes in the code is corrected

Stefanev

i not understand:

## TRISD.F0 = 0; //Makes Fist pin of PORTD as output

TRISD.F1 = 0; //Makes Second pin of PORTD as output

So PORTD is output

## i simulate in proteus and program remain in endless loop:

do
{
if(PORTD.F0 == 1)
T1CON.F0 = 1;
else if(PORTD.F0 == 0 && T1CON.F0 == 1)
{
T1CON.F0 = 0;
break;
}
}while(1);

how to trigger the timer1 if the inputs are PORTA0 and 1 ???
Ligo George

## Sorry, it is also a mistake..

Actually we done this project by connecting current transformer inputs to PORTD,
but changed to PORTA while drawing circuit for making the circuit diagram simple..
Thanks
Also the power factor correcting section of this code is not good We checked this
project by adding a switch to capacitor, such that change in power factor can be seen
on the LCD by ON and OFF the switch

Kalpesh

What is the value of Current Transformer ? Which Current Transformer should i use ?

Ligo George

## It will depends up on the max current required for your application..

jun

Hi sir I understand the source code,can you give me the sample current ratio or
specification detail of current transformer

Ligo George

dark

sir which compiler shuold i use for compiling currently i use mikroc pro for pic v6.0.0
but they get an error

Ligo George

## What is the error??

sunny

is this a prototype?
Ligo George

## The above is an academic project made by ECE students and it is working

for demonstration
but for practical implementation, I think you need to make some more changes

karthik

Current Transformer and voltage transformer can be replaced with any other
electronic circuit its possible ..

Ligo George

## Yes you can replace it with current sensor.

voltage transformer is an ordinary transformer.
It is better to use transformer as it isolates our low power circuits from high power
ac.
I think the current sensors have internal transformer

karthik

used its ..

karthik

## how to modify this circuit in 3 phase supply.? in 3phase supply compare

all the phase current and all phase voltage .. how to change this
circuit..

karthik

Ligo George

## Sorry, I dont know how to measure power factor in 3 phase circuits

Ligo George
I think.. no modification is needed in the circuit but you should modify the
program It is my logic I have tested it only once so you should modify the
program by conducting some practical tests and calibrating this project..

mehmet iek

Brother, is int powerFactor() a kind of interrupt? Can you explain it or give some
documants?

## Conguralation and thanks for share!

elektrik.mehmetcicek@gmail.com
Elektrik engineer.

Ligo George

No, it is not a kind of interrupt.. it is a function to evaluate power factor using internal
timer modules of pic microcontroller..

naim

me?send it to my e-mail (naim.zainodin@yahoo.com)

naim

what is the value of power factor correction capacitor at the ac main output?

naim

Ligo George

Ligo George

## It should be calculated according to your requirements..

Ligo George

The complete project details including the project files are shared above..
RyRS

Ligo George

## Azim Uddin Chowdhury

I have an Arduino micro-controller & I creating a Power factor meter. So i need some
help my brothers..

Ligo George

I havent any experience with arduino programming..

Mithun

Ligo George

## Did you provide the inputs (from comparators to pic) in proteus??

RyRS

Would you mind to share or send to email the hex file perhaps? My mikroc pro for pic
6.0 seems giving an hex file size 1kb only after I compile the code. Thank you.

Ligo George

## Give me your mail id??

Note : This only a prototype only for the sake of demonstration..

RyRS

A few of modification of circuit and using ccs c compiler ccp(capture) example, i got
a power factor based on comparison between two signal using proteus simulation.
Hope you dont mind that i did some modification on your circuit. I wont share my
email to public, so thank you for giving an idea about measuring power

factor.

Ligo George

OK..

Shaik Aryan

Ligo George

## Hello, we arent now providing pcb designing service..

Cabir

hi all
this circuit sucks
The in and outputs of uln2003 are on the wrong side

Ligo George

Sorry for the inconvenience caused It is corrected.. Please try after clearing your
cache..

dalwinder singh

tm = (float)b/a;
pf = cos(tm*2*3.14);
x=abs(ceil(pf*100));
can you elaborate this function i.e. what (a) and (b) shows

dalwinder singh

## are you giving training on pic online?

Ligo George
It is the measured timer value of current and voltage waves

Ligo George

dalwinder

dalwinder

## a is the pulse width or wave length of pulse

Ligo George

Wavelength of pulse..

Ligo George

## Sorry for the late replay..

Currently we arent providing any training.. I am ready to provide training
personally But I am not good in speaking English.

Giscard Hangi

Hi , I am working on a similar project but for a 3 phase system. I would like to know
how did you manage the problem of linearity and phase displacement of the CT in
particula?

kaushal

## hi can you please send me the corrected code?

my id is: kaushal_indus@yahoo.com

Can you please mention in my email, what current sensor and what rating voltage
transformer to use

Thank you

kaushal
can I run this code in mplab

vohsty

Hallo sir
Please send me the corrected code because when i load his one on proteus nothing
happens although it compiles without errors
my email is vohsty@gmail.com

juhi

## How to calculate the value of the capacitor bank

mughees ahmed

Please send me the corrected code because when i load his one on proteus nothing
happens although it compiles without errors
my email is mughesbhatti.ahmed@gmail.com

## Sandun Dhammika Perera

compiler crazy about where does that Lcd_init(); or Lcd_write() came from?

## Sandun Dhammika Perera

May be you could have longer delays.250ms is not enough at all. Since the power
factor does not change quickly you could have delay at least 10seconds. Or give the
user a configuration option to configure it.

ahmedduaa

hey , please can you send me the file of this project i need it for my collage
my email: nivsdark@yahoo.com

faheem

## plz give me project detail

Nauman Safdar
Did Some one practically implemented this? i tried but the display value changes

Jigar

## can you please send me the corrected code on rockstar_jigar@hotmail.com

arslan rao

i don t know why this program did not compile. can i know what exact version of
mikroC it has written for. thank you?
Please send me the corrected code because when i load his one on proteus nothing
happens although it compiles without errors
my email rao_arslan56@yahoo.com

arslan rao

## please sir send me correct code..here

rao_arslan56@yahoo.com

juhi

## SEND CORRECTED CODE PLSS VERY URGENT

juhi.sunshyn@gmail.com

naim

what type of current transformer did you used?i mean the name of the transformer or
no or something else that i can find and buy it

anwar

hi im doing the project with atmega 16 . i have made the required changes in this code
to be compatible with atmega. the code compiles without error but nothing happens
on proteus. kindly help me out with this. i have to submit my project very soon

Angelo

## Sir can I ask complete code? please send to email: microsphere08@gmail.com

really need for a project.

Regards

aregawi

## could send me the corrected cod my sir?

aregaw145@gmail.com

Stefan

## I said before this code is a joke, does not work.

Monjur Morshed

bro,,,i worked with the pf calculation part only,,,& the code compiles fine,,,,,,,but
when i tried it in proteus it gives error & Lcd is blank

lous mow

ahsan

did you get the rating of current transformer and potential transfortmer ?

ahsan

## Hey please tell me where i can find current transformer in proteus ?

ahsan

Hey please tell me where i can find Current transformer in Proteus software ?

Ligo George

Ligo George

Ligo George

## abs() takes absolute value

ceil() rounds to nearest integer..

Ligo George

Check clock frequencies in mikroc project setting and pic properties in proteus.

Ligo George

It is not a joke man. .It is 100% working but it needs improvement.. in the power
factor correction section..

Ligo George

Above program is correct.. but it needs improvement in the power factor correcting
section..

Ligo George

I have only the above code.. It is written for MikroC Pro compiler..
It is working code.. only thing is it need improvement in the power factor correction
section..

Monjur Morshed

## both clock frequencys are samebtw i am not using CT & PT

Ligo George

If the clock frequencies are correct in mikroc project settings and pic properties in
proteus..
Check the PIC used in mikroc project settings and proteus are same.. PIC 16F877A..

## Note : 16F877 and 16F877A are different microcontrollers..

fazz
Hi mr. ligo,appreciate if you able to send the full correct code to my
email palin_81@yahoo.comneed to do for my house use.

Ligo George

## I have only above code.

ahsan

what rating you use of current transformer and voltage transformer please reply. i m

Ligo George

For voltage transformer you can use a 230/3V, 500mA transformer available in the
market
For current transformer.. you can wind depending on your requirements.. provide a

ahsan

alright thank you so much, please guide me can i use normal step down 12v, 2A
transformer in series for current measuring in lm358 ?

ahsan

## Hey Ligo please send me the corrected code too.

ahsanahmedsid@gmail.com

ahsan

## can you send me the correct of APFC.

at ahsanahmedsid@gmail.com

bdzah

## hie can i have the correct code please. bdzahg@gmail.com

Ligo George
We have no other codes.

Santosh

hi sir
i dont know how to create a hex file
i am doing the project in protecus???
is this good on going for that or whether i need to change the software ???
i dont how miroC works?????? can we build this same circut over there

santosh

## did use multisim for this project???????

Ligo George

MikroC is a compiler while proteus is a simulator.. You can compile your code with
MikroC to generate hex file.

Ligo George

Jaya Krishna G

Ligo George

## Design the capacitor ratings as per your power factor requirements..

ahsan

Ligo please help me, when i running this code in simulation it give an error of stack
underflow please correct this error or send me the correct code its not working.
please i have to submit my project at the end of this month.

Ligo George
Hello,
The above code is correct, it will work. only problems is that power factor
correction section needs improvement There is no errors..

I think, it is not good to simulate projects like this. Try in real hardware..

ahsan

Okay Mr.Ligo thanks for positive response. my hardware its almost ready i hope it
will work.

Fantan Moja

the code compiled successfully, just be smart on how you go about it in Micro C pro.

pranay

I have tried this programme but it isnt working with proteus simulation. Can you
send me hex file for this programme?
My email id is: pspatel2424@gmail.com.

Ligo George

You might not be able to simulate above project in proteus properly Try in real
hardware..

Ligo George

## use a 3V output transformer.

Ligo George

use a 3V transformer.

Ligo George

## Shivendra Kr. Sahu

ur mean to say both rating (potential transformer & current transformer) are equal
(same) ?

## when i Compiled it . error as

error: 0 434 Demo Limit Demo Limit
error: 0 102 Finished (with errors): 23 Dec 2014, 01:25:07 Automatic Power Factor
Controller.mcppi

## its means generated hex file limit exceed to 2k .

so pl post it hi-tech or xc8 ver. code

Ligo George

Ligo George

## Shivendra Kr. Sahu

thats what Im asking is that the op voltage of the both should be equal .

Ligo George

Output voltage always depends on the input I said about maximum / rms.

noufal
Plz send hex code
noufal9526@gmail.com

Ligo George

rajesh

## what should the rating of CT and PT

kaustubh

will u please tell about the CT and PT ratings, i mean their turn ratio and current
rating

Ligo George

## It depends on your applications You can use transformers with 3V secondary

voltage..

Ligo George

You should wind transformers depending on your current and voltage ratings
Design with 3V secondary voltage.

Ligo George

These are built in library functions of MikroC Pro compiler they dont require

habtamu

## can you give more explanation on the program please

Ligo George

Basic function is explained in the article itself. The configuration of Timer 1 is not
explained.. it differs from microcontroller to microcontroller.

ibrahim
Please send me a correct code..imce050054@yahoo.comtq

Udit Jain

## Please send me the corrected code

@udit.jain151@gmail.com

Ligo George

## Sorry we dont have any other codes.

habtamutolasa

can you help me with pic microcontroller based ic tester for 74 series
here is my email habtamutolasagc@gmail.com

sir whenever i tried to built the programme its showing demo limit in micro c pro
so iam not able to generate hex file because my compiler is a demo version so
plz send me the hex file or suggest wat to do to generate hex file .if u tel me to buy
original version of micro c pro its costlier..i cant afford tat much moneyy so kindly
give me some other option

Noor Ahmed

## plz send me hex file

anoor7214@gmail.com

mukesh gupta

Ligo George

## It is not a Syntax Error

It is MikroC Demo Limit error

Ankur Chakraborty
The program is only showing black boxes on the LCD when done on hardware..what
to do? I checked all my connections

Ligo George

## 1. Verify All Connections.

2. Adjust the Contrast of LCD
3. Make sure that PIC Program is running, check crystal, power supply etc.

vikas

## current transformer is not avilable so as well as pulse wave genrator use it

Bruno TARANTO

Nice project! My friend, i have to do this work using pic18f4550, could you help me
send me the files to ease my work? Please? btaranto@gmail.com Thank you very
much!

Ligo George

Current transformers are commonly available now a days. You can even get it online.

Ligo George

zeeshan akbar

zeeshan akbar

Ligo George

## Sorry, currently we dont have any files of this project.

agbor roland
hello please sir what is the reference values of the voltage and current transformers on
the power factor correction circuit you can reply me
on agborroland99@gmail.com thanks sir.

agbor roland

sir please tell me the reference values of the current and voltage transformers

avinash

avinash

Upload the hex file of this code this would be easier to dump to PIC

Rahul Raju

id rahulraju7633@gmail.com

Karthick Selvan

## The secondary winding of the transformer is connected to LM358. transformer out is

AC is this affect LM358.Or it required any rectifer.please tell me.

Ligo George

No need of rectifier. The comparator will compare and will produce pulses.

Karthick Selvan

thanks sir and i have another doubt is this program corrects the pf automatically.

swapnil pandey

Hey can u tell the rating of ct for above circuit . I just need a reference as to by what
value current should be reduced???

Ligo George
No you need to improve that section. It is not completely correct. But reading section
is correct.

Ligo George

You can use a CT depending on the maximum current required for your load.

Karthick Selvan

## if u dont mine please give me an idea.

Mouin Zwayni

sai teja

sir! im getting difficlty in running the program! can u plz check and send me the exact
code?
mail : eknvsteja6594@gmail.com please! a kind request!

Ligo George

You need to select proper power factor selection capacitors depending on your load
requirements.
You need to improve power factor correction mechanism of the program.

Ligo George

There is no download for this. You can take the program above.

nanjegowda

## Sir plzzz tell how to burn this code to controller

And how to create .hex file

nanjegowda

iam not able to generate hex file because my compiler is a demo version so plz send
me the hex file or suggest wat to do to generate hex file .if u tel me to buy original
version of micro c pro its costlier..i cant afford tat much moneyy so kindly give me
some other option
mail id: Nanjegowdacrazy@gmail.com

nanjegowda

## Sir plzz can u share me the .hex file Email.Id:- Nanjegowdacrazy@gmail.com

melese

pleas send me the materials and theire properties that you use on proteus software on
melesedegaga2008@gmail.com i make mistak when i constract the circuit.

Ligo George

You can use the compiler MikroC Pro for doing it.

Ligo George

We are not providing the hex file as the project is not complete. Its power factor
measuring section is correct, but correction is not correct.

Ligo George

Sorry, we dont have the hex file. You can compile and generate it.

Ligo George

## You can generate it using MikroC Pro compiler.

Tapiwanashe Augustine

Hey man thanks for the code, got it kicking on Proteus 8. Have had an exciting past
day since i couldnt use microc (2k limit). So I translated your code into Hitech C.
And just a pointer,,,,, ADCON1 = 0x06 if you want to make all of PORTA pins
digital input. Again, thanks for sharing, really helpful you guys.

Uzer

## Lots of error when I complied program Im micro c pro

Saurabh
can you please send me your simulation in Proteus. Doing this project as my minor
and need help asap.

Tapiwanashe Augustine

email me at tapiwa.augustine@gmail.com

Ligo George

Ligo George

## It will work fine in MikroC Pro.

Ligo George

I didnt do any simulation for this project. Only tested in real hardware.

shaker

shaker

i don t know why this program did not compile. can i know what exact version of
mikroC it has written for. thank you?

shaker

in the last of the code write demo limit ? what is mean how can i remove this error

Rahul Wagh

please send me your hitech compiler code, i want this code because i use hitech
compiler and mplab IDE rahulwagh78@gmail.com

Rahul Wagh

sir, i try but not propery work, please send corrected code

vignesh

## I am Vignesh I have error in float tm,pf;

melkamu

an error of stack underflow please correct this error or send me the
correct code its not working.

melkamu

## how to improve power factor correction using pic 8051

melkamu

an error of stack underflow please correct this error or send me the
correct code its not working and how to improve power factor correction using pic
8051

Ardian

## This is only a prototype of Automatic Power Factor Controller, for practical

implementation you may need to make some modifications in the program and circuit.

Vaibhav Chauhan

## sir can i get the simulation file for this project

kindly send it to vaibhavchauhan269@gmail.com