Archyvas

2009.12 archyvas

Sprogo programatorius

Ši istorija deja ne informacinio pobūdžio, o gal labiau įspėjamojo arba “kas būna, kai programatorius gauna fazę”.

Jau kažkiek laiko dirbu prie projekto, kurio užsakovas yra šiuolaikinio meno specialistas J.Urbonas. Projekto idėja gan paprasta: pastukseni į duris, o to stuksenimo gerokai stipresnis “aidas” pereina į grindis. Kuo stipriau stuksenama, tuo stipresnis smūgis per kojas jaučiamas. Prie durų turi būti montuojamas mažas, nuotoliniu būdu (radijo bangomis) veikiantis jutiklis, kurio baterija turėtų laikyti bent jau 3 mėnesius. Kaip jūs tokį darbą atliktumėte?

Apie visą projektą parašysiu kada nors kitą kartą, na o dabar einu prie reikalo. Jutiklyje ir imtuve su visa valdymo elektronika sumontuoti mikrovaldikliai ATtiny13. Šiaip projektas jau buvo beveik baigtas, liko tik programiškai suderinti smūgio jėgą. Veikimo atstumas – apie 200-300 metrų. Turbūt kyla klausimas kas gi formuoja tą smūgį. Tai atsakymas paveikslėlyje dešinėje. Tai galingas elektromagnetas. Su pliku magnetu atlikinėti bandymus yra truputėlį nesaugu – iššovusi gerą kilogramą sverianti šerdis galėtų nemenkai sužaloti ar užmušti, todėl visa tai yra laikinai prisukta prie taburetės. Po taburete matote elektromagneto valdymo bloko galios dalį – tai 4700 µF 400V kondensatorius su 170 W (10*17 W) jo įkrovimo varža bei 70 A atlaikančiu IGBT tranzistoriumi.

Šio valdymo bloko problema ta, kad nėra visiškai jokio galvaninio atrišimo nuo ~220 V tinklo. T.y. jei prisiliestumėte prie bet kurio kontakto ir jei netyčia tuo metu kita ranka laikytumėte už centrinio šildymo radiatoriaus arba įžeminto kompiuterio korpuso, būtumėte neblogai pakratytas.

Imtuvas maitinamas DC 12V, taigi jam reikalingas atskiras maitinimo šaltinis. Tam reikalui panaudojau paprastą transformatorinį maitinimo šaltinį, kurio išėjimas jau turi galvaninį atrišimą. Taigi, jo išėjimą galima laisvai jungti su galios bloko įėjimu ir viskas puikiai veiks. tik yra kita problema – tada jau ir prie imtuvo liestis negalima bus, o tai jau iššaukia problemų programavimo metu, nes:

  1. Prijungiant programatoriaus laidą nepriliesti jokio kito kontakto yra gana sudėtinga;
  2. Programatorius tiesiogiai susijungia su kompiuteriu, kuris yra įžemintas, o tai reiškia trumpą jungimą ir liepsnas.

Kad to galima būtų išvengti, reikalingas trečias maitinimo šaltinis IGBT tranzistoriaus valdymui bei optinis išrišimas optronais (2 vnt.). Šis papildomas maitinimo šaltinis papildomai kainuoja, o taip pat ir užima gana daug vietos, kuri šiame projekte yra labai ribota. Žodžiu, nusprendžiau galvaninio išrišimo nedaryti ir tiesiog būti labai atidus: kiekvieno programavimo metu turėjau atjungti IGBT tranzistoriaus valdymą nuo imtuvo, tada prijungti programatorių, užprogramuoti, atjungti programatorių ir vėl prijungti IGBT valdymą.

Ši veiksmų seka man puikiai sekėsi, na, gal kokius 20 kartų. Ir tada vieną kartą prieš prijungdamas programatorių užmiršau atjungti IGBT valdymą… Rezultatas: pokšt, liepsnos, dūmai…

Štai ir rezultatas. Blogų dalių statistika: 7 mikroschemos, 4 kondensatoriai, 2 diodai, 2 tranzistoriai, 1 droselis, 7 rezistoriai, 3 takeliai…Visų blogų dalių vertė, įskaitant ir tas, kurias teko užsakyti – 13 Lt :-) Man žiauriai nuskilo, kad sudegė tik programatoriaus “galas”, t.y. įtampų formavimo dalis, o valdymo elektronika liko sveika. O čia valdymo elektroniką paleisti būtų labai komplikuotas reikalas – EEPROM atmintyje ir XILINX logikoje yra programos, kurias gauti būtų beveik neįmanoma.

Nukentėjo ir mano pagamintas imtuvas (foto dešinėje). Nuotrauka jau su išlituotomis blogomis detalėmis (kurių irgi gavosi geras tuzinas), tačiau įsižiūrėję galite pastebėti kiek takelių “trūksta” – jie tiesiog išgaravo. Imtuvo blogų detalių sąmatas – 60 Lt…

Aišku fazė kliuvo ir kompui: kelioms sekundėms dingo vaizdas, bet jam atsiradus viskas buvo savo vietose.. Keista (video integruota į šiaurinį tiltą). Per stebuklą niekas motininėje plokštėje nenudegė ir kompiuteriui nieko nenutiko, net USB veikia.

Po remonto viskas atrodo taip:

Pažiūrėjus į programatorių net nepanašu kad būtų buvęs remontuotas, bet tai išduoda tik vienas rezistorius, kurį matote dešinėje. Turiu visus dažniausiai pasitaikančius paviršinio montažo rezistorių ir kondensatorių nominalus, bet 6,8 Omo neturėjau… O ką tokiu atveju daryti? Negi dėl to važiuoti į parduotuvę? Originaliai visų paviršinio montažo rezistorių ir kondensatorių korpusai buvo 0805, bet tą “tiltelį” pastačiau iš 0603. 1+4,7+1=6,7 Omo. Beveik 6,8. Dėl šio neatitikimo programavimo metu duodama įtampa yra ne 5V, o 4,9V… Tame bėdos nematau, o taip pat nemato ir elektronika.

Imtuvas atrodo kiek baisiau… Visus nusprogusius takelius teko “atstatyti” laideliais. Taip pat ištuštinau savo mikrovaldiklių ATtiny13 rezervą ir dar teko pirkti gana brangų (~50Lt) RF modulį. Bent jau tiek, kad dabar vėl viskas veikia ir apturėjau gerą pamoką.

Bijojau kad programatoriaus gali nepavykt prikelti, o tokiu atveju būčiau paleidęs 100€ į orą (taip, šis programatorius tiek kainuoja). Šis programatorius (ASIX PRESTO) yra rimtas dalykas, programuojantis daug visokių mikrovaldiklių ir atminčių, taip pat turintis gana neblogas apsaugas, kurios, beje, man labai padėjo ieškant sugedusių dalių:

Apibendrinant: apturėjau truputėlį rūpesčių ir labai gerą pamoką. Na ir, žinoma kažkiek nuostolių: 75Lt materialinės ir geras pusdienis darbo. Pasimokykit iš mano klaidos ir būkit atidūs dirbant su faze…

Kompiuterio akumuliatoriaus kalibravimas

Šiandien nieko nenuveikiau “į temą”, tačiau jau kelintą dieną iš eilės kuopiu namus: išmetu ko nereikia, parduodu ką įmanoma parduoti. Žodžiu, vyksta apsivalymas.

Taigi dabar į mano rankas pakliuvo abejotinos kokybės akumuliatoriai, skirti DELL Latitude serijos nešiojamiesiems kompiuteriams:

Šie akumuliatoriai kišasi vietoje kompiuterio optinio įrenginio. Aš optinėmis laikmenomis nebesinaudoju jau kelis metus, taigi nematau prasmės tokį įrenginį turėti kompiuteryje, o štai papildomas akumuliatorius labai praverstų.

Problema tik kad šie akumuliatoriai guli labai ilgai, o ir gauti buvo neaišku iš kur ir kokio stovio. Visokį tokį chlamą aš pardavinėju per eBay, o šitų akumuliatorių kainos ten gana solidžios. Man rūpi geri pirkėjų atsiliepimai, o ir iš prigimties aš nepernešu nežinoti su kuo turiu reikalą, taigi patikrinau šiuos akumuliatorius, visus iki vieno. Testas buvo atliekamas sekančiai: išjungiamas WiFi/BT ryšys, ekrano ryškumas nustatomas 50% ir paleidžiamas filmas (700MB *.avi) per visą ekraną. Kompiuteris – DELL Latitude D620 su Core Duo 1,86 GHz procesoriumi. Ir iškart pasimatė problema:

Čia matote akumuliatoriaus išsikrovimo grafiką. Kompiuteris veikė kaip veikęs, akumuliatoriaus procentai pamažu mažėjo.. Kol ties maždaug 37% įvyko lūžis ir akumuliatoriaus talpa staiga nukrito iki 7%. Žinoma tada vėl normaliu greičiu išsikrovė iki 5%, o tada jau prasidėjo “hibernate” procedūra. Atkreipkite dėmesį, kad akumuliatorius laikė maždaug 1 val. 40 min. Toks netikėtai greitas išsijungimas dažnam vartotojui turėtų būti gana nemalonus, taigi sumaniau akumuliatorių sukalibruoti.

O kas gi yra tas kalibravimas? Visų pirma, kompiuterių, kaip ir mobiliųjų telefonų akumuliatoriuose yra ličio polimerų arba ličio jonų celės. Litis savaime yra labai aktyvi medžiaga ir gali užsidegti dėl menkiausios smulkmenos, pavyzdžiui, patekusio oro (litis ugnimi reaguoja į ore esančius vandens garus), perkrovus arba pernelyg iškrovus. Kad akumuliatorių apsaugoti nuo gaisro ar ankstyvos mirties, būtina jį prižiūrėti. Na dėl oro patekimo tai aišku – nedaužyti, nekalti vinių ir pan. Nuo perkrovimo ir per didelio iškrovimo galima apsisaugoti stebint kiekvienos akumuliatoriaus celės įtampą. Maksimali saugi LiPO/Li-Ion celės krovimo įtampa yra 4,2 V, o minimali iškrovimo – 3 V. Taigi, saugus celės įtampų intervalas yra 3..4,2V. Darbine įtampa laikoma 3,7 V. O kaip kompiuteris žino kiek procentų akumuliatoriaus talpos yra išnaudota? Tam reikalui absoliučiai kiekviename kokybiškame ličio akumuliatoriuje būna integruoti valdikliai, dar vadinami BMS – Battery Management System. Šis valdiklis nuolat stebi akumuliatorių ir nustato kokia yra jo reali talpa. Kompiuterių akumuliatoriai dažniausiai turi 3 nuosekliai sujungtas celes (ir po 2-3 lygiagrečiai, tai sumoje 6-9 celės), kurios gali skirtis savo talpa. Akumuliatorių įkraunant ir iškraunant daug kartų, dėl celių nevienodumo stipriai išsibalansuoja įtampos. Tarkime gaunasi, kad dviejų celių įtampos krovimo metu yra tik po 4V, o trečiosios – 4.2V. tokiu atveju toliau krauti nebegalima, bet tuo pačiu ir neišnaudojama pilna akumuliatoriaus talpa. Kad šio disbalanso galima būtų išvengti, valdiklis celes taip pat ir balansuoja. Balansavimas atliekamas paprastai – krovimo metu yra priverstinai sumažinama aukščiausią įtampą laikančios celės srovė (lygiagrečiai prijungiant šuntą). Žodžiu, akumuliatoriaus valdiklis yra gudrus ir sudėtingas daiktas.

Mano atveju celės gulėjo nenaudojamos maždaug metus ar net ilgiau. Tarkime, kad naudojant paskutinį kartą jų talpa buvo 4320 mAh (gamyklinė šių akumuliatorių talpa). Akumuliatoriams begulint celės sensta, mažėja jų talpa, o kol akumuliatorius nenaudojamas, valdiklis nieko apie tai nenutuokia. Taigi dėl to ir gauname aukščiau pavaizduotą rezultatą: valdiklis yra įsitikinęs, kad talpa yra 4320 mAh, tačiau įtampai nukritus žemiau kritinės ribos jis susivokia, kad vis tik akumuliatoriaus talpa yra stipriai sumažėjusi ir staigiai pameta bemaž 30% talpos.

Šią neprognozuoto talpos kritimo problemą galima spręsti kalibruojant akumuliatoriaus valdiklį. Tai atliekama pilnai įkraunant ir iškraunant akumuliatorių: kompiuteris tiesiog paliekamas dirbti iš akumuliatoriaus kol išsijungs. Deja standartiškai, akumuliatoriaus talpai nukritus iki 4-5%, Windows OS išsijungia, t.y. nueina į hibernate arba standby režimus, o tai nepilnai iškrauna akumuliatorių. Su windows XP ši problema sprendžiama paprastai: kažkur per “power options” nustatoma, kad kompiuteris neišsijungtų. Aš naudoju Windows 7 x64 Enterprise, o čia tokio pasirinkimo nėra. Tiksliau yra, bet leidžia tik pasirinkti tik tarp hibernate ir standby, o pasirinkimas “no action” neaktyvus. Tai galima apeiti konsolėje parašant šią eilutę:

powercfg -setdcvalueindex SCHEME_CURRENT SUB_BATTERY BATACTIONCRIT 0

Rezultate kompiuteris dirbs tol, kol paties akumuliatoriaus valdiklis fiziškai atjungs celes nuo kompiuterio. Atlikdami kalibravimą būtinai išsisaugokite visus dokumentus, nes tai tas pats, kas stacionarų kompiuterį išjungti iš rozetės.

Man kalibravimo metu buvo šioks toks netikėtumas (pav. dešinėje) – akumuliatoriaus talpa nukrito iki apskrito nulio, tačiau kompiuteris ir toliau veikė.. Ir ne šiaip veikė, o rodė filmą dar visą pusvalandį! Na tokio dalyko dar neteko matyti. Pasidarė labai įdomu kaip gi laikosi akumuliatoriaus celės ir kokia jų įtampa, nes suabejojau ar valdiklis tikrai atjungs celės įtampai nukritus iki 3V, ar vis tik iškraudinės ir toliau.

Šiame paveikslėlyje matote bendrą akumuliatoriaus įtampą, t.y. 9,61 V. Šis matavimas atliktas nuo 0% pasimatymo praėjus maždaug 20 minučių. Pagal teoriją, valdiklis turi išjungti akumuliatorių, kai bent vienos celės įtampa nukrenta iki 3 V. Jei visos celės yra visiškai identiškos, tai bendra akumuliatoriaus įtampa turėtų nukristi iki 9 V (nes viso 6 celės; 3*2). Palaukus dar apie 10 minučių kompiuteris išsijungė, kai bendra akumuliatoriaus įtampa buvo 9,11 V. Tai reiškia, kad:

  1. Teorija pasitvirtino;
  2. Celės nėra visiškai identiškos, tarkime vienos celės įtampa buvo 3V, o kitų 3,05 ir 3,06 V. Bet kokiu atveju tai labai geras rezultatas.

Po šios kalibravimo procedūros padariau dar vieną pilną iškrovimą kad galėčiau pamatyti kas gi gavosi. O gavosi štai kas:

Linija vis tik nėra visiškai tiesi, bet nebeliko neprognozuojamo talpos kritimo, o kaip tik – ties 8% akumuliatoriaus talpa apsistoja apie dešimt minučių. Kažin ar tai yra problema, veikiau pliusas – bus daugiau laiko išsisaugoti visiems dokumentams. Tik atkreipkite dėmesį, kad po kalibravimo kompiuterio darbo laikas nepasikeitė, taip ir liko 1 val. 40 min. Matyt akumuliatoriaus valdiklis mano, kad pilnas iškrovimas gali būti neprognozuojamas ir kompiuteris gali atsijungti vos įpusėjus hibernate procedūrai, o tai lemtų duomenų praradimą. Bet kokiu atveju nuo šiol stebėsiu akumuliatoriaus įtampą ir pats spręsiu kada gi jau būtų pats laikas viską išsisaugoti….

Tai tiek apie akumuliatorius, tikiuosi buvo naudinga…

Hello world!

“Sveikas, pasauli!” Kitaip tariant, pagaliau prisiruošiau ir paleidau šitą blogą. O prisiruošiau ne šiaip sau, bet todėl, kad jau ilgiau nei metus aktyviai domiuosi elektriniu transportu. Esu šioje srityje šiek tiek nuveikęs, o nuveiktus darbus vis rasdavau kur pristatyti – tai šian, tai ten.. Nuo šiol stengsiuosi viską rašyti čia, taip pat bandysiu surankioti visus interneto platybėse išsimėčiusius savo darbų trupinius ir sudėti čia. Na ir žinoma, kartas nuo karto vis užeina noras ką nors trumpai aprašyti ar papletkavoti, tai manau čia bus tinkama vieta..

Tai kol kas tiek.

Kategorijos: Įvairūs Žymos: