DC/DC měnič PIC16F876 report naměřených dat (U a I) - chyba

Mám obvod, který slouží jako DC/DC měnič pro napájení autobaterie ze solárního panelu řízený procesorem PIC16F876A dle přiloženého schématu.
Obvod funguje skvěle, problém je při logování naměřených hodnot procesorem přes A/D převodníky.
Jedná se o hodnoty, které mi naměřil procesor a vyslal je přes RS232. Logoval jsem tato data, ale nevím, proč jsou rozdílné od naměřených ve skutečnosti.
Zařízení je jinak zcela funkční, až na ty hodnoty, z nichž bych rád vytvořil grafy.

Problém je v tom, že skutečné hodnoty se hýbou pro:

  1. voltage: cca 29-34V
  2. batvolts: cca 11-14V

Z výstupních dat procesoru jsou hodnoty takové:

  1. voltage: cca 7-9V
  2. batvolts: cca 2-3V

Pro bližší informace zasílám zdrojový kód, a schéma logované data.
Omlouvám se za schéma, ale jen jsem ho “nahrubo” upravoval… V příloženém souboru - soubory.rar je schéma, program nahraný v PICu, report naměřených dat z PICu a postup pti vypoctu konstant.

Nevím si rady a prosím o pomoc, protože se v tom opravdu moc neorientuju. Kontaktujte mě prosím na mail odstraněno
Děkuji, Kuba

:arrow_right: administrator: příspěvek byl upraven
Vymazal jsem emailovou adresu. Není zakázáno zveřejňovat kontaktní údaje, je zakázáno žádat o soukromou pomoc, kterou nemohou využít ostatní čtenáři fóra.
soubory.rar (874 KB)

Zdravím, tak v programu chyba není, všechny konstanty jsou dobře.
Možný problém může být v “read_ad()”, že by to četlo málo bitů.

Zdravím, děkuji za vysvětlení… Existuje nějaké řešení tohoto problému? Jestli nějaký přepočet nebo jiné nastavení čtení bitů?

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

Cau, jakejkoliv nespravnej zasah do programu muze mit negativni vliv na zarizeni ! , takze bych se spis ptal autora…

skousel sem to pocitat a teoreticky by to melo bejt na 10bit rozliseni AD,

#include <16f876.h> #DEVICE *=16 ICD=TRUE //******************************************** #device ADC=10 // <-- AD 10bit //******************************************** #use Delay(Clock=20000000) #use RS232(Baud=9600,Xmit=PIN_C6,Rcv=PIN_C7,brgh1ok)
pojistky nastavujes v programatoru ?

Ahoj, věc se má tak,že jsem v programování úplný začátečník, takže pro nahrání programu přímo do PICu se vždycky zastavím ve škole. A k otázce na pojistky - to nevím.
Autora už jsem se snažil zkontaktovat, ale neozval se:(
Každopádně dekuji moc za radu. Proberu to ještě i s učitelem. On právě nepoužívá CCS kompiler, takže v tom je trošku úskalí, že mi nemůže až tak pomoct… Proto jsem zvolil cestu registrace a hledání pomoci tady.

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

jak jsi psal “Obvod funguje skvěle…” tak mam za to ze jsi pojistky zrejme nastavil spravne , a mas i HEX, mas to v cem prelozit ? nebo chces poslat HEX s pojistkama a upravou , mas odkaz kde jsi tohle splasil ?

este by som skusil dat na vstup odporoveho delica potenciometer a napetie na delici postupne zvysoval opisal hodnoty vsutpneho napetia a toho co ukazuje displej…ci je to linearne sa meniace a aky deliaci pomer vznikne…
Mozno pri malych napetich to bude chodit

Pokud použiješ potenciometr jako zdroj napětí pro dělič, tak nemusíš řešit, zda to bude lineární - nebude :wink:

nebaziruj na detailoch islo skor oto ci najde nejaky skok ked hodnota z potaku nebude korespondovat z hodnotou ukazovanou… a co je to linearne vsak, a ked pouzije log potak tak urcite nebude… atd

Ahoj, tvůj problém je jen ve špatně nastaveném A/D převodníku, protože Ti místo 10bitového čísla leze jen 8bitové. Tak pošli i zbytek programu pro čtení A/D.
Nejjednoduší řešení je abys vypočítanou konstantu vydělil 4 (tj. místo dělení 18,6 to vyděl 4,65 ) a je to.
Přeji hodně zdaru

to je vsechno , cteni neprobiha nejak slozite :wink:

jednodussi je rict prekladaci ze ma zachazet s 10bit AD #device ADC=10

Moc děkuji za rady, dneska jsem upravil v programu čtení na 10bit, tak to zítra otestuju a hned dám vědět, jak jsem dopadl

Pro kompilaci programu a tvrobu .hex souboru používám CCS PCWH compiler.

Jinak celý článek byl na webu timnolan.com, ale už to tam nemůžu najít, takže přikládám pdf.
NolanPeakPanekTracker102-94.pdf (401 KB)

Tak moc děkuji za pomoc :slight_smile: Vložil jsem do programu ADC=10 a měří to naprosto přesné hodnoty :smiley: Takže super! Ještě jednou moc děkuju!!

Akorát vyvstal problémek:
změnil jsem i napětí (ať se baterka lépe nabíjí):

CONST float CHARGED = 15.0;

a shořely mi už 2 pojistky - byly tam o proudu In=15A…
Může to být způsobeno zvýšením napětí nebo změnou ADC=10??
program_PIC16F876_new const.c (6.26 KB)

ASI odpovidam trochu pozde , ne/chodi my upozorneni, vtomhle pripade se zpozdenim, ale jen malym 15 dni…

to si ty baterce moc nepomoh, nad 14.4 V zacina plinatet a uz se nenabiji, nehlede na to ze se to porovnava s napetim na baterce a podle toho se ridi nabijeni (PWM), je mozny ze za to muze tahle zmena …
neskousel si potom nalogovat ty data ? to by pomohlo

Tak už je to vpohodě… Nechal jsem to zpět na 14,4 a jede to dobře… Sice mi nevydržely tranzistory - poprvé ve spodní větvi a pak i v horní, takže jsem koupil silnější, tak snad vydrží. Bohužel při posledním "odchodu"tranzistoru do křemíkového nebe ssebou vzal i LT1158,tak musím čekat až mi dorazí. Nevím co se přesně v tom obvodu děje,ale dlohou dobu jede vše OK a čas od času se tranzistory začnou extrémně hřát,ale na datech jsem nic nezpozoroval… tak nevim… no možná to bude tím,že tranzistory co jsem tam měl původně byly IRFZ44N (na účtu jsem však měl IRFZ44) :angry: No a ty Nkové mají nižží napětí UDS,takže je možné,že nevydržely napěťové špičky při spínání… uvidíme,jak to otestuju při výkonějších tranzistorech…

Ještě mám další otázečku, nikde jsem se nedočetl k čemu slouží ten jumper u PICu? Můžete mi pls poradit?

Btw zasílám pár nalogovaných hodnot…
24-02-2011.xlsx (775 KB)

Jaký napětí leze z toho panelu? Ty tranzistory by měly mít trojnásobné závěrné napětí než je napětí který spínaj.

Nabíjení: Držet baterku trvale na 14,4V je blbost. Udělej si tam vícestupňové nabíjení. Na 14,4V začni nabíjet po nějakým velkým vybití accu, jak dosáhneš 14,4, tak to nech držet na 13,6 - 13,8V.

Ešte ked by sme vedeli aku bateriu používa… olovenu do auta alebo gelovu pre záložné zdroje… okrem toho že nabijať bateriu stale je blbost nato prišli aj hoši z brna… ale ked to musi byť… rozhodne by som neprekracoval 13,8 pre trvael dobíjanie gelovej baterie… viac udaj na baterke

Hned na začátku psal, že jde o autobaterii, takže klasická startovací kapalná.
Pokud nechce stále dolejvat vodu, tak bych taky např. při 14V a proudu 0.02C nabíjení ukončil (to je jen od oka). Ohledně správnýho nabíjení baterií se dá na netu ledacos najít. Jedině, že by si chtěl bokem vyrábět vodík :smiley:. Na to však není baterie dobrej nápad (vodík s kyslíkem zároveň).

Akumulátor je klasická autobaterka a ta slouží spíše pro zálohu - na ní není a nikdy nebylo více jak 14,4 V, protože ji mám zatíženou… Slouží spíše jako záloha. Na výstupu z panelu je napětí cca kolem 30V +/- několik voltů, záleží na osvitu panelu a na odběru proudu.
V datasheetu LT1158 jsem našel, že při spínaní napětí kolem 30V je třeba tranzistorů s UDS 60-100V… Takže mám sehnat tranzistory s napětím kolem 100V?

Tranzistor Q1 mi tam přijde zcela zbytečný.

“The third MOSFET Q1 is added to allow the system to be turned off when
connected to a battery”
Jak chtějí tím tranzistorem systém “vypnout”, když není přímo řízen procesorem? Tím, že přestanou spínat? Na to přeci stačí Q2 (“In the PPT Q2 and Q3 are shut off at night when there is not enough solar power to charge the battery”).

“However, the body diode in the high side MOSFET Q2 will conduct power in the reverse direction from the battery to the rest of the PPT and the system can never be shut off”.
Co takhle systém vypnout, když není na soláru víc než 15V (které se tam z baterie nemůžou dostat)?
Jaký proud z 12V baterie asi poteče do zastíněného panelu, který dává při osvětlení více než 30V? Řekl bych, že velký nebude. Můžeš to změřit?

“Q1 is driven by the top gate drive of the LT1185 MOSFET driver the same as the high side switch Q2. D2 keeps the gate on Q1 charged so Q1 is on all the time instead switching like Q2.”
To platí pouze v případě, že je na soláru méně než zhruba Vbat+15-5, tj. 22V. Poud je na soláru vyšší napětí, Q1 není otevřen a pracuje pouze jako obyčejná křemíková dioda. Pokud je tam tedy ona ochrana proti zpětnému proudu nutná (viz. předchozí odstavec), efektivnější bude silnoproudá schottkyho dioda (závěrné napětí vyskytnuvší se na ní by nemělo překročit napětí baterie).

Co se týká odcházení tranzistorů: U LT1158 není instalována jeho nadproudová ochrana. Provedl bych ji hned podle prvního zapojení v datasheetu.

V zapojení řízení horního mosfetu je kritická chyba. Pin T SOURCE má být připojen na střed mezi tranzistory Q2 a Q3. Má na starosti zavírání Q2 a ochranu proti “shoot-through current”. Tady bude pravděpodobně hlavní příčina.
Další věcí může být nepřítomnost ochran mosfetů.

Uff, to byla fuška :slight_smile:.

Edit: další problém nastane, v okamžiku, kdy mcu otevře Q3 na příliš dlouho. Proud cívkou do baterie totiž klesá až k nule. Být tam jen dioda, v tu chvíli se zavře a je to vpořádku. Jenže on je tam otevřený tranzistor a není v obvodu nic, co by ho při poklesu proudu k nule zavřelo. To znamená, že se začne rozbíhat proud opačným směrem (z baterie, přes cívku a Q3 do země). Jenže toto je cyklus step-up měniče. Ve chvíli, kdy se Q3 zavře, proud by pokračoval přes zpětnou diodu Q2 nahoru do kondenzátorů C9 a C10. To by se zas tak nic moc nedělo. Jenže jak je popsáno výše, Q1 je pouze v režimu diody (není otevřen jak se autor domívá) a tomu transféru úspěšně brání. Tedy alespoň do okamžiku, kdy se prorazí Q1 nebo Q3 (ten půjde dřív).
Odstranit problém lze vynecháním (zkratováním) Q1 nebo (odpojením) Q3. Jelikož Q3 opravdu pomáhá zvýšení účinnosti(otázkou je, zda získaná procenta hned nezmaří pozdním vypnutím), volil bych vyřazení Q1.
Q1 zde opravdu přináší více problémů než užitku. Aby to s Q1 fungovalo správně, potřeboval by buzení odvozené od napětí panelů, nikoli baterie jak je tomu nyní. Jednodušší by bylo nahrazení Q1 diodou (pokud je tam poravdu nutný), ovšem umístit ji ještě před kondenzátory.