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/
COMMENTS
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
Use MikroC Pro
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
please share your hex and coff file
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
It should be selected according to your current/load requirement
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
voltage transformer is an ordinary transformer ok . it step down 12V ,1A. transformer
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
what modifications is need in this program and circuit.
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!
[email protected] 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
im doing this project for my final year project.can you please share this project with
me?send it to my e-mail ([email protected])
naim
what is the value of power factor correction capacitor at the ac main output?
naim
what is the rating of current tranformer and voltage transformer?
Ligo George
Use them .. depending upon the application
Ligo George
It should be calculated according to your requirements..
Ligo George
The complete project details including the project files are shared above..
RyRS
Excuse me sir, but I didnt see any download link are shared above. Thank you.
Ligo George
Sorry, we have only that program for this project..
Azim Uddin Chowdhury
I have an Arduino micro-controller & I creating a Power factor meter. So i need some
help my brothers..
Ligo George
What is your doubt??
I havent any experience with arduino programming..
Mithun
Program compiled but not working in simulation in proteus.
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
interfacing of dc motor with 8051.. HOW DO I GET THE CIRCUIT LAYOUT TO
MAKE PCB OF IT.. please help
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
Online training means??
dalwinder
I need pic programming training by Google talk or Skype
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:
[email protected] 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 [email protected]
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 [email protected]
Sandun Dhammika Perera
There should be some header files. See your code does not include any header files ,
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: [email protected]
faheem
plz give me project detail
Nauman Safdar
Did Some one practically implemented this? i tried but the display value changes
randomly for the same load
Jigar
can you please send me the corrected code on [email protected]
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 [email protected]
arslan rao
please sir send me correct code..here
[email protected] and kindly also specified the version of microC pro..Thankyou
juhi
SEND CORRECTED CODE PLSS VERY URGENT
[email protected] 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: [email protected]
really need for a project.
Thank you very much
Regards
aregawi
could send me the corrected cod my sir?
[email protected] 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
x=abs(ceil(pf*100)); can u explain about this??
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
It is not good to simulate these projects in proteus..
Ligo George
It depends on your requirements..
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 [email protected] 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
waiting for your concideration.
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
secondary voltage about 3V.
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.
at my email adress
[email protected] ahsan
can you send me the correct of APFC.
at
[email protected] bdzah
hie can i have the correct code please. [email protected]
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
Yes, you can use it.
Jaya Krishna G
sir . please send me the two capacitor ratings .
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: [email protected].
Ligo George
You might not be able to simulate above project in proteus properly Try in real
hardware..
bhaskar
what are ratings of potential ¤t transformers
bhaskar
what is rating of current transformer
Shivendra Kr. Sahu
pl tell me here whats its conflagration bit setting ?
Ligo George
use a 3V output transformer.
Ligo George
use a 3V transformer.
Ligo George
Use default mikroc settings.
Shivendra Kr. Sahu
ur mean to say both rating (potential transformer & current transformer) are equal
(same) ?
Shivendra Kr. Sahu
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
No, I said the output voltage rating of both transformers.
Ligo George
Sorry, I dont have Hi-Tech or XC8 codes.
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
[email protected]
Ligo George
You can build the above code to generate hex.
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
header files..
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 [email protected]
Udit Jain
Please send me the corrected code
@
[email protected] 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 [email protected]
madhu
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
mail id: [email protected]
Noor Ahmed
plz send me hex file
[email protected] mukesh gupta
sir i am getting these errorswhat to do
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? [email protected] Thank you very
much!
Ligo George
Current transformers are commonly available now a days. You can even get it online.
Ligo George
Sorry, I dont have this project with any other microcontrollers.
zeeshan akbar
plz send me the proteus file of this project
zeeshan akbar
@@lijoppans:disqus sir plz send me the proteus version of this project
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 [email protected] thanks sir.
agbor roland
sir please tell me the reference values of the current and voltage transformers
avinash
Please send hex file
avinash
Upload the hex file of this code this would be easier to dump to PIC
Rahul Raju
Iam doing this project now can you please send more information about this project
and the program i really dont have much program skill so please help my mail
id [email protected]
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
how i made corrections or improve that sections.
if u dont mine please give me an idea.
Mouin Zwayni
how to download this project
sai teja
sir! im getting difficlty in running the program! can u plz check and send me the exact
code?
mail : [email protected] 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: [email protected]
nanjegowda
Sir plzz can u share me the .hex file Email.Id:- [email protected]
melese
pleas send me the materials and theire properties that you use on proteus software on
[email protected] 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 [email protected]
Ligo George
Thanks for the feedback.
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
Sir can I ask complete code? please send to email: [email protected]
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 [email protected]
Rahul Wagh
sir, i try but not propery work, please send corrected code
I have error in float tm,of;
vignesh
I have error in float tm,of;
I am Vignesh I have error in float tm,pf;
melkamu
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.
melkamu
how to improve power factor correction using pic 8051
melkamu
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 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
[email protected]