Solarna ładowarka akumulatorów z MPPT (2)

Solarna ładowarka akumulatorów z MPPT (2)

Prezentujemy drugą część artykułu o ładowarce, która pozwala ładować energią z ogniw PV akumulatory o napięciu do 50 V. Akumulatory te mogą być podstawą domowego magazynu energii, dzięki któremu efektywniej wykorzystamy energię słoneczną. Dodatkowo, zaprezentowany projekt wyróżnia się tym, że realizuje algorytm śledzenia punktu mocy maksymalnej (MPPT), co gwarantuje uzyskiwanie maksymalnej ilości energii z ogniw PV.

Wybór mikrokontrolera i innych elementów

Układ ESP32 należy do dobrze znanej rodziny mikrokontrolerów. Istnieje szereg modułów z tymi komponentami, w tym moduł WROOM32 zawierający wszystko co niezbędne do działania układu. Moduł ten jest dostępny na wielu płytkach deweloperskich. Znajduje się an nich na ogół port USB do programowania układu. Sam moduł WROOM32 nie ma takiego portu USB. Aby można było go zaprogramować przez USB, potrzebny jest zewnętrzny interfejs USB-TTL UART, taki jak CH340C. Moduł WROOM32 kosztuje tylko około 1,80 dolara. Jest kompatybilny programowo z Arduino i można go używać jak każdego innego modułu Arduino.

Z drugiej strony ESP32 to bardzo szybki i wydajny 32-bitowy, dwurdzeniowy mikrokontroler taktowany zegarem 240 MHz. Ma wbudowane interfejsy Wi-Fi i Bluetooth BLE, więc nie trzeba kupować dodatkowych, drogich modułów. Układ ten oferuje maksymalnie 16-bitową rozdzielczość PWM, ma 12-bitowy wbudowany przetwornik analogowo cyfrowy – ADC (nie będzie on używany w opisanym urządzeniu, zostanie zastosowany dokładniejszy, zewnętrzny układ) oraz przetwornik cyfrowo-analogowy – DAC. To tylko część z możliwości tych mikrokontrolerów, a cała lista jest długa. Dodatkowo, przy cenie 1,80 dolara, układ ten był tańszą alternatywą względem np. Arduino Nano pomimo tego, że oferuje możliwości, które przewyższają je pod każdym względem.

Najważniejsza w tym projekcie jest 16-bitowa rozdzielczość PWM. Wyższa rozdzielczość PWM jest znacznie bardziej preferowana w MPPT bazującym na przetwornicy Buck. Im wyższa rozdzielczość, tym dokładniejsze będą kroki zmiany napięcia i prądu. Z kolei, im niższa rozdzielczość PWM jest używana, tym wyższa częstotliwość PWM może zostać osiągnięta:

  • dla 16-bitowej rozdzielczości PWM można osiągnąć maksymalnie 1,22 kHz PWM,
  • dla 12-bitowej rozdzielczości PWM – 19,5 kHz PWM,
  • dla 11-bitowej rozdzielczości PWM – 39,06 kHz PWM,
  • dla 10-bitowej rozdzielczości PWM – 78,12 kHz PWM,
  • dla 9-bitowej rozdzielczości PWM – 156,25 kHz PWM,
  • dla 8-bitowej rozdzielczości PWM – 312,5 kHz PWM.

Im wyższa rozdzielczość PWM, tym dokładniejsze będą kroki sterowania napięcia i prądu na wyjściu stabilizatora Buck MPPT. Z kolei, im wyższa częstotliwość PWM, tym wyższa może być moc układu MPPT i tym mniejsze są napięcia tętnienia na wyjściu. Elektronika to gra kompromisów. Przetwornica może dostarczyć większą moc przy wyższej częstotliwości PWM, ale straty przełączania również będą wtedy, do pewnego momentu, rosły. Istnieje również granica między rozdzielczością i częstotliwością PWM, a zegarem układu:

gdzie:

  • f to częstotliwość,
  • MCUclock to zegar mikrokontrolera – dla tego układu wynosi 80 MHz,
  • PWMresolution to rozdzielczość PWM, rozumiana jako ilość poziomów wypełnienia.

Dla n-bitowej rozdzielczości licznika PWMresolution=n². Dla rozdzielczości PWM równej 11 bitów maksymalna częstotliwość PWM wynosi:

Oznacza to, że dla 11-bitowego PWM możemy wybrać częstotliwość PWM wynoszącą 39,0625 kHz lub mniej. Po wypróbowaniu różnych konfiguracji PWM, ostatecznie autor wybrał właśnie 11-bitową rozdzielczość PWM z częstotliwością 39 kHz, jako domyślne ustawienia dla projektu i oprogramowania układowego MPPT. Mniejsze rozdzielczości nie zapewniały stabilnej pracy przetwornicy.

Oprogramowanie ESP32 w Arduino jest również proste, z uwagi na dostępność różnych bibliotek. Wystarczy, że wprowadzimy wymaganą rozdzielczość bitową PWM i częstotliwość, a resztę wykona oprogramowanie. Co więcej, w przypadku ESP32 można użyć niemal wszystkich wyprowadzeń, jako wyjścia PWM.

Moduł ESP32 ma wbudowany 12-bitowy przetwornik ADC (4096 różnych wartości reprezentujących wartość analogową). To czterokrotnie więcej niż w przypadku Arduino Uno czy Nano. W przypadku obwodu z wyjściem 80 V, 30 A przekłada się to na rozdzielczość pomiaru napięcia równą 19,5 mV i rozdzielczość pomiaru prądu równą 7,32 mA. Jest to znacznie wyższa rozdzielczość pomiaru, niż w Arduino. Przetwornik ten jest również szybszy niż w Arduino, co oznacza, że można częściej mierzyć wartości analogowe, a dzięki szybszemu procesorowi cały układ będzie bardziej responsywny. W rzeczywistości jednak nie jest tak prosto.

Niestety ESP32 znany jest z ADC o niezbyt dobrych parametrach – ma wysoce nieliniową odpowiedź, co oznacza, że ADC nie jest tak dokładny, jak można sądzić z wcześniejszych danych. Aby rozwiązać ten problem, autor zdecydował się na zewnętrzny, precyzyjny ADC. Do projektu wybrany został układ ADS1115 lub zamiennie ADS1015 firmy Texas Instruments. Przetworniki ADC z rodziny ADS1×15 mają wbudowane wewnętrzne źródło napięcia odniesienia. Oznacza to, że odczyty wartości analogowych są niezależne od VCC. Dzięki temu jest on mniej podatny na zakłócenia z linii zasilania. Układ ten ma też wbudowany programowalny wzmacniacz, a więc można programowo wybrać różne wzmocnienia. Co najistotniejsze układ ADS1115 ma aż 16-bitową rozdzielczość przy pomiarze z próbkowaniem o częstotliwości 860 Hz. To 64 razy lepiej niż ADC w Arduino Uno. W przypadku konfiguracji MPPT z wyjściem 80 V, 30 A daje to rozdzielczość pomiaru napięcia na poziomie 1,22 mV i rozdzielczość pomiaru prądu na poziomie 0,457 mA.

Układ ADS1115 można w wielu aplikacjach zastąpić ADS1015. Pomimo nieco innych specyfikacji oba układy są kompatybilne z biblioteką Arduino ADS1×15 firmy Adafruit. ADS1115 ma 16-bitową rozdzielczość i częstotliwość próbkowania równą 860 Hz, a ADS1015 12-bitową rozdzielczość i częstotliwość próbkowania 3,3 kHz. Autor przetestował je oba i do testów i większości aplikacji rekomenduje tańszy i słabszy ADS1015, szczególnie, jeśli nie chcemy korzystać z najwyższych poziomów napięć i prądów.

Pomimo takiej samej rozdzielczości, jak w modułach Arduino Nano czy ESP32, zewnętrzny ADC jest o wiele stabilniejszy i oferuje dużo wyższą efektywną dokładność pomiaru. Jest to istotne, ponieważ używając wyższej rozdzielczości PWM, konieczne jest teraz mierzenie coraz drobniejszych zmian napięć czy prądów, aby algorytm zaburzeń w MPPT działał bezbłędnie. Niewielki szum czy oscylacje pomiarów w odczytach czujników mają duży wpływ na śledzenie punktu maksymalnej mocy, w związku z czym zewnętrzny ADC daje o wiele lepsze parametry.

Na rysunku 7 pokazano finalny schemat modułu przetwornicy MPPT. Autor zaprojektował PCB dla tego modułu (dokumentacja dostępna na stronie projektu oraz w jego repozytorium na GitHubie). Moduł po zmontowaniu pokazano na fotografii tytułowej. Pamiętajmy o zainstalowaniu wszystkich elementów mocy na radiatorze, aby zapewnić im chłodzenie. Jeśli zostaną one zainstalowane na jednym radiatorze, jak pokazano na zdjęciu, należy odizolować je elektrycznie od radiatora, inaczej może dojść do zwarcia – metalowa część obudowy TO-220 zazwyczaj połączona jest z środkową nóżką elementu. Aby odizolować tranzystory od radiatora stosuje się na ogół podkładki – silikonowe lub wykonane z miki – oraz izolujące podkładki pod śruby.

Rysunek 7. Schemat modułu przetwornicy z śledzeniem punktu maksymalnej mocy i ładowarką akumulatorów

Oprogramowanie

Projekt MPPT bazuje na środowisku Arduino. Płytkę tę można traktować jak każdą inną płytkę rozwojową Arduino z ESP32. Kod oprogramowania układowego napisany został tak, aby był w miarę uniwersalny i nadawał się do stosowania również w przyszłych konstrukcjach MPPT. Program nazwano Fugu.

Na projekt ten składają się tysiące linii kodu w 9 różnych szkicach Arduino. Oprogramowanie to pobrać można z repozytorium autora na GitHubie (link na końcu artykułu). Nie trzeba w nim prawie nic zmieniać, aby móc od razu uruchomić przetwornicę. Jedyne, co trzeba uzupełnić, to identyfikator SSID i hasło naszej sieci Wi-Fi oraz token uwierzytelniający Blynk, jeśli chcemy, aby telemetria działała w aplikacji na smartfonie. Wszystko inne można skonfigurować w urządzeniu za pomocą interfejsu z LCD.

W dalszej części opisano, krok po kroku, jak przygotować i załadować oprogramowanie do pamięci ESP32.

1. Instalacja Arduino IDE. Wraz z nim należy zainstalować wymagane biblioteki wsparcia dla ESP32 itp.

2. Pobranie źródła Fugu MPPT z GitHuba. Składa się na nie dziewięć plików .ino, które trzeba umieścić w jednym folderze. Folder musi nazywać się tak, jak główny plik .ino (na przykład ARDUINO_MPPT_FIRMWARE_V1.1). Bez tego Arduino IDE nie otworzy poprawnie źródła. Jeśli po kliknięciu któregokolwiek z plików otworzy się Arduino IDE, w którym widoczne są wszystkie zakładki, oznacza to, że udało się poprawnie wczytać źródło. Dzięki podziałowi kodu na karty możliwe jest łatwiejsze uporządkowanie dużego kodu i podział go na osobne, wygodne w zarządzaniu sekcje.

3. Doinstalowanie bibliotek do Arduino IDE. Program korzysta z następujących bibliotek (poza tymi, które domyślnie instalowane są wraz z Arduino):

  • Blynk ESP32,
  • Liquid Crystal I²C LCD (Autor: Robojax),
  • Adafruit ADS1x15.

4. Dodanie poświadczeń dla systemu IoT do kodu. Jeśli system ma korzystać z aplikacji telemetrycznych w aplikacji na telefon, trzeba wykonać następujące kroki:

  • trzeba wprowadzić dane uwierzytelniające sieci Wi-Fi, aby ESP32 mógł połączyć się z siecią Wi-Fi:
    ssid[] = " ";
    pass[] = " ";
  • aplikacja Blynk na telefon ma funkcję prywatności i bezpieczeństwa. Blynk (Legacy) wysyła unikalny token uwierzytelniający do wszystkich użytkowników podczas rejestracji. Ten unikalny token zapewnia, że niepowołani użytkownicy nie mają dostępu do projektu. Trzeba skopiować token uwierzytelniania wysłany przez Blynk na e-maila:
    auth[] = " ";

5. Wybór odpowiedniej biblioteki ADC dla ADS1015 lub ADS1115. W projekcie domyślnie stosowany jest przetwornik ADS1015. Jeśli taki stosujemy w naszym projekcie, nie trzeba nic zmieniać w kodzie. Jeśli zastosowano ADS1115, należy wykonać następujące kroki:

  • zakomentować wiersz Adafruit_ADS1015 ads,
  • odkomentować wiersz Adafruit_ADS1115 ads.

6. Wprowadzenie cen elektryczności. Aplikacja Blynk MPPT może śledzić, ile pieniędzy zaoszczędzono na zbieraniu energii. Aby ustawić walutę oszczędności energii, trzeba określić lokalny koszt elektryczności (np. 0,5 USD/kWh). Wartość ta znajduje się w głównym szkicu kodu, w sekcji USER PARAMETERS, jako zmienna electricalPrice.

Po wprowadzeniu wszystkich opisanych powyżej, wymaganych zmian można przystąpić do kompilacji i załadowania firmware do mikrokontrolera. Aby to zrobić, należy wybrać odpowiednie ustawienia Arduino IDE (nazwy parametrów odpowiadają Arduino IDE 1.8.19 w polskiej wersji językowej):

  • Płytka: ESP32 Dev Module,
  • Upload Speed: 921600,
  • CPU Frequency: 240 MHz (Wi-Fi/BT),
  • Flash Frequency: 80 MHz,
  • Flash Mode: QIO,
  • Flash Size: 4 MB(32 Mb),
  • Partition Scheme: Default 4 MB with spiffs (1,2 MB APP/1,5 MB SPIFFS),
  • Core Debug Level: brak,
  • PSRAM: Disabled,
  • Port: Wybieramy port COM, pod jakim zgłasza się płytka po podłączeniu do komputera PC.

Po skonfigurowaniu Arduino IDE należy kliknąć ikonkę kompilacji, a następnie, gdy program skompiluje się bez błędów przesłać program do Arduino ESP32 MPPT. Po pomyślnym przesłaniu wszystkich szkiców do mikrokontrolera, wyświetlony zostanie komunikat o zakończeniu przesyłania programu.

Kalibracja

Kalibracja sensora prądu nie jest wymagana, ponieważ oprogramowanie układowe Fugu MPPT jest wyposażone w automatyczną kalibrację tego sensora. Kalibrację czujnika temperatury można przeprowadzić zmieniając wartość zmiennej ntcResistance = 9000,00. Jest to wartość znamionowa rezystancji dla rezystora NTC – w projekcie znajduje się opornik NTC o rezystancji 9 kΩ, dlatego też parametr ten równa się 9000,00. Jeśli zastosujemy inny opornik, musimy zmienić tę wartość.

Należy wykonać kalibrację pomiaru napięcia. W tym celu wykonujemy następujące kroki:

  1. Wchodzimy do menu ustawień i pozostawiamy je otwarte dla każdej wersji próbnej. Wejście do menu ustawień zatrzymuje wszystkie procesy ładowania. Trzeba to robić za każdym razem, gdy przesyłamy kod do MPPT, ponieważ MPPT resetuje się z powrotem do menu głównego za każdym razem, gdy przesyłany jest kod;
  2. Podłączamy wejście panelu słonecznego MPPT do zasilacza ustawionego na 60 V;
  3. Podłączamy wyjście baterii MPPT do zestawu baterii;
  4. Podłączamy MPPT do portu USB;
  5. Otwieramy Arduino IDE na komputerze;
  6. Otwieramy monitor portu szeregowego;
  7. Znajdujemy parametr VI w danych;
  8. Mierzymy napięcie na wejściu za pomocą woltomierza;
  9. Jeśli port szeregowy podaje napięcie wyższe lub niższe napięcie od pomiaru woltomierza, należy przeprowadzić kalibrację czujnika napięcia wejściowego;
  10. Znajdujemy parametr inVoltageDivRatio = 40,2156; w sekcji parametrów kalibracji głównego kodu. Zwiększamy lub zmniejszamy go, w zależności od odczytu. Przesyłamy zmodyfikowany kod do modułu;
  11. Mierzymy ponownie napięcie wejściowe za pomocą woltomierza i porównujemy z parametrem VI z portu szeregowego.Powtarzamy kroki 7...10, aż woltomierz zmierzy takie samo napięcie jak VI raportowane na porcie szeregowym;
  12. Analogicznie robimy z napięciem wejściowym, którego dotyczy parametr outVoltageDivRatio = 24,5000;

Umieszczone w kodzie inVoltageDivRatio i outVoltageDivRatio to wstępnie obliczone wartości współczynnika dzielnika napięcia dla wejściowych i wyjściowych dzielników napięcia zastosowanych w schemacie. Zapisywanie wartości rezystorów indywidualnie mogłoby być bardziej zrozumiałe dla użytkownika, ale każdorazowe obliczanie współczynnika wymaga mocy obliczeniowej. W celu skrócenia czasu przetwarzania zapisano parametry, jako już przeliczone, zgodnie ze wzorem (jako odwrotność typowego przedstawienia dzielnika).

Zasada działania

Jak łatwo się domyśleć, oprogramowanie układowe jest zbyt obszerne, aby zaprezentować je tutaj w całości. Ogólna architektura programu zawarta jest w szkicu ARDUINO_MPPT_FIRMWARE_V1.1.ino, którego fragment pokazano na listingu 1.

Listing 1. Fragmenty głównego szkicu programu

void setup() {
// Inicjalizacja portu szeregowego
// Konfiguracja pinów GPIO
// Inicjalizacja generatora PWM
// Ustawienie parametrów PWM
ledcSetup(pwmChannel, pwmFrequency, pwmResolution);
// Konfiguracja pinu wyjściowego jako PWM
ledcAttachPin(buck_IN, pwmChannel);
// Ustawienie wypełnienia PWM
ledcWrite(pwmChannel, PWM);
// Obliczenie maksymalnego wypełnienia
pwmMax = pow(2,pwmResolution)-1;
pwmMaxLimited = (PWM_MaxDC*pwmMax)/100.000;
// Inicjalizacja ADC
// Inicjalizacja GPIO
// Uruchomienie multitaskingu na dwóch rdzeniach
xTaskCreatePinnedToCore(coreTwo, „coreTwo”, 10000, NULL, 0, &Core2, 0);
// Inicjalizacja i załadowanie danych z pamięci Flash
// Inicjalizacjha LCD
// Komunikat powitalny
Serial.println(„> MPPT HAS INITIALIZED”);
}

void loop() {
//Zakładka #2 – Pomiar danych z sensorów i ich przeliczenia
Read_Sensors();
//Zakładka #3 – Algorytmy wykrywania błędów
Device_Protection();
//Zakładka #4 – Proces systemowy
System_Processes();
//Zakładka #5 – Algorytm ładowania akumulatorów
Charging_Algorithm();
//Zakładka #6 – Wbudowana telemetria USB / UART
Onboard_Telemetry();
//Zakładka #8 – Algorytmy wyświetlania danych na LCD
LCD_Menu();
}

Program ten ma, typową dla Arduino sekcję void setup() oraz void loop(). Program korzysta z obu rdzeni układu ESP32. Rdzeń 0, który normalnie odpowiada tylko za obsługę stosu Wi-Fi, wykorzystany został również do konfiguracji sieci bezprzewodowej oraz obsługi subsystemu telemetrii. Zastosowana do tego jest funkcja coreTwo, która uruchamia wymienione subsystemy – listing 2.

Listing 2. Funkcja coreTwo, która uruchamia subsystemy na rdzeniu 0

void coreTwo(void * pvParameters){
setupWiFi(); // Konfiguracja Wi-Fi
while(1){
Wireless_Telemetry(); // Funkcja telemetryczna
}

Kluczowa część programu realizowana jest w funkcji loop, jak pokazano na listingu 1. Funkcja ta, działając w pętli, uruchamia po kolei funkcje odpowiedzialne, za odczyt danych z sensorów, wykrywanie błędów, sterowanie algorytmem ładowania itd. Poszczególne funkcje są definiowane w różnych modułach oprogramowania – osobnych szkicach.

Opis algorytmów układu

W pliku 4_Charging_Algorithm.ino zawarto kluczową część systemu – dwa algorytmy, sterujące systemem. Pierwszy to algorytm poszukujący punktu maksymalnej mocy ogniwa PV i utrzymujący prąd i napięcie wyjściowe w zadanych granicach (są one ograniczone jedynie od góry, z wiadomych względów). Drugi algorytm jest prostszy – jest to tryb zasilacza, który stara się utrzymywać napięcie i prąd na wyjściu na zadanym poziomie, ale nie uwzględnia MPPT. Przeznaczony jest do pracy, jako np. ładowarka ogniw zasilana z zasilacza sieciowego itp. To, jaki tryb jest aktywny, wybierane jest w menu konfiguracyjnym urządzenia, a na poziomie kodu decyduje o tym zmienna MPPT_Mode. Gdy jest ona równa 0 urządzenie działa jak prosta ładowarka, a gdy jest równa 1 – to, jako ładowarka z MPPT.

Kod algorytmu pokazano na listingu 3. Instrukcje te znajdują się wewnątrz funkcji Charging_Algorithm(), która uruchamiana jest w głównej pętli programu (listing 1). Gdy MPPT_Mode == 0 aktywowana jest pierwsza część algorytmu, która sprawdza tylko, czy napięcie i prąd wyjściowe mają odpowiednią wartość. Gdy któreś z nich jest powyżej zadanego poziomu, układ zmniejsza współczynnik wypełnienia sygnału sterującego przetwornicą Buck, który przechowywany jest w zmiennej PWM. Jeśli natomiast napięcie wyjściowe jest poniżej zadanego napięcia ładowania, to PWM jest zwiększane. PWM jest zmieniany o jedną jednostkę, więc algorytm ten działa płynnie i bez żadnych nagłych skoków. Po zmianie parametru PWM uruchamiana jest funkcja PWM_Modulation(), która zmienia wypełnienie sygnału generowanego na pinie GPIO, sterującym przetwornicą.

Listing 3. Fragment kodu opisującego algorytmy sterowania MPPT i ładowarką

if(MPPT_Mode==0){
if(currentOutput>currentCharging) {PWM--;}
else if(voltageOutput>voltageBatteryMax){PWM--;}
else if(voltageOutput<voltageBatteryMax){PWM++;}
else{}
PWM_Modulation();
}
else{
if(currentOutput>currentCharging){PWM--;}
else if(voltageOutput>voltageBatteryMax){PWM--;}
else{
if(powerInput>powerInputPrev && voltageInput>voltageInputPrev) {PWM--;}
else if(powerInput>powerInputPrev && voltageInput<voltageInputPrev){PWM++;}
else if(powerInput<powerInputPrev && voltageInput>voltageInputPrev){PWM++;}
else if(powerInput<powerInputPrev && voltageInput<voltageInputPrev){PWM--;}
else if(voltageOutput<voltageBatteryMax) {PWM++;}
powerInputPrev = powerInput;
voltageInputPrev = voltageInput;
}
PWM_Modulation();
}

W odmiennym przypadku aktywowana jest druga, bardziej złożona część algorytmu. W pierwszej kolejności program sprawdza, czy prąd i napięcie ładowania nie przekracza ustawionych wartości maksymalnych i jeśli tak jest zmniejsza PWM o jedną jednostkę. Następnie uruchamiany jest algorytm MPPT, który poszukuje punktu maksymalnej mocy. Algorytm sprawdza wyjściową moc i napięcie ogniwa fotowoltaicznego i porównuje z tymi samymi parametrami w poprzednim cyklu programu. Algorytm zmian wypełnienia pokazany jest w tabeli 1.

Następnie algorytm sprawdza, czy napięcie na wyjściu przetwornicy nie przekracza maksymalnego napięcia ładowania ogniwa – jeśli tak jest, redukowany jest PWM.

Po wprowadzeniu tych zmian, program zapisuje wartości napięcia i mocy na ogniwie, które będą używane w kolejnym cyklu działania pętli, a następnie uruchamia funkcję PWM_Modulation(), aby zapisać nową konfigurację do modułu generującego PWM na wyjściu mikrokontrolera.

Telemetria przez USB

System jest wyposażony w kanał telemetryczny na porcie USB, emulującym port UART. Funkcji tej można używać do diagnostyki, rozwiązywania problemów, poprawiania projektu, optymalizacji kodu lub eksperymentowania z tworzeniem własnego algorytmu MPPT. Dostęp do tych danych można uzyskać za pośrednictwem Arduino IDE, z pomocą monitora szeregowego lub dowolnego innego terminala dla portu szeregowego.

Zmienne w kanale telemetrycznym USB wysyłane są w postaci tekstu z następującymi oznaczeniami:

  • ERR – liczba obecnych błędów,
  • FLV – zbyt niskie napięcie systemu (nie można wznowić pracy),
  • BNC – wskaźnik braku podłączenia akumulatora,
  • IUV – wskaźnik zbyt niskiego napięcia wejściowego,
  • IOV – wskaźnik zbyt dużego napięcia wejściowego,
  • OOV – wskaźnik zbyt dużego napięcia wyjściowego,
  • OOC – wskaźnik przetężenia wyjścia,
  • OTE – wskaźnik przegrzania,
  • REC – Powrót do sprawności po błędzie,
  • MPPTA – wskaźnik włączenia algorytmu MPPT,
  • CM – tryb wyjścia (1 = tryb ładowarki, 0 = tryb zasilacza),
  • BYP – wskaźnik MOSFET jednostki sterującej prądem wstecznym,
  • EN – wskaźnik włączenia Buck (1 = MPPT Buck działa, 0 = nie działa),
  • FAN – wskaźnik pracy wentylatora,
  • Wi-Fi – wskaźnik włączenia Wi-Fi,
  • PI – moc wejściowa (moc pobierana z energii słonecznej w watach),
  • PWM – PWM podawany do drivera IR2104 (wartość dziesiętna),
  • PPWM – dopuszczalny limit poziomu PWM,
  • VI – napięcie wejściowe (napięcie panelu słonecznego w woltach),
  • VO – napięcie wyjściowe (napięcie akumulatora w woltach),
  • CI – prąd wejściowy (prąd panelu słonecznego w amperach),
  • CO – prąd wyjściowy (prąd ładowania akumulatora w amperach),
  • Wh – pobrana energia (w watogodzinach),
  • Temp – temperatura radiatora (w stopniach Celsjusza),
  • CSMPV – kalibrowany punkt zerowy czujnika prądu,
  • CSV – wyjście analogowe (napięcie) z sensora prądu (chwilowe),
  • VO%Dev – procentowe odchylenie VO od ustawionego maksymalnego wyjściowego napięcia akumulatora (w %),
  • SOC – stan naładowania akumulatora (w %),
  • LoopT – czas pętli, czas potrzebny na wykonanie jednego cyklu pętli kodu (w milisekundach).

Dla zmiennych typu bool, takich jak FLV na EN, 1 oznacza prawdę, a 0 fałsz.

Aplikacja telemetryczna

Moduł zapewnia również telemetrię przez Wi-Fi, jak opisano wcześniej. Zawiera do tego Darmową aplikację do rejestrowania danych bazującą na serwerze. Aplikacja na telefon MPPT powstała na platformie Blynk Legacy. Jest dostępna zarówno na Androida, jak i iOS. Aby zainstalować i uruchomić aplikację należy po kolei:

  • pobrać aplikację ze sklepu i zarejestrować się, jako nowy użytkownik,
  • zeskanować kod QR z rysunku 8 w aplikacji Blynk Legacy,
  • aplikacja dla MPPT zostanie automatycznie załadowana,
  • kliknięcie przycisku w aplikacji pozwoli uruchomić wyświetlanie danych,
  • można dodać skrót do menu głównego, aby móc bezpośrednio otwierać aplikację MPPT bez konieczności ciągłego przeglądania menu.
Rysunek 8. Kod QR potrzebny do załadowania aplikacji MPPT w Blynk Legacy

Funkcje aplikacji MPPT Blynk:

  • wyświetla transmisję na żywo energii zebranej z paneli słonecznych,
  • wyświetla moc panelu słonecznego (waty),
  • wyświetla napięcia i prądy panelu słonecznego,
  • wyświetla poziom naładowania baterii w %,
  • wyświetla napięcie i prąd ładowania akumulatora,
  • wyświetla pobraną energię w kWh,
  • wyświetla wartość zaoszczędzonej energii,
  • wyświetla temperaturę,
  • prezentuje trzy różne wykresy w czasie rzeczywistym z wyświetlanych danych,
  • dane są rejestrowane w bezpłatnej bazie danych Blynk przez okres roku.

Ekran aplikacji pokazano na rysunku 9.

Rysunek 9. Ekran aplikacji telemetrycznej dla modułu MPPT w Blynk Legacy

Podsumowanie

Zaprezentowana konstrukcja może stać się podstawą wielu systemów, między innymi domowych magazynów energii itp. Autor podaje, że odnotował współczynnik sprawności konwersji na poziomie 98,6% przy mocy 270 W, napięciu wejściowym 61,4 V i napięciu wyjściowym 27,00 V. Nawet, jeżeli sprawność ta jest nieco zawyżona z uwagi na błędy pomiaru, to tranzystory MOSFET, nawet bez aktywnego chłodzenia ledwo się nagrzewały.

Układ, jakkolwiek kompletny i gotowy do działania, pozostawia pewne pole do zmian. Autor wskazuje na potencjalne modyfikacje, jakie można wprowadzić do układu:

  • wymiana tranzystorów na takie, które pozwalają na pracę z napięciem do 150 V DC. Oprócz tych elementów trzeba przeliczyć dzielniki napięcia, zmienić oprogramowanie itd.;
  • zwiększenie napięcia akumulatorów do 80 V, co wymaga zmian w oprogramowaniu i modyfikacji dzielnika pomiarowego,
  • zmiana wyświetlacza z LCD na AMOLED,
  • zmiana indukcyjności na większą i zamontowanie na zewnątrz obudowy,
  • połączenie równolegle czterech tranzystorów MOSFET w celu zmniejszenia rezystancji – pozwala to zwiększyć prąd przetwornicy.

Nikodem Czechowski, EP

Źródła:

  1. https://www.instructables.com/DIY-1kW-MPPT-Solar-Charge-Controller/
  2. https://github.com/AngeloCasi/FUGU-ARDUINO-MPPT-FIRMWARE
Artykuł ukazał się w
Elektronika Praktyczna
wrzesień 2023
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik listopad 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje październik 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna listopad 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich listopad 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów