17 Eylül 2009

PIC16F877 IRFZ44 Lcd göstergeli solar şarj regülatörü

PIC16F877 IRFZ44 Lcd göstergeli solar şarj regülatörü

Hazırlayan: Sabahattin KARABAKIR – Güneş enerjisini ile ilgili çalışmalarınızda çok faydalı olacak bir proje detaylı bilgiler bulunuyor. Ayrıca PIC C dili (HI-TECH PIC C) ile hazırlanmış kaynak yazılımda bulunuyor. Emeği geçen hazırlayan kişilere teşekkürler. Aşağıda özetler verildi projenin tamamı: solar-sarj-regulatoru.rar

Bu proje güneş enerjisinden daha iyi faydalanabilmek için geliştirilmiştir. Güneş enerjisi kesikli bir enerji çeşididir ve bu nedenle depolanması gerekmektedir. “Solar Şarj Regülatörü” bu noktada ihtiyaç duyulan bir cihazdır ve PV panellerden gelen DC akımın bir bataryada depolanması esnasında iş görür.
Regülatör, standart 12V’luk kurşun-asit bataryalar için tasarlanmıştır ve iki ayrı işlevi vardır, bunlar sırasıyla şöyledir. İlki, bataryayı over-cahrge(aşırı yüklenme) ve over-discharge (aşırı boşalma)’dan korumaktır. İkincisi, yükü aşırı akımdan korumaktır. Bunlara ek olarak bazı monitoring özelliklerine sahip olan regülatör, bir LCD vasıtası ile anlık olarak batarya voltajı, yük akımı, yük gücü ve SOC (State Of Charge-Şarj Durumu )’u göstermektedir. Bu regülatörün en büyük üstünlüğü, piyasadaki benzerlerine göre çok daha ucuz olmasıdır (en az 1/5 fiyatına mal edildi).
Projenin tasarım, geliştirme, test ve ölçüm aşamaları, Ege Üniversitesi, Elektrik-Elektronik Mühendisliği Bölümü, Fotovoltaik Sistemler Laboratuarında gerçekleştirildi. Her laboratuarda var olan temel cihazların yanı sıra, sadece bu laboratuarda bulunan PV (Photo Voltaik) Paneller’den azami derecede faydalanılmıştır, bu yeterlilik ve imkanlar projeye çok büyük bir katkı sağladı.
Bu projede bana zaman ayıran, pratik ve teorik aşamalarda destek olan ve her zaman hoşgörülü davranan sayın okutmanım Dr.Mutlu BOZTEPE’ye teşekkürü borç bilirim.
Bu raporda, PV sistemlerde kurşun asit bataryaların şarj edilmesinde kullanılan regülatörlerin en düşük maliyetli ve en yüksek verimlisi olan On-Off Şarj Regülatörü anlatılacaktır. Regülatör, 12V’ luk bir batarya için tasarlanmıştır ve sabit akım/sabit gerilim yöntemi ile şarj kontrolü yapmaktadır. Bunu PIC16F877 kontrolörlü bir ölçme, kontrol devresi ve IRFZ44 MOS-FET’li bir anahtarlama devresi yapmaktadır. PIC için C dilinde yazılmış bir program kullanılmıştır.
Üzerinde yük(akım, gerilim, güç) ve batarya (SOC-State Of Charge,Şarj Durumu) ile ilgili bilgi veren bir LCD barındırır. Sadece şarj kontrolü değil aynı zamanda yük kontrolü yapar .
solar regulator blok diagram
Altı adet paralel güneş pili panelinden (OST-80 PV modül) alınan 18V’luk maksimum DC gerilim ile 12V’luk bir batarya şarj edilmektedir. On-off regülatör olarak bir güç MOSFET’i ve yük kontrolü için bir güç MOSFET’i kullanılmıştır. PIC (www.microchip.com)8 mikro denetleyicinin analog girişlerinden okunan gerilim ve akım(akım gerilim çevirici vasıtası ile) değerlerine bağlı olarak MOSFET’ler sürülmüştür. Böylece gerekli olduğu durumlarda batarya, yük ve PV panel-lerden ayrılarak yük ve batarya korunmuş ve şarj kontrolü yapılmıştır. Sistem, üzerinde bilgi verici olarak bir adet 2×16 karakter LCD bulunup, metal bir kutu içine yerleştirilmiştir.

Şema ve Çalışma Prensibi

Takip eden sayfada Proteus adlı simülasyon programında kurulup simüle edilen devre şeması görülmektedir. PV paneller yerine 20V’luk bir DC gerilim kaynağı bağlanmıştır. PV paneller, batarya ve yükün pozitif kutupları ortak bağlanmış olup, negatif kutupları seri birer MOSFET ile birleştirilmiştir. Negatif (yada toprak) tarafta ayırma yapılmasının en temel nedeni N-kanallı MOSFET kullanılmasıdır.
MOSFET’in iletime geçebilmesi için gate-source arası 12V civarında olmalı, fakat batarya-panel arası bağlı MOSFET’in source ucu en az 12V olacağı için ve panel gerilim maksimum 20V olacağı için iletime geçme koşulu sağlanamamaktadır. Bu nedenle source ucu toprak veya 0V seviyesinde olmalıdır. Böylece maliyet olarak da büyük bir kar sağlanmıştır, çünkü P-kanallı MOSFET’ler üretim zorluğu bakımından 50A gibi büyük akımlarda üretilememektedir, ayrıca yüksek akımlı olanları da çok pahalıdır.
MOSFET’ler PIC portları vasıtası ile birer opto coupler ile sürülmektedir, böylece kontrol ile güç katı birbirinden izole edilmiştir. Gate’lere paralel birer 12V’luk zener bağlanmıştır bundaki amaç yüksek gerilimde gate’lerin zarar görmesini engellemektir.
MOSFET’lere seri bağlı diyotlar ters akımları engellemek için kullanılmıştır. Yani güneş olmadığında bataryadan panellere akım akmaması için. Gerilim ölçme işi 0. analog girişten yapılmıştır. Bataryaya paralel bağlı bir gerilim bölücü ile batarya gerilimi ¼’e indirilmiş ve 5V maksimum kabul edilerek yaklaşık 5mV’luk bir çözünürlükte ölçüm yapılmıştır.
Akım ölçme ise 1. analog girişten yapılmıştır. Yüke seri bağlı bir 0,013ohm/ 15W’lık direnç üzerine düşen gerilim OPAMP ile kuvvetlendirilerek 50A’de maksimum 5V olacak şekilde PIC’e girilmiştir. Yaklaşık 5mV’luk bir çözünürlükte ölçüm yapılmıştır.
LCD, standart bir parça olduğu için şekildeki gibi bağlanmış ve çalıştırılmıştır. Dikkat edilmesi gereken en önemli nokta, kontrast ayarının yapılmış olmasıdır. Sümülasyonda kontrast potansiyometrsine ihtiyaç duymadan çalışmaktadır.
solar sarj regulator devresi

Deney ve Ölçüm Sonuçları

Önceki sayfalarda anlatılan devre şeması gerçekleştirilirken aşağıdaki sorunlar ile karşılaşıldı:
-LCD sürme büyük bir zaman kaybına neden oldu çünkü, var olan standart LCD şemalarında kontrast ucu açıkta bırakılmıştır. Bu uca +Vcc veya GND verilmesine rağmen görüntü alınamamıştır, 10K’lık bir potnsiyometre ile kontrast ayarı yapıldıktan sonra görüntü elde edilmiştir.
-Akım ölçme devresi, yük akımının 0.013ohm’luk direnç üzerinde neden olduğu gerilimi filtreleyip kuvvetlendirerek PIC’in ölçebileceği bir seviyeye getirmektedir. Bu esnada tasarımda öngörülen tek kaynaktan beslemeli OPAMP sorunlar çıkardığı için ek bir gerilim evirici devresi ile çift beslemeli bir amplifikasyon yapıldı. Ayrıca iyi bir hassasiyete sahip olmasına rağmen OPAMP offset nulling’e ihtiyaç duydu.
-PIC ve diğer devreleri beslemek için kullanılan 7805 entegresi, bataryadan beslenmektedir. Fakat saf bir DC gerilim elde edilemediği için devre kararasızlaşmaktaydı. Bunu engellemek için 7805’in çıkışına filtre kapasitesi ilave edildi
-LCD backlight özelliği kullanılmadı, çünkü yüksek akım çekmekte ve 7805’in aşırı ısınmasına neden olmaktaydı.
Devre sorunsuz olarak çalıştırıldıktan sonra kutulandı ve aşağıdaki ölçümler gerçekleştirildi. Tüm ölçümler öğlen saatlerinde (maksimum gün ışığında) ve 39ohm’luk yük bağlı iken yapılmıştır. PV paneller, OST-80 olarak bilinen, 12V(nominal) ve 19V(open circuit) gerilim değerlerine sahip panellerdir, benzer özellikteki BP 380 panelleri altyapı kısmında verilmiştir.
sarj durumu batarya akim

PIC Yazılımı

Aşağıdaki program PIC C ile yazılmış bir programdır ve Hi-Tech PIC C Compiler ile derlenmiştir. Programda geçen alt programlar standart olarak kullanılan ve ulaşılabilir programlar olduğu için burada verilmeyecektir.
  1. ********************************* 
  2. // solar şarj regülatörü 
  3.  
  4. #include  
  5. #include  
  6. #include  
  7. #include "lcd.h" 
  8. #include "delay.h" 
  9. #include "serial.h" 
  10.  
  11. // Prototypes 
  12. float ReadAdc(unsigned char channel); 
  13. void lcd_intro (void); 
  14.  
  15. void giris_olc(void); 
  16.  
  17. // Useful defines 
  18. #define LSB(x)  (unsigned char)(*(((unsigned char *)&x)+0)) 
  19. #define MSB(x)  (unsigned char)(*(((unsigned char *)&x)+1)) 
  20. #define LWORD(x)    (unsigned int)(*(((unsigned int *)&x)+0)) 
  21. #define HWORD(x)    (unsigned int)(*(((unsigned int *)&x)+1)) 
  22. #define clrwdt() asm("clrwdt") 
  23. #define PORTBIT(adr, bit)   ((unsigned)(&adr)*8+(bit)) 
  24. #define DelayUs(x)  { unsigned char _dcnt; _dcnt = x; while(--_dcnt != 0){asm("NOP");asm("NOP");} } 
  25. #define DelayMS(x)  { unsigned char _dcnt; _dcnt = x; while(--_dcnt !=0) {DelayUs(250);DelayUs(250);DelayUs(250);DelayUs(250);}} 
  26.  
  27. #define SampNum 40 
  28. static bit  CO  @ PORTBIT(PORTE, 0); 
  29. static bit  CI    @ PORTBIT(PORTE, 1); 
  30.  
  31. float giris0, giris1, giris2, giris3; 
  32. float LRV, HVD, RCV, LVD; 
  33. unsigned char buff[15]; 
  34.  
  35. main (){ 
  36. // Interrupt settings 
  37. GIE = 0;            // Disable all interrupts 
  38.  
  39. // ADC settings 
  40. ADCON1=0b10000010;  // right justified, PORTA for A/D , PORTE digital 
  41. ADCON0=0x81;        // Fosc/32, CH0, ADON 
  42.  
  43. // PORT settings 
  44. PORTA=255; 
  45. PORTB=0; 
  46. PORTC=0; 
  47. PORTD=0; 
  48. PORTE=3; 
  49. TRISA=0b11111111; 
  50. TRISB=0b00000000; 
  51. TRISC=0b00000000; 
  52. TRISD=0b00000000; 
  53. TRISE=0b00000000; 
  54. LRV=13;Load Reconnect Voltage(yük bağlama) 
  55. HVD=143/10;High Voltage Disconnect(PV ayırma) 
  56. RCV=135/10;PV Reconnect(PV bağlama) 
  57. LVD=115/10;Low Voltage Disconnect(yük ayırma) 
  58. ;Yukarıdaki değerler batarya çeşidine göre deyişen ayar noktalarıdır. 
  59.  
  60. lcd_init(); 
  61. lcd_intro(); 
  62. lcd_dispmode(4+0+0); // 4:Display on  2:cursor off  1:blink off 
  63. DelayUs(220); 
  64.  
  65. while(1) 
  66. giris0=(ReadAdc(0)*20/1024); 
  67. ftoa(giris0,buff); 
  68. lcd_clear(); 
  69. lcd_goto(0);  //1.satır 
  70. lcd_dispmode(4+0+0); // 4:Display  2:cursor  1:blink 
  71. lcd_puts("E="); 
  72. lcd_goto(0x02); 
  73. lcd_puts(buff); 
  74. lcd_goto(0x06); 
  75. lcd_puts("V"); 
  76. if (giris0<=RCV) {CO=1;} 
  77. if (giris0>=HVD) {CO=0;} 
  78. if (giris0<=LVD) {CI=0;} 
  79. if (giris0>=LRV) {CI=1;} 
  80.  
  81. giris1=(ReadAdc(1)*75/10240); 
  82. ftoa(giris1,buff); 
  83. lcd_goto(0x08); 
  84. lcd_puts("I="); 
  85. lcd_goto(0x0A); 
  86. lcd_puts(buff); 
  87. if (giris1>=30) {CI=0;} 
  88. lcd_goto(0x0E); 
  89. lcd_puts("A"); 
  90. lcd_goto(0x40); 
  91. lcd_puts("P="); 
  92. lcd_goto(0x42); 
  93. giris2=giris1*giris0; 
  94. ftoa(giris2,buff); 
  95. lcd_puts(buff); 
  96. lcd_goto(0x47); 
  97. lcd_puts("W"); 
  98. lcd_goto(0x49); 
  99. lcd_puts("SOC=%"); 
  100. lcd_goto(0x4E); 
  101. giris3=100*(giris0-LVD)/(HVD-LVD); 
  102. ftoa(giris3,buff); 
  103. lcd_puts(buff); 
  104. DelayMs(250); 
  105. DelayMs(250); 
  106. DelayMs(250); 
  107. DelayMs(250); 
  108. lcd_clear(); 
  109.  
  110. float ReadAdc(unsigned char channel){ 
  111.     unsigned int adcvalue; 
  112.     ADCON0 = (channel << 3) + 0x81;   // select channel 
  113.     DelayUs(20);                    // wait for acquasition time 
  114.     ADGO = 1; 
  115.     while(ADGO);                    // wait for conversion complete 
  116.     MSB(adcvalue)=ADRESH; 
  117.     LSB(adcvalue)=ADRESL; 
  118.     return(adcvalue); 
  119. //****************************************** 
  120.  
  121. void lcd_intro (void
  122.     lcd_clear(); 
  123.     lcd_goto(0); 
  124.     lcd_dispmode(4+0+0); // 4:Display  2:cursor  1:blink 
  125.     lcd_putsd("      SOLAR"); 
  126.     lcd_goto(0x40); 
  127.     lcd_putsd(" SARJ REGULATORU"); 
  128.     DelayMs(250); 
  129.     DelayMs(250); 
  130.     DelayMs(250); 
  131.     DelayMs(250); 
  132.     lcd_clear(); 
  133. ********************************* 
Yazılımın yaptığı işi aşağıdaki basamaklarda özetleyebiliriz:
• Ayar noktalarına bağlı olarak MOSFET’leri kontrol eder ve yük ile PV panelleri devreden ayırıp devreye alır.
• Batarya gerilimi ve yük akımını ölçer/okur.
• Yükün çektiği gücü hesaplar.
• Gerilim temelli SOC tahmini yöntemi ile SOC hesaplar.
• Ölçüm ve hesap sonuçlarını anlık olarak LCD’ye yazdırır.

Etiketler:

0 Yorum:

Yorum Gönder

Kaydol: Kayıt Yorumları [Atom]

<< Ana Sayfa