MPPT maksimum güç noktası yakalama hakkında

Başlatan neşter43, 19 Aralık 2014, 01:50:41

neşter43

Merhaba arkadaşlar
Boost konverter kullanarak basit bir MPPT yapmaya çalışıyoruz. ADC okuma işlemi yapılarak elde edilen gerilim, acs712 akım sensöründen elde edilen  akım bilgisi ile çarptırılarak anlık olarak güç hesabı yapılmıştır. Uygulamada while döngüsüne girmeden bir kez güç hesaplanıp lcd'ye yazdırılıp PWM duty ratio oranı artırılmıştır. While döngüsünde GÜÇ2 ifadesi hesaplanıp if döngüsünde GÜÇ2>GÜÇ  'ten büyükse PWM arttır işlemi yaptırılmıştır. Aksi durumda else yapısı ile mevcut PWM oranı korunmuştur. Bu uygulama 10khz de gerçek devrede denenmiştir. Bizim sorunumuz ise çıkıştaki güce bağımlı olmadan sadece girişten elde ettiğimiz güç verisi ile maksimum güç noktasını yakalamaya çalışıyoruz. Bu konu hakkında bildiğiniz bir algoritma var mıdır.Konu hakkında görüşleriniz nelerdir.

#include <16f877a.h>    

#device ADC=10


#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=20000000) 

#use fast_io(c) 
#use fast_io(a) 

#define use_portb_lcd TRUE   

#include <lcd.c>  


int i=40;
unsigned long int akimbilgi,gerilimbilgi;
float akim,akimV,guc,guc2,gerilim;           

//********** ANA PROGRAM FONKSYYONU*******

void main ( )
{
   setup_psp(PSP_DISABLED);        
   setup_timer_1(T1_DISABLED);    
  
   set_tris_a(0x0F);
   set_tris_c(0x00);  
   output_c(0x00);    

   setup_ccp1(CCP_PWM);                 
   setup_timer_2(T2_DIV_BY_4,124, 1);
   set_pwm1_duty(i);
   
   setup_adc(adc_clock_div_32);  
   setup_adc_ports(ALL_ANALOG);   

   lcd_init();                            

   printf(lcd_putc,"\f ADC UYGULAMASI "); 
   delay_ms(20);
   
   
      set_adc_channel(0);   
      delay_us(20);         
      akimbilgi=read_adc();
      set_adc_channel(1);   
      delay_us(20);         
      gerilimbilgi=read_adc();
      
   
     gerilim=(0.0048828125*gerilimbilgi)*10.85;  //giris gerilimi 
     akimV=0.0048828125*akimbilgi;
     akim=(akimV-2.5)*5;                         //giris akimi
     
     guc=akim*gerilim;                           //giris gücü
     printf(lcd_putc,"\fVoltaj=%fV",gerilim); 
     delay_ms(20);
     //gerçek devrede  300MS KULLANDIK
      
     printf(lcd_putc,"\nAkim=%fA",akim); 
     delay_ms(20);
      
     printf(lcd_putc,"\fGuc=%fw",guc); 
     delay_ms(20);
     
     i++;
     delay_us(5);
     set_pwm1_duty(i);


   while(1)   
   {
      
    printf(lcd_putc,"\fYeni Guc=%fw",guc); 
    delay_ms(20);
     
       set_adc_channel(0);   
      delay_us(20);         
      akimbilgi=read_adc();
      set_adc_channel(1);   
      delay_us(20);         
      gerilimbilgi=read_adc();
      gerilim=(0.0048828125*gerilimbilgi)*10.85;
      akimV=0.0048828125*akimbilgi;
      akim=5*(akimV-2.5);
     
      guc2=akim*gerilim;
      delay_us(100);
     
     printf(lcd_putc,"\fVoltaj=%fV",gerilim);
     delay_ms(20);
      
     printf(lcd_putc,"\nAkim=%fA",akim); 
     delay_ms(20);
      
     printf(lcd_putc,"\fGuc=%fw",guc2); 
     delay_ms(20);
   
   if (guc2>guc)
 {
 i=i+1;
 delay_us(5);
 set_pwm1_duty(i);
 delay_us(20);
 guc=guc2;
   
 }
 
 else
 {
 guc=guc2;
 delay_ms(20);
 } 
   }
}

elektronart

else kısmında PWM i kısabilirsiniz. Böylece peak gücü yakaladığında bir altında bir üstünde salınır durur. Ancak else sizin yaptığınız gibi kalırsa peak güç düşmeye başladığında algılayamazsınız. Sürekli bi salınım istemezseniz else if( 2 < 1) ve else de yapabilirsiniz.
R10u ne amaçla kullandınız?
Açık Elektronik

batigol

#2
Siz zaten sadece giriş gücünü ölçüyorsunuz? GÜÇ ve GÜÇ2 ifadeleri giriş gücü değil mi yoksa ben mi birşeyi gözden kaçırıyorum?
Bir de gerçekteki devrede kaynak olarak simulasyondaki gibi güç kaynağı mı kullandınız güneş paneli ile mi çalışıyorsunuz?
Algoritma olarak perturb and observe ve incremental conductance algoritmalarını araştırmanızı tavsiye ederim.

neşter43

Yorumunuz için teşekkür ederim.
Dediğiniz şekilde uyguladım maksimum güç noktası civarında bir salınım yapıyor. Bu salınımı en aza indirmeye çalışıcam. Peki bu salınımı en aza indirme konusundaki fikriniz nedir.
R10 direncini güç kaynağının iç direncini modellemesi amacıyla eklemiştim.

neşter43

batigol
Güç ve Güç2 kaynağın gücünü ifade ediyor.Uygulamada güç kaynağı üzerinde denedim.Güç kaynağı ile PV' nin karekteristiğinin bir olmadığının farkındayım.Simulasyon üzerinde maksimum noktayı yakaladıktan sonra PV ile denicem.

batigol

#5
Güç kaynağı ile akım basarak benzer karakteristik elde edilebilir pv eşdeğer devresi göz önüne alınarak. Gerilim kaynağı ile algoritmanı tam olarak test edemeyebilirsin. Algoritmanda gerilim değişimini de gözlemen lazım pv karakteristikte maksimum güç noktasının hangi tarafında olduğunu görmek açısından. Yoksa algoritman yanlış adım atabilir. Gerçi boost dönüştürücü ile maksimum güç noktasının sadece sağ tarafında çalışırsın ama yine de gerilim değişimini de hesaba katmakta fayda var. Perturb and observe algoritmasi işini görür.