neděle 7. února 2016

MPPT pro 48V 500W systém

V rámci školní zakázky se mi podařilo nechat vyrobit desku pro navržený MPPT pro 48V 500W systém.
Jedná se o synchronní buck - boost topologii s jednou tlumivkou. Měnič tedy umožňuje jak snižování, tak zvyšování napětí z panelů.
Řízení obstarává procesor ARM Cortex M3 - STM32F103C8T6
Byl navržen pro nabíjení akumulátorů, základními vstupy jsou napětí akumulátorů a jejich nabíjecí proud. Obsahuje dva regulátory, regulátor žádaného napětí na panelech a jemu nadřazený regulátor napětí akumulátorů. Pokud napětí akumulátorů dosáhne žádané hodnoty 55,7V, regulátor zvyšuje žádané napětí panelů, které tak díky VA charakteristice dávají menší proud. Regulátor tak udržuje dané napětí akumulátorů.
Pokud akumulátory nejsou nabité, regulátor dosazuje jako žádanou hodnotu napětí na panelech napětí vycházející z MPPT algoritmu.
MPPT algoritmus je klasický typ, který hledá bod maximálního výkonu, zde prostě maximální nabíjecí proud tak, že zkouší zvyšovat nebo snižovat žádané napětí panelů a podle změny nabíjecího proudu pokračuje ve snižování resp. zvyšování, nebo obrátí směr, pokud je naměřený proud již menší, než předchozí.
Klíčová je zde především frekvence výpočtu. Při snižování napětí se vybíjí vstupní kapacity měniče a ten tak vždy naměří větší proud, při zvyšování naopak. Je tedy třeba výpočet zpomalit, aby měřil skutečnou změnu danou VA char. panelů. Naopak příliš pomalý výpočet není schopen reagovat na reálné změny jasno/mrak a ustalování by trvalo například až několik minut.
Zvolil jsem synchronní topologii kvůli minimalizaci ztrát. Ovšem její nevýhodou se ukázala absence výstupní diody, která by přirozeně zabránila toku energie z akumulátorů do panelů. Správná funkce je tak závislá právě na SW. Měnič je symetrický z obou stran posazený mezi dva relativně výkonné zdroje resp. spotřebiče a při nevhodném řízení je schopen např. posílat energii z akumulátorů do panelů místo opačně a nebo zkratovat natvrdo jeden nebo druhý vstup.
Zapojení obsahuje jedinou HW ochranu a to proti přebíjení. Při vzrůstu napětí akumulátorů přes 59V se klopným obvodem vypnou oba drivery a měnič bez zásahu procesoru vypne všechny výkonové tranzistory v můstku. Opětovný start je možný jedině restartem napájení z panelů. Buď vypínačem ručmo, nebo automaticky "druhý den ráno".
Napájení driverů a procesoru je řešeno pomocným spínaným zdrojem se starým obvodem 5H0365R, jehož předností je velká úspora součástek, velký vstupní rozsah napětí a velmi malá klidová spotřeba. Přestože se jedná o síťový zdroj, bezproblému pracuje od 15V. Pomocný zdroj dává 5V a 15V.

Schema:

Pár fotek:
 Osazená deska

 Zimní den. Při malém proudu přepne a drží nulový rozdíl napětí, protože algoritmus by již kvůli nedostatečnému rozlišení při malých proudech nemohl fungovat. Při nulovém rozdílu jsou navíc nejmenší ztráty.

 Start s částečně zasněženými panely, které dávaly jen poloviční napětí přes bypass diody, algoritmus naskočil úspěšně za 15 vteřin.

 Pokud hodinu měří nulový proud, vypne můstek a tím i napájení procesoru. Nastartuje znovu další den ráno. (A nebo bohužel hned za pár vteřin pokud ještě není dostatečná tma)

Závěr:
Uvedl jsem zde jedno z mnoha možných řešení MPPT nabíjecího měniče. Článek slouží spíš pro inspiraci nemá být návodem. Můstek je možno řídit mnoha typy procesorů, stejnětak jako SW v něm je čistě na fantazii každého.

Příloha:
/* MPPT algoritmus */
        if(mppt)
//flag
        {
            if(I_aku_avg < I_aku_predchozi)
            {
                add = ~add + 1;
            }
            I_aku_predchozi = I_aku_avg;
            panely_mppt = panely_mppt + add*200;
//0,4V za vterinu
            if(panely_mppt < 32000)
            {
                panely_mppt = 32000;
//dolni limit 32V
                add = ~add + 1;
            }
            if(panely_mppt > 65000)
            {
                panely_mppt = 65000;
//horni limit 65V
                add = ~add + 1;
            }
            mppt = 0;
        }

/* Regulator napeti na akumulatorech */
            Err_aku = U_aku - 55650;
//Max napeti akumulatoru pri nabijeni
            Out_aku = Sum_aku + Err_aku/10;
      
          
 /* Omezovac zadaneho napeti na panelech */
            if(Out_aku > 80000)
            {
                panely_ref = 80000;
            }
            else
            {
                if(Out_aku < panely_min)
                {
                    panely_ref = panely_min;
                }
                else
                {
                    panely_ref = Out_aku;
                }
            }
            Exc_aku = panely_ref - Out_aku;
            Sum_aku = Sum_aku + Err_aku/20 + Exc_aku/20;
      
          
 /* Regulator napeti na panelech */
            Err = U_panely - panely_ref;
            Out = Sum + Err/5;
      
            /* Omezovac stridy */
            if(Out > 30000)
//abychom netopili zelezoprachem tlumivky
            {
                strida = 30000;
//boost
            }
            else
            {
                if(Out < -30000)
                {
                    strida = -30000;
//buck
                }
                else
                {
                    strida = Out;
                }
            }
            Exc = strida - Out;
            Sum = Sum + Err/10 + Exc/10;
          
            
/* Vlozeni stridy do komparacnich jednotek */
            if(strida >= 0)
            {
                TIM1->CCR1 = 775 - strida/100;
//boost menic
                TIM1->CCR2 = 775;
//97,4%
            }
            else
            {
                TIM1->CCR1 = 775;
                TIM1->CCR2 = 775 - ~(strida/100) + 1;
//buck menic
            }

Žádné komentáře: