6/15/2022

Inverter repairs in Ghana

 For all your Inverter and UPS servicing, refurbishing, manufacturing, repairs, parts replacement, setup and consultations on renewable energy, contact Hipower Engineering. 

contact: 00233273315313.

email: opanin17@gmail.com.

Hybrid system


WHY YOU SHOULD CHOOSE US:

1. We are reliable

2. We give express service

3. We give warranty on all services

4. We work with your time and deliver at your time

5. Our success rate on repairs and servicing is 95%

6. We use quality and durable parts and components

7. 100% refund on jobs we cannot do and jobs you are not satisfied.

8. Above all, we have quality trained electronic engineers from top Institutions.


SPECIALISATION:

1. High frequency inverters (Hybrid transformerless inverters) (all brands)

2. Low frequency Transformer Inverters (all brands)

3. MPPT Chargers

4. AC battery chargers

5. Power Stabilizers ( above 15kva )

6. All Power Electronics and renewable energy solutions


Working Experience:

From 2014 until now.


LOCATION:

18 Junction, Spintex road-Accra. 
opposite KFC.

Whatsapp: 00233273315313.


Hybrid board1

Hybrid board2

Mppt1

Mppt 2

power board

Low frequency control board




Hipower inverter board

Hipower 10kva

hipower inverter




6/24/2019

MPPT CIRCUIT dsPIC30f2010

MPPT CHARGE CONTROLLER

Detecting your power needs and delivering exactly what you need is a fantastic work of the MAXIMUM POWER POINT TRACKING (MPPT) charge controller.

for inverter repairs in Ghana. click here

Below is the circuit diagram of DSPIC30f2010 3 interleaved buck mppt charger controller circuit.


70A MPPT CHARGER CIRCUIT




IGBT BUCK MPPT CIRCUIT



CONTROL CARD SUPPLY AND DRIVE CIRCUIT





MPPT CONTROL CARD CIRCUIT


IGBT SATURATION PROTECTION CIRCUIT


FUNCTIONS IN THE DSPIC30F2010 MPPT CONTROLLER


1. High efficiency 92%

2. High input voltage (250V PV voltage)

3. High charging current 70A max

4. Battery system is automatically detected by the controller. It can charge 12V, 24V, 36V, 48V, 72V, 96V, 120V, 144V battery system.

5. IGBT Driver system.

6. IGBT protection circuit.

7. Over current protection,

8. PV surge protection

9. Three stages charging algorithm.

10. It can be used to replace other MPPT controller boards.


11. Over temperature protection;

12. Over PV voltage protection

13. Three Interleaved switching topology

13. No programming required since everything is already done for you.

MPPT CONTROL BOARD IMAGE


MPPT CONTROL CARD IMAGE


MPPT SCREEN IMAGE


HOW TO BUY dspic30F2010 MPPT SOURCE CODE
To buy source code, send me email on opanin17@gmail.com or you can whatsapp me on 00233273315313.

Please state what you want in the mail or in your whatsapp message.

Cost of source code is 350 USD.

source code comes with the following files:

1. circuit diagram,

2. Gerber files for the mppt PCBs. (you can print your pcb with this file)

3. C source code which contains the hex file for programming the micro controller.


4. support service until first mppt is successfully built.


BUY MPPT CARD AND BUILT YOUR OWN MPPT INDUCTOR BOARD

Buy mppt card with programmed IC and free circuit at 30 USD to make your own mppt boards .


Please note that this is not a student project. Don't call or whatsapp if you are not ready.



DSPIC30F2010 MPPT SOURCE CODE

THIS IS JUST SAMPLE CODE not complete. Buy complete one if you are intrested.


#include "lcdsoft1.h"

#include "functions.h"


#define buzzer    LATDbits.LATD1
#define connect   LATEbits.LATE0
#define fan       LATEbits.LATE2
#define protect   LATEbits.LATE8
#define heat  700
///////////////////////////////////////////////////////////////////////////////////////////
signed int global_duty;
signed int duty_1,duty_2,duty_3;
int switch_condition;
int ad_switch=0;
int factory[15]={1,800,12,12,2500,40,00,148,138,140,120,50,80,88};
int setting[15];
char arr[6];
int speedlimit=20;
struct
{
unsigned int downkey:1;
unsigned int upkey:1;
unsigned int setkey:1;
unsigned int setup:1;
unsigned int gravity:1;
unsigned int loadon:1;
unsigned int solon:1;
unsigned int chrcorrect:1;
unsigned int chon:1;
unsigned int swon:1;
unsigned int pwmopen:1;
unsigned int solraising:1;
unsigned int chrraising:1;
unsigned int fault:1;
unsigned int stop:1;
unsigned int msgrtn:1;
unsigned int pvtemp:1;
unsigned int loadonled:1;
unsigned int bklte:1;
unsigned int faultled:1;

}flags;

unsigned int rising=0;
unsigned int pol=0;
unsigned int *adjust;
unsigned int *ptr;
unsigned int adj;
unsigned int *value;
signed int moov,mwhtmp;
unsigned int pvmax;
unsigned int pvmin;
unsigned int counter,post;
unsigned int fault=0;
unsigned int millisec=0;
unsigned int sec=0;
unsigned int min=0;
unsigned int mintemp=0;
unsigned long hrs=0;
long btv;

///functions
unsigned int pv_sense();

void interrupt_Init(void);

////////////////////////////////////
unsigned int solwattdisp,max_solwatt,chrtemp,chrtmr,batwatts,bat_v,soladc,hes1adc,ttmr,bzdly,batfultemp;
unsigned int soldisp,batdisp,chdisp,bath,batl,batfloat,batful,stmr,setuptmr,kwhtemp,kwh,mwh,lcdtmr,champs,ofset1,ofset2;
unsigned int solvolt,solh,soll,batvolt,batamps,solamps,keyvalue,heatntc,keyavg,ktmr,btmr,exittmr,hes1tmr,batcurtmr;
unsigned int batsel,ampsel,sol_mv,bat_mv,loadonv,loadofv,batnos,solmax,eraser,solhes,bathes,ct2,batcurrent,solampdisp;
signed int batclb,solclb,dummy_cycle;

int flag=0;
long result,result1,ch_amps,chpower;
int batfunction=0;
int solfunction=0;
int pptfunction=0;
int tlimit=500;
unsigned int tmrs=0;
unsigned int defaults,batavg,solavg,*temp;
unsigned int New_PW_Out;
unsigned int mode;
unsigned int code,adchanel;
int dec=0;
int ctmr;
int keytmr=0;
unsigned int track=0;
unsigned int backlite=0;
unsigned int initcount,yaxis;
unsigned int litedly=0;
///////////////////////////////////////////

void beep(int s)
{
char ts;
for(ts=0;ts
{
buzzer=1;
delay_ms(7);
buzzer=0;
delay_ms(7);
}
}

///long chpower();

void pwm_control(void)
{
    if(global_duty > 2390)                
       global_duty = 2390 ;

      if(global_duty<1 font="">
        global_duty=0;

switch(switch_condition)
{
case 0:
duty_1=(global_duty-0);
PDC1=dutycyle_limit(duty_1);

duty_2=(global_duty-820);
PDC2=dutycyle_limit(duty_2);

duty_3=(global_duty-1640);
PDC3=dutycyle_limit(duty_3);

switch_condition=1;
break;

case 1:
duty_1=(global_duty-820);
PDC1=dutycyle_limit(duty_1);

duty_2=(global_duty-1640);
PDC2=dutycyle_limit(duty_2);

duty_3=(global_duty-0);
PDC3=dutycyle_limit(duty_3);

switch_condition=2;
break;

case 2:
duty_1=(global_duty-1640);
PDC1=dutycyle_limit(duty_1);

duty_2=(global_duty-0);
PDC2=dutycyle_limit(duty_2);

duty_3=(global_duty-820);
PDC3=dutycyle_limit(duty_3);

switch_condition=0;
break;
}
}

void __attribute__((__interrupt__, __auto_psv__))_INT0Interrupt(void)
    {
    if(IFS0bits.INT0IF==1)
    {
     IFS0bits.INT0IF == 0;
     __asm__ volatile ("reset");
     OVDCON=0X0000;
     PDC1=PDC2=PDC3=0;
     lcd_init();
     

    }
   
     }


////////////////////////////////////////////////////////////
void __attribute__((__interrupt__, __auto_psv__)) _ADCInterrupt(void)
{
   IFS0bits.ADIF = 0;


batavg+=ADCBUF2;
btmr++;
if(btmr==63)
{
batvolt=batavg>>6;
bat_v=batvolt;
batavg=0;
btmr=0;
switch(batfunction)
{
case 0:
batvolt*=12;
batvolt/=10;

batfunction=1;
bath=(batvolt*batnos)+batclb;
break;

case 1:
batvolt*=10;
batvolt/=10;
batfunction=0;
batl=(batvolt*batnos)+batclb;
batdisp=__builtin_divsd((bath+batl),10);
if(batdisp>batful+30)
{
fault=2;              // battery devider failure
OVDCON=0X0000;
PDC1=PDC2=PDC3=0;
}
break;
}
}


solavg+=ADCBUF0;
stmr++;
if(stmr==63)
{
solvolt=solavg>>6;
soladc=solvolt;
if((signed int)soladc<0 font="">
soladc=0;
solavg=0;
stmr=0;

soldisp=(solvolt*2)+100;

if(soldisp<((130*batnos)+150))//not solar
{
OVDCON=0X0000;
PDC1=PDC2=PDC3=0;
soldisp=0;
flags.solon=0;
litedly++;
if(fault==0)
{
if(litedly>1000)
flags.bklte=0;
}
}

else
{

if(soldisp>2500)
{

fault=1;// solar devider failure
OVDCON=0X0000;
PDC1=PDC2=PDC3=0;
connect =0;
}
//////////////////////////////////////

/////////////////////////////////////
if(fault==0)//&&(protect==!0))
{    
litedly=0;
flags.bklte=1;
connect=1;
flags.solon=1 ;
LCD_DB5=1; //solar led on
//delay_ms(8000);
{
OVDCON= 0b0010101000010101;

}
}

}
}
keyavg+=ADCBUF5;
ktmr++;
if(ktmr==63)
{
ktmr=0;
keyvalue=keyavg>>6;
keyavg=0;

if(flags.setup==0)
{
if((keyvalue<790 amp="" keyvalue="">700))
flags.loadon=1;
else
flags.loadon=0;
}

if(flags.setup==1)
{
litedly=0;
flags.bklte=1;
if(keyvalue>700)
{
exittmr++;
if(exittmr>32000)
__asm__ volatile ("reset");
}
else
exittmr=0;
}
if((keyvalue<900 amp="" keyvalue="">525))
{
litedly=0;
flags.bklte=1;
flags.upkey=1;
return;
}
else
flags.upkey=0;

if((keyvalue<600 amp="" keyvalue="">225))
{
litedly=0;
flags.bklte=1;
flags.downkey=1;
return;
}
else
flags.downkey=0;


if(keyvalue<300 font="">
{
if(flags.setup==0)
{
setuptmr++;
if(setuptmr>100)
{
OVDCON=0X0000;
PDC1=PDC2=PDC3=0;
flags.setup=1;
flags.msgrtn=1;

}
}


flags.setkey=1;
exittmr=0;
}
else
{
setuptmr=0;
flags.setkey=0;
return;
}
}

if(flags.setup==0)
{
heatntc=ADCBUF4;
if(heatntc>1100)

fault=3;          // heat sensor failure

if(heatntc
fan=1;



//*****************************************************************************/
int main()
{
TRISF=0X0000;
TRISE=0X0080;
TRISD=0X0000;
TRISC=0X0000;
TRISB=0XFFFF;
OVDCON=0X0000;
PWMCON1 = 0x0000;
PTCONbits.PTEN = 0;
buzzer=0;
fan=0;
CNPU1bits.CN0PUE=1;
//opto=0;
//change=0;
connect =0;
lcd_init();
flags.setup=0;
flags.stop=1;
flags.pwmopen=0;
global_duty=0;
flags.bklte=1;
pol=0;
memread();


defaults=Eeprom_ReadWord(11);
if(defaults!=50)
{
memwrite();
__asm__ volatile ("reset");
}
init_PWM();

       batnos=setting[0];
      //  batnos=8;
        batsel=batnos*12;
        ampsel=setting[1];
        sol_mv=setting[2];
        bat_mv=setting[3];
        solmax=setting[4];
        batclb = setting[5];
        solclb=setting[6];
        batful = setting[7]*batnos;
        batfloat=setting[8]*batnos;
        loadonv=setting[9]*batnos;
        loadofv=setting[10]*batnos;
        defaults=setting[11];
        kwh=Eeprom_ReadWord(50);
        kwhtemp=kwh;
        ofset1=setting[12];
        ofset2=setting[13];
        // ofset2=494;
        init_PWM();
        interrupt_Init();
        InitADC1();

__delay32(55000);
__delay32(55000);


while(1)
{
    while(PORTEbits.RE8==0)
 backlite=1; 
 flags.faultled=1; 
        printmes(str80,100,1);
        printmes(str81,100,2);
        
}

flags.loadonled=0;
pptfunction=0;
flags.stop=0;
track=1;

   
dec=1;

//printmes(str26,100,1);    // TITLE NAME

pol=1;
temp=&chdisp;
printmes(str14,1,3);    //"CHARGING:     "
pol=0;
dec=1;



dec=1;
temp=&batdisp;
printmes(str12,1,1);      //"BATT VOLT:     V" 


temp=&soldisp;
printmes(str13,1,2);    //"SOLAR VOLT:     "



//temp=&solampdisp;
//printmes(str15,1,3);    //"SOL-AMPS    "
dec=1;
temp=&chpower;
printmes(str09,1,4);    //"TOTAL KW "



if(kwh!=kwhtemp)
Eeprom_WriteWord(50,kwh);

if(flags.setup==1)
{
function_set();
}

if(fault==1)
{

while(1)
{
OVDCON=0X0000;
PDC1=PDC2=PDC3=0;
buzzer=1;
printmes(str22,100,1);    // fault1
if(keyvalue>1000)
{
while(keyvalue>1000);
 __asm__ volatile ("reset");
}
if(keyvalue<1000 p="">
{
while(keyvalue<1000 p="">
 __asm__ volatile ("reset");
}

}
}

if(fault==2)
{
while(1)
{
OVDCON=0X0000;
PDC1=PDC2=PDC3=0;
buzzer=1;
printmes(str23,100,1);    // fault2
if(keyvalue>1000)
{
while(keyvalue>1000);
 __asm__ volatile ("reset");
}
if(keyvalue<1000 p="">
{
while(keyvalue<1000 p="">
 __asm__ volatile ("reset");
}
}
}


if(fault==3)
{
while(1)
{
OVDCON=0X0000;
PDC1=PDC2=PDC3=0;
buzzer=1;
printmes(str24,100,1);    // fault3
if(keyvalue>1000)
{
while(keyvalue>1000);
 __asm__ volatile ("reset");
}
if(keyvalue<1000 p="">
{
while(keyvalue<1000 p="">
 __asm__ volatile ("reset");
}
}
}

if((ofset1==0)||(ofset2==0))
{
OVDCON=0X0000;
PDC1=PDC2=PDC3=0;
fault=4;

while(1)
{
buzzer=1;
printmes(str25,100,1);    // fault4
if(keyvalue>1000)
{
while(keyvalue>1000);
 __asm__ volatile ("reset");
}
if(keyvalue<1000 p="">
{
while(keyvalue<1000 p="">
 __asm__ volatile ("reset");
}
}
}
flags.pwmopen=1;

}
}

//main


///////////////////////////////////////////////////////////////////////////////////////
void InitADC1()
{
_ADON = 1; // Turn ADC ON

ADCON1 = 0x00EC; 
ADCON3 = 0x0003;
ADPCFG = 0x0000;
_SMPI=0x07;
_ADCS=0b111111;
_SAMC=0b11111;
_ADRC=1;
ADCON2bits.CHPS=0;
_BUFM=0;
_ALTS=0;
_CH0NA=0;
_CSCNA=1;
ADCSSL=0b111111;
ADCON1bits.ADON=1;
IEC0bits.ADIE = 1;
//interrupt_Init();
}

//////////////////////////////////////////
void delay_ms(unsigned int gs)
{
  while(gs--) 
{
__delay32(55000);

}

}
///////////////////////////////////////////////////////////
void delay_us(unsigned int gs)
{
 while(gs--)
 __delay32(3000);
}
//////////////////////////////////////
int getvalue(int ch)
{

ADCON1bits.DONE=0;
ADCHS = ch;         
ADCON1bits.SAMP = 1;      
__delay32(50);              
ADCON1bits.SAMP = 0;      
while (!ADCON1bits.DONE); 
return ADCBUF1;
}  

void interrupt_Init(void)
{
  
  INTCON2 = 0x0001;     //set up INTO on falling edge of MMA8452Q interrupt output signal 
  IFS0bits.INT0IF = 0;  //clear INT0 interrupt flag
  IEC0bits.INT0IE = 1;  //enable INT0 ISR
  IPC0bits.INT0IP = 7;  //set highest priority
  IFS0bits.CNIF   = 0;
  
}
/////////////////////////////////////////////////////

//THIS IS JUST SAMPLE CODE not complete




3/31/2019

MAKE INVERTER TRANSFORMER

Inverter transformers are just like any other power transformers except that inverter transformers works in the reversed form of the standard transformer.

To repair your inverter in ghana click Here

Standard step down transformers receives high voltage and small current at the primary winding and produce low voltage with high current at the secondary side. In this case the output is taken from the secondary winding.

On the other hand, Inverter transformers receives high current with low voltage on the secondary windings and produces low current with high voltage at the primary windings. It can therefore be said that, the inverter transformer is a typical step up transformer. The output of an inverter transformer is taken from the primary windings.   


MAKE INVERTER TRANSFORMER




To select copper size for pure sine wave inverter the following steps must be followed. Please know that pure sine wave inverter transformers don't have center tap.




HOW TO SELECT COPPER WIRE SIZE FOR INVERTER TRANSFORMER


EXAMPLE: MAKE 24V 6000W INVERTER TRANSFORMER

1. Calculate maximum DC current to be switched by mosfets [ 6000W ÷ 24V = 250 A.]

2. Now select copper gauge that can handle 250 A of current. From the current chart above, [ 10 guage copper can handle 50 A] so you will need to add 5 together [ 5 x 50 =250] and wind it in the secondary side of the transformer (that is using single transformer core)

Or  you can use 3 of 10 gauge copper [ 3 x 50 = 150 A ] to wind / make the secondary of 2 different transformers and connect those two transformers in parallel.

Please know that you can use any size of copper gauge. The most important thing is to combine or add it until it can handle the current you are looking for.

3. The secondary voltage of the transformer should be between 13V to 16.5V 
(I prefer 13.5V)  

4. The primary copper size should be able to handle your primary current.
You can find that by dividing transformer power power by your primary voltage. 
That is [ 6000W ÷ 220V = 27.27A ]



From the chart above, the right gauge is 12 for a single core transformer.

for parallel transformers you can use 14 gauge for each of the two transformers which will be connected in parallel. 

So  this is all you need to select your wire size.

The next thing is to calculate the number of turns for your selected core which is covered by many posts online. 

SECONDARY VOLTAGE OF PURE SINE WAVE INVERTERS


The secondary voltage of all pure sine wave inverter transformers is always half of the battery system. This is to enable the output of the inverter to be regulated and made stable using high frequency modulated PWM signals.

By making the transformer half of the battery system, The output can stay regulated when load is connected as well as when the battery is draining. It also prevents humming when load is connected.



TYPICAL EXAMPLE OF TRANSFORMERS FOR SOME INVERTER SYSTEMS

12V system uses 6-8V transformer

24V system uses 12-16V transformer 

48V system uses 24V-28V transformer


96V system uses 48V-52V transformer

If there is anything you want me to add as well as questions, kindly write it in the comment section and I will write about it or add it to the post as well as reply you.

Thank you.

10/09/2018

MUST, POWER STAR, FELICITY INVERTER REPAIRS


Today am going to show you how to repair all the inverter brands that uses the control boards below.


MUST INVERTERS,  FELICITY INVERTERS, KAMA POWER, POWER STAR,  ETC.  and some  other popular inverters uses the same control board but only branded with different names.

All inverters using this boards are low frequency, pure sine wave inverters. The above board is connected to a heat-sink board called the power amplifier board built on the principle of H bridge (full bridge) converter topology . 

      POWER INVERTER REPAIRS 3


MUST, POWER STAR, FELICITY INVERTER


FAULTS ON THESE INVERTERS

The inverter displays every fault with a unique code, these fault codes starts from 01 to 09. Explanation of the error code is shown below;



INVERTER ERROR CODE O1 AND ERROR CODE 04


These errors means there is either a problem with your fan or your system temperature is very high.
Error 01 can also occur if the temperature sensing NTC shorts. 

This fault usually occurs when the fan PWM clock pin fails (The middle pin of the 12V Fan).

Solution: 

1. check NTC
2. Change fan
3. check the board for components in the circuit below;


ERROR 02 (overload)


Overload simply means given more load to the inverter than its designed for.

In case there is no such overloading and the system is saying overload then change the resistors in the circuit below


ERROR CODE 3 AND ERROR 7 (OUTPUT SHORT)


This code means either your drive signal is not going through or output mosfets has failed. 

solution
1. Check all mosfets for failure
2. Check all gate resistors for burnt and opening.   (47 ohms each resistor)
3.  check the drive circuit below






ERROR CODE 5 

This error means your battery is below a set value and the batteries needs recharge.


ERROR CODE 08 AND ERROR CODE 09


check the battery sense circuit below and increase or reduce the related resistors.







THANK YOU FOR READING.


leave your questions and comments in the comment box and I will reply.

Featured Post

MAKE INVERTER TRANSFORMER

Inverter transformers are just like any other power transformers except that inverter transformers works in the reversed form of the standa...

Contributors