Embedded Controlled High Efficiency Improved Boost Converter for Solar Installation System with mppt

Nowadays solar power generation is considered the best one compared to the conventional power generation system  because it is clean and does not emit hard gases to the environment. This paper proposes a new topology for photovoltaic DC to DC converter with high gain and efficiency under wide input voltage range. The topology study of open loop and closed loop systems with high gain step-up conversion and step increase in input voltage are proposed. An improved DC to DC boost converter is modelled and simulated using matlab and it is implemented using embedded controller. This converter provides the constant output voltage irrespective of the PV panel output and load. The simulation and experimental results of this system are presented and compared. The performance of the converter is also compared with the conventional boost converter. This comparison reveals that the proposed converter system has the advantages of high gain and high efficiency with the minimum number of components.





CIRCUIT




MATLAB SIMULATION





PROGRAM


 //feed back by 100k and 4.7k
//adc value ---2.733 for 61.4
//adc=2733/4.88 ==560
//to get adc value =v/.11
//62----563
//61.4--558
//60----545
int p=155;
void setup()
{
setPwmFrequency(9, 1);
analogWrite(9,p);
Serial.begin(9600);
delay(5000);delay(5000);
}
void loop()
{

int a=analogRead(2);
Serial.println(a);
//delay(100);
if(a>564)
{
  p=p-1;
  analogWrite(9,p);
}
if (a<545 && a>500)
{
  p=p+1;
  if(p>220)p=p-1;
  analogWrite(9,p);  
}
}

void setPwmFrequency(int pin, int divisor) {
  byte mode;
  if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 64: mode = 0x03; break;
      case 256: mode = 0x04; break;
      case 1024: mode = 0x05; break;
      default: return;
    }
    if(pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    } else {
      TCCR1B = TCCR1B & 0b11111000 | mode;
    }
  } else if(pin == 3 || pin == 11) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 32: mode = 0x03; break;
      case 64: mode = 0x04; break;
      case 128: mode = 0x05; break;
      case 256: mode = 0x06; break;
      case 1024: mode = 0x7; break;
      default: return;
    }
    TCCR2B = TCCR2B & 0b11111000 | mode;
  }
}

/**
 * Divides a given PWM pin frequency by a divisor.
 * 
 * The resulting frequency is equal to the base frequency divided by
 * the given divisor:
 *   - Base frequencies:
 *      o The base frequency for pins 3, 9, 10, and 11 is 31250 Hz.
 *      o The base frequency for pins 5 and 6 is 62500 Hz.
 *   - Divisors:
 *      o The divisors available on pins 5, 6, 9 and 10 are: 1, 8, 64,
 *        256, and 1024.
 *      o The divisors available on pins 3 and 11 are: 1, 8, 32, 64,
 *        128, 256, and 1024.
 * 
 * PWM frequencies are tied together in pairs of pins. If one in a
 * pair is changed, the other is also changed to match:
 *   - Pins 5 and 6 are paired on timer0
 *   - Pins 9 and 10 are paired on timer1
 *   - Pins 3 and 11 are paired on timer2
 * 
 * Note that this function will have side effects on anything else
 * that uses timers:
 *   - Changes on pins 3, 5, 6, or 11 may cause the delay() and
 *     millis() functions to stop working. Other timing-related
 *     functions may also be affected.
 *   - Changes on pins 9 or 10 will cause the Servo library to function
 *     incorrectly.
 * 
 * Thanks to macegr of the Arduino forums for his documentation of the
 * PWM frequency divisors. His post can be viewed at:
 *   http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235060559/0#4
 *
 */