Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

FV regulator pro nabijeni LiIon a Pb baterii
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
volente



Založen: Nov 18, 2015
Příspěvky: 171
Bydliště: Brno-venkov

PříspěvekZaslal: po prosinec 21 2015, 22:12    Předmět: FV regulator pro nabijeni LiIon a Pb baterii Citovat

Prosim o vaš názor. LiIon odladěno na prkénku, s olovem bych to neviděl na větši problém. Jsem samouk a uvítám každý předmětný názor.

Děkuji

#include <Wire.h>

#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>
#include <LiquidCrystal.h>
#include <LCD.h>
#include <I2CIO.h>
#include <FastIO.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SR.h>

LiquidCrystal_I2C lcd(0x3F, 2,1,0,4,5,6,7,3, POSITIVE);


float voltpb=0; //napeti Pb baterie
float voltli=0; //napeti Li baterie
float voltfv=0; //napeti FV panelu
float ampli=0; //proud do Li baterie
float adjA=0; //nastaveni proudu do Li baterie ???
float sample1=0;
float sample2=0;
float sample3=0;
float sample4=0;
float sample5=0;

int IRFli = 9; //MOSFET nabijeni Li
int IRFpb = 10; //MOSFET nabijeni Pb
int IRFliv = 7; //MOSFET zateze Li
int IRFpbv = 8; //MOSFET zateze Pb

int pwm = 0; //regulace Li
int pwm1 = 0; //regulace Pb


void setup()
{
TCCR1B = TCCR1B & 0b11111000 | 0x05;//nastaveni kmitoctu pwm 61.03Hz
Serial.begin(9600);
lcd.begin(20,4);
pinMode(IRFpb, OUTPUT); //vystupy pro spinac P-MOSFET
pinMode(IRFli, OUTPUT);
pinMode(IRFliv, OUTPUT);
pinMode(IRFpbv, OUTPUT);

}
void loop()
{
for(int i=0;i<150;i++)
{
sample1+=analogRead(A0);
sample2+=analogRead(A1);
sample3+=analogRead(A2);
sample4+=analogRead(A3);

delay(2);
}
sample1=sample1/150;
sample2=sample2/150;
sample3=sample3/150;
sample4=sample4/150;



voltpb = (sample1 * (5.0/1023.0)*8.4);//prepocet podle delice napeti
voltli = (sample2 * (5.0/1023.0)*8.4);
voltfv = (sample3 * (5.0/1023.0)*8.4);
ampli = ((sample4-512)*46)/1000; //pro ACS712 20A ???



int Vpb=voltpb*100;
int Vli=voltli*100;
int Vfv=voltfv*100;
int Ali=ampli*100;
int r=Vfv-Vli;
int r1=Vfv-Vpb;

Serial.println(voltli);
Serial.println(voltpb);
Serial.println(voltfv);
Serial.println(ampli);
Serial.println(pwm);

lcd.setCursor(0,0);
lcd.print("Li ");
lcd.print(voltli);
lcd.print("V");

lcd.setCursor(10,0);
lcd.print("Li ");
lcd.print(ampli);
lcd.print("A");

lcd.setCursor(0,1);
lcd.print("Pb ");
lcd.print(voltpb);
lcd.print("V");

lcd.setCursor(0,2);
lcd.print("Fv ");
lcd.print(voltfv);
lcd.print("V");

lcd.setCursor(0,3);
lcd.print("PWM ");
lcd.print(pwm);

/////////////////////nabijeni Li baterie

if (r<=50)
{
analogWrite(IRFli, pwm=0);
}

if ((r>50)&&(Vli<1230))
{
analogWrite(IRFli, pwm=220);
}

if ((r>50)&&(Vli<1240))
{
analogWrite(IRFli, pwm++);
}

if((r>50)&&(Vli>=1240))
{
analogWrite(IRFli, pwm--);
}

if ((Vli>=1235)&&(Ali<30))
{
analogWrite(IRFli, pwm=0);
}

//////////////////////nabijeni Pb baterie


if((r1<50)||(Vpb>1380)||(Vli<1230))
{
analogWrite(IRFpb, pwm1=0);
}
if((r1>50)&&(Vpb<1260)&&(Vli>1230))
{
analogWrite(IRFpb, pwm1=255);
}
if((r1>50)&&(Vpb>1320)&&(Vpb<1365)&&(Vli>1230))
{
analogWrite(IRFpb, pwm1=128);
}
if((r1>50)&&(Vpb>1365)&&(Vpb<1380)&&(Vli>1230))
{
analogWrite(IRFpb, pwm1=64);
}

//////////////////////ochrana pred podvybitim baterii

if(Vli>1130)
{
digitalWrite(IRFliv, HIGH);
}
if(Vpb>1200)
{
digitalWrite(IRFpbv, HIGH);
}
if(Vli<1080)
{
digitalWrite(IRFliv, LOW);
}
if(Vpb<1080)
{
digitalWrite(IRFpbv, LOW);
}

}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: po prosinec 21 2015, 22:23    Předmět: Citovat

Schéma zapojení ? Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
volente



Založen: Nov 18, 2015
Příspěvky: 171
Bydliště: Brno-venkov

PříspěvekZaslal: po prosinec 21 2015, 23:16    Předmět: Citovat

Co má schéma společného s programem???
Já sem dám schéma a bude se tady řešit hodnota odporu v gatech MOSFETu.
Ale když je to nutný tak jo.



solar.png
 Komentář:

Stáhnout
 Soubor:  solar.png
 Velikost:  48.39 kB
 Staženo:  227 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: út prosinec 22 2015, 10:59    Předmět: Citovat

Já to chápu tak, že na vstupu máš třeba +30V a baterka má např. 25.2V.
Ty pouštíš do baterky obdelník (PWM) a zároveň měříš napětí na baterce. Jak ti vystoupá napětí, tak PWM vypneš.
Proud do baterky je neznámý, omezen vnitřním odporem zdroje, D1 a MOSFETU.
Ze schématu ani z programu není jasné, který proud měříš.
Té olověné to snad nebude vadit. U LiIon bych předpokládal nějaké sofistikovanější zapojení např. přes Step-Down.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
HiGhLaNdEr



Založen: Mar 08, 2005
Příspěvky: 912
Bydliště: Českobudějovicko

PříspěvekZaslal: út prosinec 22 2015, 12:47    Předmět: Citovat

Schéma má s programem společné asi snad úplně všechno.

Tvuj program měří napětí baterie a podle toho se to chová.
Určitě by se to dalo napsat elegantněji ale myslim že na tom příliš nezáleží. Hlavně že ty víš co jsi napsal a co se tam děje.

Nevim co máš za procesor ale bylo by rozumné použít nějakou přesnější referenci k AD převodníku než v procesoru je.

Uobou typů baterií by to chtělo teploměr. A tim zabránit problémům s přehřátím. U olova můžeš při nízkých teplotách přidat na napětí.

Ale je škoda toho výkonu který je nevyužitý.
A tak jak to je to neni asi úplně dobře.
Tak jak to máš ta baterie dostává proudové bomby dané odporem mosfetu vnitřním odporem baterie a kapacitou kterou tvoří přívodní kabel od panelu. Mohou to být chvilkově i dost vysoké proudy které se v baterii mění na teplo. Taky když bude vnitřní odpor baterie relativně vysoký tak se ty proudové raázy jako napěťové špičky dostanou až na zátěž. To neni taky úplně dobře.

Udělej nějaký stepdown měnič který je řízen tim pwm z procesoru
vpodstatě do tvého zapojení stačí přidat cívku, rychlou diodu a low esr kond.

Pro lepší využití panelu si udělej hledání maximálního bodu výkonu panelu.

Co potřebuje procesor vědět je:
1. napětí z panelu
2. proud z panelu
3. napětí baterie

Napětí a proud z panelu vynásob a máš výkon panelu. Pohni PWM nahoru o jedna. Změř opět výkon panelu, porovnej s předchozím měřením. Když je větší výkon nebo je rovný jako předchozí pohni pwm o jedna nahoru. Když je menší pohni pwm o jedna dolu. Tim si najdeš největší bod výkonu jaký bude schopen panel dát a ten výkon tim stepdownem nakrmíš do baterie.

Pozor, je potřeba si pamatovat jak jsi hejbal s pwm v předchozím cyklu aby se ti nestalo že pwm dojede na nulu a už se odtutd nehne. To je potřeba ošetřit podmínkama. Lze to napsat i tak že pwm běhá od nuly do max a zpět. A vždycky když se zjistí že se výkon snížil se změní směr změny toho pwm.

V tom cyklu musíš ještě měřit napětí baterie a podle toho se zachovat.
(Tak jak to máš teď.) Buď vypnout PWM aby se baterie přestala nabijet nebo třeba zapnout nějaký shunt odpor aby se baterie nepřebijela.

Pokud by hrozilo že regulátor dá moc velký proud do baterie a ona by to nedávala tak musíš ještě měřit proud do baterie a podle toho se zachovat. Třeba vypnout pwm nebo ty pulzy patřičně skrátit.
U LiIon bys asi nemusel měřit nabijecí proud ale mohl bys k ní dát teploměr a měřit její teplotu a podle toho se opět nějak zachovat.

Klíčová otázka je spíš jak elegantně měřit proud z panelu.
Na to je finta pro malé výkony velice dobrá.

Použijou se na to dva analogové vstupy na procesoru.
První vstup připojíš na dělič mězi vývody panelu. Změříš tim napětí na panelu.

Pak zapojíš nějaký malý odpor buď do plusové nebo do mínusové linky odpanelu ale až za dělič co měří napětí. Za ten odpor dáš druhý stejný dělič a opět měříš napětí na panelu. Ale to napětí bude menší o úbytek na tom odporu mezi děliči. Procesor ty napětí od sebe odečte a má napětí na odporu pro měření proudu. Z toho vypočítáš proud a pak výkon.

Pokud ten výkon nechceš zobrazovat na dipleji tak nemusí být ty odpory v děličích nijak přesně stejné.

Měříš relativně velké napětí na děličích a nemáš problém s tim že analogové vstupy procesoru při nízkých napětích asi pod 300mV měří blbosti a jsou strašně nelineární.

Tim oměřovánim panelu můžeš i vyhodnotit jestli je noc a vypnout PWM a pak zapnout nabijení až když je den a panel něco dává. Můžeš poslat přes noc procesor do nízké spotřeby a vypnout rozežranej diplej aby jsi ušetřil energii,..

Můžeš si navymejšlet spoustu věcí.

A hlavně pokud budeš dělat ten stepdown tak pozor na frekvenci která leze z procesoru.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
volente



Založen: Nov 18, 2015
Příspěvky: 171
Bydliště: Brno-venkov

PříspěvekZaslal: út prosinec 22 2015, 15:44    Předmět: Citovat

Děkuji za vyčerpávající odpověď.
Musím ještě uvést do obrazu použitá napětí.
Panel má napětí 30V, baterie 25,2V max.
Program je napsán na napětí baterie 12,6V max (vlastne jen na zkousku na stole).
Z hlediska její životnosti ji nechci nabíjet až na tohle plné napěti.
Napětí panelu měřím ještě před zpětnou schottky diodou, ve schématu je zakresleno až za, chybička se vloudila. Proud omezovat nemusím ,protože kapacita baterie je asi 30Ah a panel dá max kolem 7,5A . Testováno na stole s 10A zdrojem, Arduino NANO s tímto programem drží napětí na baterii a maximální proud je kolem 5A, pokud je baterie vybitá asi na 50%. Baterie se vůbec nehřeje, ani minimálně. Použité olovo má 100Ah, takže max proud panelu je vlastně také v pohodě. Snímání teploty samozřejmě dodělat mohu.
Co se týká měření proudu, mám čidlo měření zapojeno v přívodu k baterii od MOSFETu.


Naposledy upravil volente dne út prosinec 22 2015, 19:05, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
volente



Založen: Nov 18, 2015
Příspěvky: 171
Bydliště: Brno-venkov

PříspěvekZaslal: út prosinec 22 2015, 17:11    Předmět: Citovat

" Udělej nějaký stepdown měnič který je řízen tim pwm z procesoru
vpodstatě do tvého zapojení stačí přidat cívku, rychlou diodu a low esr kond."

Nevím jestli to má na tak malý rozdíl napětí smysl, pokud bych nechal baterie na 12V tak určitě ano.

" A hlavně pokud budeš dělat ten stepdown tak pozor na frekvenci která leze z procesoru."

Teď mám frekvenci na pwm výstupu nastavenou na asi 61Hz, To by na step down bylo určitě málo. O tom vím.

Co se týká toho zápisu " pwm++ a pwm--", jsem nenašel způsob jak udělat že když dojede na konec, tj. 255 tak aby nezačal znovu od nuly, ale zůstal tam. V tom bych potřeboval poradit. Náčrt kodu s tímto chováním.

Další věc je že pwm mi takto krokuje docela pomalu. Pokud odstraním "delay" za měřením tak sice uhání, ale na displeji se ty čisilka mění tak rychle že nejsou čitelná.
Rada jak udělat aby se displej měnil třeba jednou za 2 sekundy, a zbytek frčel maximální rychlostí??
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
HiGhLaNdEr



Založen: Mar 08, 2005
Příspěvky: 912
Bydliště: Českobudějovicko

PříspěvekZaslal: st prosinec 23 2015, 0:54    Předmět: Citovat

Výpisy na displej dělat v přerušení od časovače jednou za dvě sekundy,...

Pokud chceš aby ti pwm zůstalo viset na konci na 255 tak nepoužívěj věci jako pwm++ ale dej si to co má být v registru nejdřív do promněný a ošetři to podmínkou a pak až to pošli do registru.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3698
Bydliště: Praha

PříspěvekZaslal: st prosinec 23 2015, 13:33    Předmět: Citovat

volente napsal(a):
Co se týká toho zápisu " pwm++ a pwm--", jsem nenašel způsob jak udělat že když dojede na konec, tj. 255 tak aby nezačal znovu od nuly, ale zůstal tam.

kód:

int pwm;

. . .

    analogWrite(IRFli, (pwm >= 255)? 255:pwm++);
    analogWrite(IRFli, (pwm <= 0)? 0:pwm--);


A pokud možno používejte pre-increment/decrement, je to rychlejsi nez post-increment/decrement.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
volente



Založen: Nov 18, 2015
Příspěvky: 171
Bydliště: Brno-venkov

PříspěvekZaslal: st prosinec 23 2015, 16:23    Předmět: Citovat

Díky,
diplej vyřešen funkcí millis, a to pwm jako proměnnou mám, jen jsem tam neměl tu správnou podmínku.
Teď už to maká jak má. Jak říkám, nakopnout potřebuji. Rolling Eyes
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
volente



Založen: Nov 18, 2015
Příspěvky: 171
Bydliště: Brno-venkov

PříspěvekZaslal: st prosinec 23 2015, 16:59    Předmět: Citovat

to mtajovsky
Diky , vyzkousim.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
volente



Založen: Nov 18, 2015
Příspěvky: 171
Bydliště: Brno-venkov

PříspěvekZaslal: st prosinec 23 2015, 18:39    Předmět: Citovat

Když jste na mě tak hodní tak se ještě zeptám na ten step down.
Předpokládám že ta cívka se zapojí podle schematka.
dále předpokládám že musí snést proud který jí poteče, což bude až dvojnásobek toho co dá panel, tedy nějakých 15A. A co její hodnota? mohla by být třeba tato?

http://www.vpcentrum.eu/soucastky-nahradni-dily/tlumivky/tlumivka-vinuta-33uh-20a-7-2m-tht



step down.png
 Komentář:

Stáhnout
 Soubor:  step down.png
 Velikost:  38.58 kB
 Staženo:  153 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
HiGhLaNdEr



Založen: Mar 08, 2005
Příspěvky: 912
Bydliště: Českobudějovicko

PříspěvekZaslal: čt prosinec 24 2015, 0:15    Předmět: Citovat

dioda patří jinam,. mezi tranzistor a zem ještě před cívku, když tranzistor sepne proud jde cívkou do zátěže a cívka se zmagnetuje. Když tranzistor vypne tak se na cívce samovolně otočí napětí a energie jde do zátěže z cívky přes tu diodu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
volente



Založen: Nov 18, 2015
Příspěvky: 171
Bydliště: Brno-venkov

PříspěvekZaslal: čt prosinec 24 2015, 1:01    Předmět: Citovat

Takže takhle?
Už mě svitlo, nepotřebuji nic usměrnit, kromě sebe.

A ta tlumivka? Nějaké vodítko, nebo výpočet? Shocked



step down1.png
 Komentář:

Stáhnout
 Soubor:  step down1.png
 Velikost:  38.84 kB
 Staženo:  130 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
HiGhLaNdEr



Založen: Mar 08, 2005
Příspěvky: 912
Bydliště: Českobudějovicko

PříspěvekZaslal: čt prosinec 24 2015, 8:52    Předmět: Citovat

http://schmidt-walter-schaltnetzteile.de/smps_e/smps_e.html
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.20 sekund