Re: ATtiny85 + Uno komunikácia
Napsal: čtv led 24, 2019 11:42 am
mělo by to fungovat s tím uspáním tak, že procesor probudí buď watchdog timer (4s ?) ten změří několikrát napětí a potom rozhodne, jestli balancovat nebo ne. Naměřený hodnoty zůstanou v proměnnejch. Tím se zajistí, že balancer zapne minimálně na 4s, a nebude zapínat/vypínat jak zběsilej. Watchdog by měl zároveň zajistit reset při "zabloudění programu" (8s?) a další co probudí procesor je log0 na RX pinu.
Netuším, jak náročný je CRC na místo v RAM, snad to klapne.
Já zase vícenásobný předání zprávy považuju za bezpečnější a jednodušší než CRC, to napíšu na třech řádcích, vyhodnocení že třikrát přišlo stejný číslo a stejnej povel, tak zapiš do eeprom. Však to bude jenom pro nastavení základních hodnot, v zásadě by se v tom němělo vrtat. Ještě je otázka, jestli umožnit přepsání všech konstant Vref na zapojenejch balancerech, ale asi jo, jinak by ot bylo dost otravný třeba po přehrání firmware připojovat nb na každej modul a posílat tam příkaz pro nastavení Vref.
reference je nechaná jako nap. napětí, skutečný napětí je potom U=1024*Vref/ AnalogRead(A1);
odpor pro snímání proudu je momentálně 9miliohm, takže když se zadá Vref v milivoltech, a odpor v miliohmech, je výsůedek v ampérech:
I= (AnalogRead(A2)*Vref)/(AnalogRead(A1)*Rsense;
možná by bylo rozumější proud posílat v 0.1A, tj *10, jinak by byly hodnoty akorát 0,1,2.
samozřejmě tohle je nástřel, každá hodnota musí projít digitálním filtrem, aby to neshodilo nějaký rušení, a u A2 by klidně mohl být omezenej rozsah platnejch hodnot - ostatně u A1 taky.
Co posílat:
ve vyčítanejch datech: byte command+ napětí (2byte)+ proud(1byte nebo jenom 1/2byte?) teplota procesoru?(zatím se nepodařilo rozchodit) ještě něco?
nastavení balančního napětí pro všechny: byte command+2byte balanční napětí +1byte "cokoliv", pro zachování dýlky datagramu
nastavení napětí jednotlivě bude to stejný, akorát jinej command a data pro každej článek zvlášť.
ladicí a kontrolní blbiny:
zapsání Vref pro jednotlivý moduly: byte command+2byte napětí článku+1byte cokoliv - balancer si hodnotu Vref vypočte z naměřenýho napětí článku. max. ochrana proti přepsání omylem
zapsání VbalDefault do eeprom pro všechny: byte command +2byte napětí VbalDefalt + 1byte cokoliv , max. zabezpečení přepsání omylem.
načtení konstanty Vref: byte command+ 2byte + 1byte cokoliv
načtení konstanty VbalDefault: byte command+ 2byte + 1byte cokoliv
načtení konstanty VbalSet: byte command+ 2byte + 1byte cokoliv
sepnutí každýho balanceru na ty 4s: byte command +3byte cokoliv - stejně bych udělal vypnutí pro ověření funkce mosfetů (pozděj aktivního balanceru). Na deskách jsou signalizační LED
Už mě ani nic nenapadá, možná by se tohle mohlo proškrtat...
v zásadě by mělo po 99,99% času jet jenom vyčítání dat. Dvakrát z aden nastavení balančního napětí? -moje představa je, že třeba pro lifepo4 by při překročení nap. 3.4V na některým článku se nastaví bal. nap. na 3.4V, až 1-2 články překročí 3.45V, tak nastavit 3.45V pro všechny a když nap. překročí někde 3.5 (3.55V?) sepne nějakej výstup pro vytěžovač, ostatně první stupeň by mohl být aktivní už při 3.45V, a při překročení 3.6V napřed 10s zvukový varování a pak vypnutí nabíjení. podobně by mělo být řešenáý nízký napětí článku, řídící modul by měl měřit i proud, ale to je další level, zatím potřebujem vytvořit SW do modulů, aby jely spolehlivě a bez chyb.
párkrát za život procesoru by se mohlo změnit VbalDefault, stejně jako Vref. Tady bych na zápis do eeprom dal co nejsilnější možnou pojistku proti chbnýmu zapsání nesmyslů, mám z mládí otřesný zážitky ze zařízení, kde se do jedné eeprom zapisovaly provozní hodnoty a byly v ní i konstanty - nespolehlivější krám jsem neviděl...
Tohle by snad ani nemuselo být součástí řídící jednotky, podle mě by stačilo připojit přes převodník NB a z terminálu tam odeslat potřebnej datagram. Tím by bylo zároveň zaručený, že se to nějakou chybou řídící jednotky nepřepíše...
Netuším, jak náročný je CRC na místo v RAM, snad to klapne.
Já zase vícenásobný předání zprávy považuju za bezpečnější a jednodušší než CRC, to napíšu na třech řádcích, vyhodnocení že třikrát přišlo stejný číslo a stejnej povel, tak zapiš do eeprom. Však to bude jenom pro nastavení základních hodnot, v zásadě by se v tom němělo vrtat. Ještě je otázka, jestli umožnit přepsání všech konstant Vref na zapojenejch balancerech, ale asi jo, jinak by ot bylo dost otravný třeba po přehrání firmware připojovat nb na každej modul a posílat tam příkaz pro nastavení Vref.
Kód: Vybrat vše
balancer s attiny 85
zapojení vývodů: _________________
+ 10k reset -1| o +Vcc |8- +V cell, 2.5-5V
HIGH - balance on -2| output 3 adc A1 |7- ref. 1.2V LM385
ball. current input -3| adc A2 out 1 |6- output TX software serial
gnd -4| GND in 0 |5- in RX, INT0 for wake up from sleep mode
___________________
odpor pro snímání proudu je momentálně 9miliohm, takže když se zadá Vref v milivoltech, a odpor v miliohmech, je výsůedek v ampérech:
I= (AnalogRead(A2)*Vref)/(AnalogRead(A1)*Rsense;
možná by bylo rozumější proud posílat v 0.1A, tj *10, jinak by byly hodnoty akorát 0,1,2.
samozřejmě tohle je nástřel, každá hodnota musí projít digitálním filtrem, aby to neshodilo nějaký rušení, a u A2 by klidně mohl být omezenej rozsah platnejch hodnot - ostatně u A1 taky.
Co posílat:
ve vyčítanejch datech: byte command+ napětí (2byte)+ proud(1byte nebo jenom 1/2byte?) teplota procesoru?(zatím se nepodařilo rozchodit) ještě něco?
nastavení balančního napětí pro všechny: byte command+2byte balanční napětí +1byte "cokoliv", pro zachování dýlky datagramu
nastavení napětí jednotlivě bude to stejný, akorát jinej command a data pro každej článek zvlášť.
ladicí a kontrolní blbiny:
zapsání Vref pro jednotlivý moduly: byte command+2byte napětí článku+1byte cokoliv - balancer si hodnotu Vref vypočte z naměřenýho napětí článku. max. ochrana proti přepsání omylem
zapsání VbalDefault do eeprom pro všechny: byte command +2byte napětí VbalDefalt + 1byte cokoliv , max. zabezpečení přepsání omylem.
načtení konstanty Vref: byte command+ 2byte + 1byte cokoliv
načtení konstanty VbalDefault: byte command+ 2byte + 1byte cokoliv
načtení konstanty VbalSet: byte command+ 2byte + 1byte cokoliv
sepnutí každýho balanceru na ty 4s: byte command +3byte cokoliv - stejně bych udělal vypnutí pro ověření funkce mosfetů (pozděj aktivního balanceru). Na deskách jsou signalizační LED
Už mě ani nic nenapadá, možná by se tohle mohlo proškrtat...
v zásadě by mělo po 99,99% času jet jenom vyčítání dat. Dvakrát z aden nastavení balančního napětí? -moje představa je, že třeba pro lifepo4 by při překročení nap. 3.4V na některým článku se nastaví bal. nap. na 3.4V, až 1-2 články překročí 3.45V, tak nastavit 3.45V pro všechny a když nap. překročí někde 3.5 (3.55V?) sepne nějakej výstup pro vytěžovač, ostatně první stupeň by mohl být aktivní už při 3.45V, a při překročení 3.6V napřed 10s zvukový varování a pak vypnutí nabíjení. podobně by mělo být řešenáý nízký napětí článku, řídící modul by měl měřit i proud, ale to je další level, zatím potřebujem vytvořit SW do modulů, aby jely spolehlivě a bez chyb.
párkrát za život procesoru by se mohlo změnit VbalDefault, stejně jako Vref. Tady bych na zápis do eeprom dal co nejsilnější možnou pojistku proti chbnýmu zapsání nesmyslů, mám z mládí otřesný zážitky ze zařízení, kde se do jedné eeprom zapisovaly provozní hodnoty a byly v ní i konstanty - nespolehlivější krám jsem neviděl...
Tohle by snad ani nemuselo být součástí řídící jednotky, podle mě by stačilo připojit přes převodník NB a z terminálu tam odeslat potřebnej datagram. Tím by bylo zároveň zaručený, že se to nějakou chybou řídící jednotky nepřepíše...