Superkondenzátory místo akumulátorů? (4)

V čtvrtém dílu článku o možnostech aplikací superkondenzátorů se zaměříme na obsluhu sad, zejména na omezovače napětí a balancery.

Dokud používáme jediný superkondenzátor nebo sadu spojenou paralelně kvůli zvýšení kapacity, prakticky se nemusíme o sadu nijak starat. Jakmile začneme spojovat superkondenzátory pro zvýšení provozního napětí sériově, musíme také začít balancovat, to je stejné jako u Li-pol. Účelem balancování je vyrovnat napětí jednotlivých kondenzátorů v sériově spojené sadě a současně zajistit, aby napětí na žádném z nich nepřekročilo přípustnou mez.

Špičkové kondenzátory mají toleranci kapacity kolem 5%, levné 20% a více. Při kompletování do sad výrobci vybírají součástky se stejnou kapacitou, my v podstatě musíme udělat totéž, nebo přinejmenším vyřadit hodně odlišné kusy. Proč? Při nabíjení společným proudem bychom buď museli ukončit nabíjení v okamžiku, kdy na nejmenší kapacitě je mezní napětí (to jde, ale připravíme se o nemalou část uložitelné energie), nebo musíme snížit nabíjecí proud a odvést ho jinou cestou mimo kondenzátor, který už je nabitý. Když to neuděláme, některý kondenzátor sady se přebije a zničí. Čím chceme nabíjet rychleji (větším proudem), tím je vyrovnanost kapacit a automatická kontrola důležitější.

I když budeme mít všechny kondenzátory v sadě se stejnou kapacitou, není vyhráno. Sadu uložíme částečně nebo plně nabitou. Uplatní se samovybíjení, které také může být velmi rozdílné. Po několika dnech může být jeden kus nabit na 90%, druhý na 10%. Jakmile budeme chtít takto „rozjetou“ sadu dobít nebo vybít, budeme mít velký problém. Při vybíjení se může stát, že článek s nejnižším napětím se vybije do nuly a pak přepóluje, čímž se zničí, na celé sadě při tom může být ještě relativně velké napětí.

V první řadě se musíme k napětí jednotlivých článků dostat, takže kromě silových vývodů z konců sady je třeba vyvést také pomocný vícežilový kabel, na kterém budeme mít k dispozici napětí jednotlivých článků (kondenzátorů). Tomuto kabelu budeme dále stejně jako u Li-pol říkat „servisní kabel“ a může být na podstatně menší proud, než silový kabel.

Jako „balancer“ je někdy uváděno i zapojení, v němž je paralelně ke každému z kondenzátorů sady přidán rezistor s odporem v rádu desítek až stovek ohmů. Napětí se v jistém smyslu opravdu vyrovnává, dokonce nepřetržitě, článek s vyšším napětím se vybíjí rychleji. Řeší dokonce problém různého samovybíjení, vše se postupně (dost rychle) vybije do nuly.

bal_odpory

„Balancer“, který vždy a vše vybíjí až do nuly

Toto je částečně použitelné v aplikacích, kde se kondenzátory jen občas rychle nabijí a bezprostředně poté zase vybijí, případně kde nejde o to energii uchovat a využít, ale co nejrychleji pohltit a následně během delší doby s přiměřeným chlazením zlikvidovat, v takovém případě jsou ztráty požadovaným cílem. Naprosto se nehodí pro aplikace typu záložní zdroje, kde jsou kondenzátory trvale pod napětím. Tato koncepce není schopna dostatečně články ochránit při nestejné kapacitě a rychlém nabíjení, protože proud „svedený“ rezistory musí být mnohem menší, než nabíjecí proud (jinak by sadu vůbec nešlo nabít), nijak neřeší mezní napětí.

bal_zenerky

Omezovač se Zenerovými diodami

Obvod se Zenerovými diodami nevybíjí kondenzátory do nuly, ale (s vybíranými diodami) na stejné napětí. Kdyby byla charakteristika diod ideální (žádný proud do mezního napětí a pak libovolný proud při mezním napětí), byl by to v principu omezovač, ne balancer v pravém smyslu slova. Napětí by průběžně nesrovnával, jen u všech článků při nabíjení omezil na hodnotě maxima. Je tu ale ještě jedna podmínka, která by musela být splněna, nabíjecí proud by nesměl překročit proud, který může téct diodami. A to je problém, protože ZD s tímto napětím snesou desítky, maximálně něco přes 100 mA.

Reálně není charakteristika diod dostatečně ostrá, vybíjí se i ne zcela nabité články, proud teče už od 2,4 V, takže částečná funkce balanceru se skutečně dá najít.  Tento způsob neřeší vliv rozdílného samovybíjení, pod jistou mezí napětí nevyrovnává. Je to omezovač, ovšem slabý a nepřesný. Přes to se dá použít v případě, že se typicky nevyužívá plný rozsah napětí kondenzátorů (řekněme 2,3 V), nabíjecí proud je malý a je kombinovaný s nějakou formou ošetření samovybíjení, třeba s předchozími rezistory (stačí vyšší odpor).

bal_431

Omezovač s TL431

Mnohem lépe použitelnou variantou je podobný ochranný obvod (omezovač) s obvodem TL431. Lze jej nastavit velmi přesně na požadované napětí a má výborně ostrou charakteristiku. Dá se prakticky použít tam, kde se kondenzátory nabíjejí malým proudem. Jeden obvod může svést proud až 100 mA, obvodů se může (s výběrem IO na souběh) zapojit několik paralelně. Je stabilní, dostupný, relativně levný. Nevýhodou je, že nenulová spotřeba obvodu při napětí pod úrovní nastaveného zvyšuje samovybíjení, ale jde o proud většinou přijatelný. Činnost omezovače není nijak indikována. Obecně můžeme u všech omezovačů uvádět zapojení jen pro jeden superkondenzátor, pro všechny v sadě je zapojení stejné (každý funguje sám za sebe a o ostatních „neví“).

bal_LED

Omezovač / indikátor s LED

Další variací na podobné téma je zapojení s LED. Použije se červená LED v sérii s univerzální křemíkovou diodou. Úbytek napětí na této kombinaci při jmenovitém proudu je o málo nižší než 2,7 V, svit ale nasazuje už asi při 2,2 V. Stavebnice podobného „balanceru“ se prodávají v USA i za více než 15 USD (!), přitom vzhledem k nepatrnému proudu kolem 20 mA reálně o ochranu ani balancování nejde, jen o (ne zrovna přesnou) indikaci nabití. Přes to, není-li nic lepšího, doporučuji alespoň toto levné zapojení. Nestejný nebo nezvykle silný svit LED dává zřetelně najevo, že je něco v nepořádku a musí zasáhnout člověk. Je to spíš indikátor než omezovač, natož balancer.

Pro ochranu sad superkondenzátorů se vyrábějí i speciální polovodiče (například ALD810025, ALD910025) a integrované obvody. Drtivá většina z nich je určena pro 2 – 4 kondenzátory v sérii a malý proud (desítky mA), používají se v zálohovacích obvodech napájení pamětí a CMOS logiky. Jednou z výjimek je obvod LTC3350, který obsahuje i spínané zdroje pro nabíjení a vybíjení až čtyř kondenzátorů v sérii, funguje jako skutečný balancer a díky vnějším výkonovým prvkům pracuje typicky s proudem vyšším než 10 A

Dostáváme se k omezovačům s podstatně vyšším pracovním proudem, které jako výkonový prvek používají v součinnosti s rezistory FET s buzením menším napětím než 3,3 V. Jejich konstrukci komplikují dvě věci, jednak malé napětí meze jen 2,5 až 2,8 V, a za druhé chybějící dolní mez napětí, které se plynule a pomalu pohybuje od nuly do horní meze. Znamená to, že musíme používat referenční zdroje v oblasti 1 až 1,5 V, operační zesilovače s napájením menším než 2 V (!) a definovaným chováním při nižším napětí, a také FET tranzistory s velmi nízkým řídícím napětím. Není to nemožné, ale není to ani standardní.

omezovac_FET

Vyráběný omezovač s FET pro jeden (válcový) kondenzátor

Omezovače tohoto typu se vyrábějí v podobě kruhových desek určených pro připájení na vývody superkondenzátorů nebo jako širší „propojky“ kondenzátorů s vývody na šroubech. „Propojky“ nevedou výkonový proud, naopak se zapojují přes dvojici kondenzátorů spojených měděným můstkem na druhé straně a s tímto můstkem jsou propojeny tenkým vodičem.

Typické zapojení omezovače, které se dá najít v mnoha drobných modifikacích, je na následujícím obrázku. Obvod LM385 slouží jako reference pevného napětí 1,235 V pracující s malým proudem od 10 μA. Operační zesilovač je určen pro napájení nesymetrickým napětím 1,6 až 5,5 V a má také nepatrnou spotřebu kolem 10 μA. A konečně FET PMV30UN může spínat proud až 5,7 A, vydrží ztrátu 1,9 W (spíše špičkově) a k otevření pro průchod proudu 1 A mu stačí buzení na úrovni 1,2 V, při 2 V je s rezervou plně otevřen. Kromě použitých součástek není na zapojení nic zajímavého, při vzrůstu napětí nad 2,6 V se tranzistor otevře a přes rezistory teče proud necelých 0,4 A. Hlavní výkonová ztráta je na rezistorech, malá část na tranzistoru.

bal_FET

Omezovač s OZ a FET

Omezovače plní svou úlohu na 100% jen v případě, že nabíjecí proud není větší než proud, který dokáže omezovač odvést. Má smysl je použít třeba při nabíjení z malého solárního panelu. Na rychlé nabíjení zpravidla nestačí a rozdíly vzniklé samovybíjením dorovnávají jen málo, protože působí až po dosažení meze napětí. U Li-pol akumulátorů se od jejich používání až na výjimky ustoupilo už před léty z přesně stejných důvodů.

bal_358_1

Balancer pro dva kondenzátory

Na předchozím schématu je trvale pracující aktivní balancer pro dva superkondenzátory. Oproti předchozím omezovačům pracuje OZ ve výhodnějším režimu, napájecí napětí je dvojnásobné. Balanční proud se odebírá přímo z výstupu OZ. I když pracuje s malým proudem, účinek je v praxi nesrovnatelně větší, než u jakéhokoli omezovače, protože zapojení pracuje průběžně a nepřetržitě od okamžiku, kdy napětí stačí k jeho napájení. Toto zapojení je „čistým“ balancerem, stará se jen o vyrovnání napětí, nijak nekontroluje jeho velikost a překročení meze. Používá se nejčastěji právě pro dva články (napětí max. 5,4 V), i když se prakticky stejně dá sestavit balancer třeba pro šest článků (následující schéma záložního zdroje 12 V s balancerem pro 5 článků).

zaloha_TV

Záložní zdroj 12 V

Všechny předchozí způsoby ochrany fungují, ale prakticky použitelné jsou jen při splnění určitých (dost omezujících) podmínek, především při malém nabíjecím proudu. Jedinou cestou k rychlému a bezpečnému nabíjení je spolupráce nabíječe a balanceru, jejich sloučení do jediného funkčního celku.

Typický algoritmus činnosti vypadá asi takto: Pustí se nabíjecí proud a v krátkých intervalech se kontroluje napětí na všech článcích sady jednotlivě. Balancer běží průběžně celou dobu a přes rezistory ubírá část nabíjecího proudu (paralelně je vybíjí) několika článkům s nejvyšším napětím, toleruje se rozvážení kolem 5 nebo 10 mV. Proud balancerem bývá poměrně malý, často kolem 1/10 maximálního nabíjecího proudu. Napětí roste a článek s nejvyšším napětím se dostává blízko k mezi. Balancer by už nezvládl jeho ochranu, takže společný mikrokontrolér začne plynule ubírat nabíjecí proud a neustále kontroluje napětí. Je-li to nutné, ubere proud až na úroveň balančního (balancer může pracovat na 100%) a v tomto stavu setrvá tak dlouho, dokud se napětí článků nesrovná. Je vyrovnáno, proud postupně dále klesá, ani jeden z kanálů balanceru už nepracuje na plný výkon, proces končí.

V závěru si ukážeme příklad řešení nabíječe / balanceru s Arduinem. Jde jen o příklad činnosti a zejména balancování, takže nabíjecí část nahradíme žárovkou a nabíjecí proud budeme spínat pomocí relé. Vybíjecí obvod balanceru je u každého kondenzátoru. Ovládá se přes optočlen, ten překlene různé úrovně napětí. V tomto případě byly pro vytracení výkonu použity rezistory 10 Ω (proud kolem 0,25 A), nicméně bez změny zapojení lze použít i rezistory 4,7 Ω (cca 0,5 A) a pro ještě větší balanční proud a menší odpor FET tranzistory určené pro buzení napětím 3,3 V.

zaloha_TV2

Vybíjecí blok balanceru

Celkové schéma nabíječe / balanceru je na dalším schématu. Na napěťové úrovně mikrokontroléru je potřeba převést snímání napětí z bodů mezi kondenzátory, to zajistí odporové děliče. Tento jednoduchý způsob lze dobře použít jen při malém počtu článků. Problém je v tom, že AD převodník má své omezené rozlišení a po vydělení napětí na obou koncích kondenzátoru musíme udělat rozdíl, takže využíváme jen velmi omezenou část rozsahu AD převodníku. Čím více článků, tím je přesnost nižší. Kromě toho se jednotlivé články měřením nestejně vybíjejí.

zaloha_TV3

Balancer / nabíječ jako doplněk k Arduinu Uno

Pro větší nároky nebo počet článků by bylo třeba použít jiný způsob, pomocí elektronických přepínačů „zkopírovat“ napětí vybraného článku do malého kondenzátoru, pak odpojit a jiným elektronickým přepínačem připojit tento kondenzátor na vstup AD převodníku. Takto je možné obsloužit libovolný počet článků až do napěťové meze přepínače, k měření se používá jediný AD převodník a současně všechna měření mohou využít plný rozsah převodníku.

Jak naše zapojení s Arduinem funguje? Není-li součet napětí na kondezátorech větší než 12,5 V a současně na žádném z nich není napětí větší než 2,65 V, zapne se nabíjení. Vše pracuje v cyklech po 3 s, balancer je v činnosti nepřetržitě. Nejprve se zjistí nejmenší napětí jednotlivého článku, přičte se k němu malá tolerance (zde 0,02 V) a pro všechny články, jejichž napětí je vyšší, se zapne vybíjení balancerem. Mikrokontrolér současně odesílá po sériové lince napětí celkové i jednotlivých článků a v podobě čísel 0 nebo 1 i stav nabíjení a sepnutí jednotlivých kanálů balanceru.

Podobný balancer bezpečně zvládne libovolně velké „rozvážení“ napětí. Snaží se co nejrychleji nabít kondenzátory na pracovní napětí, ale jakmile se libovolný článek přiblíží mezi 2,7 V, odpojí nebo omezí nabíjení. Nabíjecí proud může být bez nebezpečí mnohem větší než proud balanční. Je-li sada vyrovnaná, rychlost nabíjení se plně využije, když není, práce se prodlouží a nic neohrozí. V tom je zásadní rozdíl proti balancerům bez vazby na nabíjení nebo omezovačům.

Začne-li se silně rozvážená sada vybíjet, společný proud ten kondenzátor, který měl nejmenší napětí, nejprve vybije do nuly, a pak přepóluje a poškodí. Určitou ochranu může poskytnout dioda přes každý kondenzátor, ale i když má malý úbytek, nestačí. Proto se napětí jednotlivých kondenzátorů porovnává i s minimem a při překročení meze se musí spustit výstraha nebo lépe vypnout odběr. V našem případě byla při externím napájení mikrokontroléru nastavena mez 0,1 V, při napájení z kondenzátorů musí být kromě toho hlídána i celková minimální mez napětí, aby mikrokontrolér balanceru ještě vůbec pracoval a mohl zasáhnout. Při nebezpečí přepólování se nastaví výstup D13 na úroveň H (vypne odběr) a také rozsvítí LED na Arduinu. Program balanceru byl následující:

// Balancer pro 5 superkondenzatoru (Arduino UNO)
float U[6];                             // pole hodnot napeti
int cykl;                               // pocitadlo cyklu
float napeti = 0.00326;                 // prevod ADC/napeti
float tolerance = 0.02;                 // tolerance balanceru
float maxHodnota;                       // max napeti clanku

void setup() {              
  pinMode( 2, OUTPUT);                  // vybijeni 1. clanku H
  pinMode( 3, OUTPUT);                  // vybijeni 2. clanku H
  pinMode( 4, OUTPUT);                  // vybijeni 3. clanku H
  pinMode( 5, OUTPUT);                  // vybijeni 4. clanku H
  pinMode( 6, OUTPUT);                  // vybijeni 5. clanku H
  pinMode( 7, OUTPUT);                  // zapnuti nabijeni H
  pinMode(13, OUTPUT);                  // LED na desce
  analogReference(EXTERNAL);            // reference 3.3V tj. 0,00326 V/bit
  Serial.begin(115200);                 // seriova linka 115200Bd
}

void loop() {                           // hlavni smycka programu
  cykl++;                               // zvysit pocitadlo cyklu
  mereni();                             // zmerit napeti
  Serial.print(cykl);                   // vypis - cykl
  Serial.print(" ");                    //   oddelit  
  for (int i = 0; i<6;i++){             // vypis celkoveho napeti
    Serial.print(U[i],2);               //   a pak clanku
    Serial.print(" "); }
  maxHodnota = U[1];                    // zjistit max napeti clanku
  for (int i = 2; i<6; i++){
    if(U[i]>maxHodnota){maxHodnota = U[i];}}
  if ((U[0]<12.50)&&(maxHodnota<2.65)){ // nabijet kdyz je <12V a nic nepresahuje
    digitalWrite(7,HIGH);               // zapnout nabijeni
    Serial.print("1 ");                 // vypis - nabijeni
    } else {
    Serial.print("0 ");}
  if ((U[0]>12.52)||(maxHodnota>2.65)){ // vypnuti nabijeni s hysterezi
    digitalWrite(7,LOW);}
  float minHodnota = U[1];              // zjistit min napeti clanku
  for (int i = 2; i<6; i++){    
    if(U[i]<minHodnota){
      minHodnota = U[i];}
  }
  if (minHodnota < 0.1){                // kontrola nizkeho napeti
    digitalWrite(13,HIGH);              //   hrozi prepolovani !!
    } else {                            //   signal na D13
    digitalWrite(13,LOW);}
  minHodnota += tolerance;              // k minimu pricist toleranci
  for (int i = 1; i<6;i++){             // pro clanky prevysujici minimum
    if (U[i]>minHodnota){               //   zapnout vybijeni balancerem
      digitalWrite(i+1,HIGH);           //   a vypsat "1" do vypisu
      Serial.print("1 ");    
      } else {
      digitalWrite(i+1,LOW);
      Serial.print("0 ");}
  }
  Serial.println(" ");                  // konec vypisu - odradkovat
  do {} while (millis()% 3000 != 0);    // 1 cyklus kazde 3 sekundy
}

void mereni() {                         // mereni napeti clanku
  U[0] = 0;                             // do U0 se uklada celkove napeti
  for(int i=1;i<6;i++){                
    U[i] = analogRead(i-1)*i*napeti-U[0];
    U[0] += U[i];}
}

Kat. 2