Turinys:
- 1 žingsnis: istorija - 1 versija
- 2 veiksmas: 2 versija
- 3 žingsnis: Štai kaip tai pasirodė
- 4 žingsnis: Kodas
- 5 veiksmas: matuoklio kalibravimas
- 6 žingsnis: paskutinė PASTABA
Video: Dar vienas akumuliatoriaus talpos testeris: 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Kodėl dar vienas pajėgumų tikrintuvas
Aš perskaičiau daugybę skirtingų testerių kūrimo instrukcijų, bet atrodo, kad nė viena iš jų neatitinka mano poreikių. Norėjau, kad galėčiau išbandyti ne tik vientisas NiCd/NiMH ar „Lion“ląsteles. Norėjau, kad galėčiau išbandyti elektrinio įrankio akumuliatorių, prieš tai jo nepriėmęs. Taigi nusprendžiau atidžiau pažvelgti į šį klausimą ir suprojektuoti savo. Vienas dalykas veda prie kito ir galiausiai nusprendžiau pats parašyti instrukciją. Aš taip pat nusprendžiau nesileisti į visas detales, kaip iš tikrųjų sukurti testerį, nes kiekvienas gali nuspręsti dėl tam tikrų pasirinkimų, pavyzdžiui, kokio dydžio rezistorių naudoti, ar reikia PCB, ar pakanka „Veroboard“, taip pat yra daugybė instrukcijų, kaip įdiegti „Eagle“arba kaip padaryti PCB. Kitaip tariant, aš sutelksiu dėmesį į schemas ir kodą bei kaip kalibruoti testerį.
1 žingsnis: istorija - 1 versija
Aukščiau yra pirmoji versija su žemiau paminėta daugiau nei 10 V įvesties palaikymu (R12 ir R17 ir Q11 ir Q12).
Pirmoji versija buvo daugiau ar mažiau paimta iš instrukcijos, kurią pateikė deba168 (deja, negaliu rasti jo nurodymo pateikti nuorodą). Buvo atlikti tik nedideli pakeitimai. Šioje versijoje turėjau vieną 10 omų apkrovos rezistorių, valdomą „mosfet“. Tačiau tai sukėlė tam tikrų problemų. Bandant vieną NiCd arba NiMH ląstelę, reikiamą laiką buvo galima lengvai išmatuoti valandomis, jei ne dienomis. 1500 mAh baterija užtruko daugiau nei 12 valandų (srovė buvo tik 120 mA). Kita vertus, pirmoji versija galėjo išbandyti tik mažesnes nei 10 V baterijas. Visiškai įkrauta 9,6 V baterija iš tikrųjų gali būti iki 11,2 V, kurios nepavyko išbandyti dėl 10 V ribos. Reikėjo kažką daryti. Pirma, aš tiesiog pridėjau porą mosfetų ir rezistorių, kad įtampos skirstytuvai galėtų leisti daugiau nei 10 V. Bet tai, kita vertus, iškėlė dar vieną problemą. Visiškai įkrauta 14,4 V baterija gali turėti iki 16,8 V tp, o tai su 10 omų rezistoriumi reiškė 1,68 A srovę ir, žinoma, beveik 30 W galios išsklaidymą. Taigi, esant žemai įtampai per ilgas bandymo laikas ir esant aukštai įtampai per didelė srovė. Akivaizdu, kad tai nebuvo tinkamas sprendimas ir reikėjo tolesnio tobulinimo.
2 veiksmas: 2 versija
Norėjau sprendimo, kuriame srovė išliktų tam tikrose ribose, nepriklausomai nuo akumuliatoriaus įtampos. Vienas iš sprendimų būtų buvęs naudoti PWM ir tik vieną rezistorių, tačiau man labiau patiko sprendimas be pulsuojančios srovės arba poreikis išsklaidyti „mosfet“šilumą. Taigi sukūriau sprendimą su 10 įtampos lizdų, kurių kiekvieno plotis 2 V, naudojant 10 3,3 omų rezistorių ir kiekvienam rezistoriui skirtą „mosfet“.
3 žingsnis: Štai kaip tai pasirodė
Galima teigti, kad įtampos nuostoliai per „mosfet“yra nereikšmingi, nes „mosfet“varža yra tokia maža, tačiau aš palikau „mosfet“pasirinkimą skaitytojui, todėl pasipriešinimas gali viršyti net 1 omą ten, kur jis pradeda reikalas. Pirmoje versijoje, pasirinkus tinkamą „mosfet“, nereikėtų matuoti žemesnio taško, tačiau 2 versijoje nusprendžiau išmatuoti tik vieno rezistoriaus įtampą, todėl svarbu turėti du matavimo taškus. Pasirinkimo priežastis buvo paprastumas prijungti „Veroboard“. Tai prideda tam tikrą tikslumo klaidą, nes išmatuota vieno rezistoriaus įtampa yra žymiai mažesnė nei matuojant per visus rezistorius. Rinkdamasis komponentus nusprendžiau naudoti tai, ką jau turėjau po ranka arba ką galėjau lengvai gauti. Tai lėmė tokį BOM:
- Arduino Pro Mini 5V! SVARBU! Aš naudojau 5V versiją ir viskas yra pagrįsta
- 128x64 I2C OLED ekranas
- 10 x 5W 3,3 omų rezistoriai
- 3 x 2n7000 mosfetų
- 10 x IRFZ34N mosfetai
- 6 x 10 kOhm rezistoriai
- 2 x 5 kOhm rezistoriai
- 16V 680uF kondensatorius
- 1 senas CPU ventiliatorius
Aš nepridėjau šių schemų
- I2C linijų traukimo rezistoriai, kuriuos pastebėjau, kad ekranas tapo stabilesnis
- elektros laidai
- 5 V linijos kondensatorius, kuris taip pat stabilizavo ekraną
Bandydamas pastebėjau, kad apkrovos rezistoriai įkaista, ypač jei jie visi buvo naudojami. Temperatūra pakelta iki daugiau nei 100 laipsnių Celsijaus (tai yra daugiau nei 212 laipsnių pagal Celsijų) ir, jei visa sistema turi būti uždaryta dėžutėje, turėtų būti įrengtas tam tikras aušinimas. Rezistoriai, kuriuos aš naudoju, yra 3,3 omai / 5 W, o didžiausia srovė turėtų atsirasti esant maždaug 2 V vienam rezistoriui, suteikiant 2V / 3,3 = 0,61A, todėl gaunama 1,21 W. Galų gale pridėjau paprastą ventiliatorių dėžutėje. Dažniausiai dėl to, kad atsitiktinai turėjau seną procesoriaus ventiliatorių.
Scheminis funkcionalumas
Tai gana tiesiai ir savaime suprantama. Tikrinama baterija yra prijungta prie rezistorių serijos ir įžeminimo. Įtampos matavimo taškai yra akumuliatoriaus jungtis ir pirmasis rezistorius. Tada įtampos skirstytuvai naudojami įtampai sumažinti iki tokio lygio, kuris geriau tinka „Arduino“. Viena skaitmeninė išvestis naudojama norint pasirinkti 10V arba 20V skirstytuvų diapazoną. Kiekvienas apkrovos rezistorius gali būti atskirai įžemintas naudojant „Mosfets“, kuriuos tiesiogiai varo „Arduino“. Galiausiai ekranas prijungtas prie „Arduino I2C“kaiščių. Ne daug ką galima pasakyti apie schematišką J.
4 žingsnis: Kodas
Aukščiau galima pamatyti apytikslį kodo funkcionalumą. Tada atidžiau pažvelkime į kodą (pridedami arduino ino failai). Yra keletas funkcijų, o tada pagrindinė kilpa.
Pagrindinė kilpa
Kai matavimas yra paruoštas, rodomi rezultatai, o atlikimas tuo ir baigiasi. Jei matavimas dar nėra atliktas, pirmiausia patikrinama, kuris akumuliatoriaus tipas yra pasirinktas, o tada įėjimo įtampa. Jei įtampa viršija 0,1 V, turi būti prijungta bent tam tikra baterija. Tokiu atveju pakviečiama paprogramė, kuri bando išsiaiškinti, kiek baterijų yra akumuliatoriuje, kad nuspręstų, kaip atlikti bandymą. Langelių skaičius yra daugiau ar mažiau informacijos, kurią būtų galima geriau panaudoti, tačiau šioje versijoje apie ją pranešama tik naudojant serijinę sąsają. Jei viskas gerai, iškrovimo procesas pradedamas ir kiekviename pagrindinės kilpos raunde apskaičiuojama akumuliatoriaus talpa. Pagrindinės kilpos pabaigoje ekrane yra žinomos vertės.
Rezultatų rodymo tvarka
„ShowResults“funkcija tiesiog nustato ekrane rodomas eilutes ir eilutę, siunčiamą į nuosekliąją sąsają.
Įtampos matavimo procedūra
Funkcijos pradžioje matuojamas Arduino Vcc. Jis reikalingas tam, kad būtų galima apskaičiuoti įtampą, išmatuotą naudojant analogines įvestis. Tada akumuliatoriaus įtampa matuojama naudojant 20 V diapazoną, kad būtų galima nuspręsti, kurį diapazoną naudoti. Tada apskaičiuojama tiek akumuliatoriaus įtampa, tiek rezistoriaus įtampa. Akumuliatoriaus įtampos matavimai naudojasi „DividerInput“klase, kuri turi nuskaitymo ir įtampos metodus, kad gautų neapdorotą rodmenį arba apskaičiuotą atitinkamos analoginės įvesties įtampą.
Naudotų verčių pasirinkimo procedūra
Naudojant funkciją „selectUsedValues“, spėjamas elementų skaičius ir nustatomos aukščiausios ir žemiausios akumuliatoriaus ribos, kurios bus naudojamos atliekant iškrovos procedūrą. Taip pat matavimas pažymėtas kaip pradėtas. Šios procedūros ribos nustatomos kaip visuotiniai kintamieji. Nors jie gali būti pastovūs, jie taip pat gali būti apibrėžti procedūros metu, nes jie nenaudojami visame pasaulyje. Na, bet visada yra ką patobulinti:)
Akumuliatoriaus talpos apskaičiavimo procedūra
Išsikrovimo funkcija rūpinasi akumuliatoriaus talpos skaičiavimu. Kaip parametrai matuojamos žemos ir aukštos įtampos ribos akumuliatoriui. Šioje versijoje aukšta vertė nenaudojama, tačiau maža vertė naudojama sprendžiant, kada sustabdyti bandymus. Funkcijos pradžioje naudojamas rezistorių skaičius nustatomas naudojant tam sukurtą funkciją. Funkcija grąžina rezistoriaus skaičių ir tuo pačiu metu pradeda iškrovą ir iš naujo nustato skaitiklį. Tada įtampa matuojama ir naudojama kartu su žinoma rezistoriaus verte, norint apskaičiuoti srovę. Dabar, kai žinome įtampą ir srovę, ir laikas nuo jo praėjo nuo paskutinio matavimo, galime apskaičiuoti pajėgumą. Pasibaigus iškrovimo procesui, akumuliatoriaus įtampa lyginama su žemąja riba ir, jei ji nukrito žemiau ribos, iškrovimo fazė sustoja, „mosfets“uždaromi ir matavimas pažymimas kaip paruoštas.
Naudojamų rezistorių skaičiaus nustatymo procedūra
Funkcijoje selectNumOfResistors atliekamas paprastas įtampos palyginimas su iš anksto nustatytomis reikšmėmis ir gautas sprendimas dėl naudojamų rezistorių skaičiaus. Atidaromas atitinkamas „mosfet“, kad būtų galima praleisti kai kuriuos rezistorius. Įtampos lizdai parenkami taip, kad didžiausia srovė bet kuriuo iškrovimo metu išliktų šiek tiek didesnė nei 600 mA (2 V/3,3 Ohm = 606 mA). Funkcija grąžina naudojamų rezistorių skaičių. Kadangi ventiliatorius varomas iš tos pačios linijos kaip ir pirmasis „Mosfet“, jis turi būti visada atidarytas, kai vyksta išmetimas.
5 veiksmas: matuoklio kalibravimas
Norėdami sukalibruoti skaitiklį, sukūriau kitą programą (pridedama). Tam naudojama ta pati aparatūra. Pradžioje visos korekcijos daliklio vertės nustatomos į 1000.
const int divTaisymasB10V = 1000; // daliklio taisymo daugiklis 10V diapazone const int divCorrectionR10V = 1000; // daliklio korekcijos daugiklis diapazone 10V const int divCorrectionB20V = 1000; // daliklio pataisos daugiklis diapazone 20V const int divCorrectionR20V = 1000; // daliklio pataisos daugiklis 20V diapazone
funkcijoje readVcc () gaunama Vcc įtampa priklauso nuo vertės nustatymo paskutinėje funkcijos eilutėje prieš grįžtant. Paprastai internete galite rasti 1126400L vertę, kurią reikia naudoti skaičiuojant. Pastebėjau, kad rezultatas buvo neteisingas.
Kalibravimo procesas:
- Įkelkite matavimo programą į „Arduino“.
- „Arduino“(ir serijinėje išvestyje ir ar ventiliatorius sukasi) galite pamatyti, ar apkrova įjungta. Jei taip, pasukite akumuliatoriaus tipo pasirinkimo jungiklį.
- Sureguliuokite readuVCC () reikšmę, kad gautumėte teisingą rezultatą. Paimkite funkcijos pateiktą vertę (kuri yra milivoltais) ir padalinkite su ja ilgąją vertę. Gausite neapdorotą vidinės nuorodos vertę. Dabar multimetru išmatuokite faktinę maitinimo įtampą milivoltais ir padauginkite ją iš anksčiau apskaičiuotos vertės ir gausite naują ištaisytą ilgą vertę. Mano atveju funkcija grąžino 5288 mV, kai faktinis Vcc buvo 5,14 V. Apskaičiuojant 1126400/5288*5140 = 1094874, kurį aš ištaisiau bandydamas. Įdėkite naują vertę į kodą ir vėl įkelkite į „Arduino“.
- Analoginio įėjimo rezistoriaus daliklio korekcijos vertės koreguojamos naudojant reguliuojamą maitinimo šaltinį, kuris naudojamas skaitiklio įėjimui tiekti. Paprasčiausia naudoti įtampą nuo 1V iki 20V su 1V žingsniais ir įrašyti rezultatus į skaičiuoklę. Skaičiuoklėje imamas vidurkis. Pataisytos vertės apskaičiuojamos pagal šią formulę: „raw_value*diapazonas*Vcc/Vin“, kur raw_value yra reikšmė 10VdivB, 10VdivR, 20VdivB arba 20VdivR, priklausomai nuo to, kuri korekcija turi būti apskaičiuota.
Žiūrėkite skaičiuoklę, kaip ji man atrodė. Vidutiniai rodikliai apskaičiuojami tik iš diapazone esančių verčių, tada tos vertės nustatomos faktinėje skaitiklio programoje.
Kaip šitas
const int divTaisymasB10V = 998; // daliklio korekcijos daliklis diapazone 10V const int divCorrectionR10V = 1022; // daliklio korekcijos daliklis diapazone 10V const int divCorrectionB20V = 1044; // daliklio korekcijos daliklis diapazone 20V const int divCorrectionR20V = 1045; // daliklio korekcijos daliklis 20V diapazone
Rezistoriaus vertę galima sureguliuoti tiekiant įvestį tam tikrą įtampą (ty 2 V), perjungiant šikšnosparnio tipo jungiklį (norint įkrauti apkrovą) ir išmatuoti įeinančią srovę ir įtampą per pirmąjį rezistorių ir padalyti įtampą iš srovės. Man 2V davė 607 mA, o tai duoda 2/0,607 = 3,2948 omų, kuriuos suapvalinau iki 3,295 omų. Taigi dabar kalibravimas atliktas.
6 žingsnis: paskutinė PASTABA
Čia yra viena svarbi pastaba. Būtina, kad visos jungtys būtų geros būklės - nuo akumuliatoriaus iki rezistorių. Turėjau vieną blogą ryšį ir galvojau, kodėl rezistoriaus tinklelyje gavau 0,3 V mažiau voltų nei ant akumuliatoriaus. Tai reiškė, kad matavimo procesas beveik iš karto baigėsi 1,2 V NiCd elementais, nes greitai buvo pasiekta apatinė 0,95 V riba.
Rekomenduojamas:
Akumuliatoriaus talpos testeris naudojant „Arduino“[ličio-NiMH-NiCd]: 15 žingsnių (su nuotraukomis)
Akumuliatoriaus talpos testeris naudojant „Arduino“[Lithium-NiMH-NiCd]: Savybės: Nustatykite suklastotą ličio jonų/ličio polimerų/NiCd/NiMH akumuliatorių bet kokios rūšies baterija (žemesnė nei 5 V) Lengva lituoti, statyti ir naudoti
„Pasidaryk pats“„Arduino“akumuliatoriaus talpos testeris - V2.0: 11 žingsnių (su nuotraukomis)
Pasidaryk pats „Arduino“akumuliatoriaus talpos testeris - V2.0: Šiuo metu visur yra netikrų ličio ir NiMH akumuliatorių, kurie parduodami reklamuojant didesne nei tikroji talpa. Taigi tikrai sunku atskirti tikrą ir netikrą akumuliatorių. Panašiai sunku žinoti
Pasidaryk pats „Arduino“akumuliatoriaus talpos testeris - V1.0: 12 žingsnių (su nuotraukomis)
Pasidaryk pats „Arduino“akumuliatoriaus talpos testeris - V1.0: [Paleisti vaizdo įrašą] Išgelbėjau tiek senų nešiojamų baterijų (18650), kad galėčiau jas pakartotinai panaudoti savo saulės energijos projektuose. Labai sunku nustatyti gerus akumuliatoriaus elementus. Anksčiau viename iš savo „Power Bank Instructable“pasakojau, kaip atpažinti
3 X 18650 akumuliatoriaus talpos testeris: 6 žingsniai
3 X 18650 akumuliatoriaus talpos testeris: internete yra daug instrukcijų, kaip sukurti „arduino“pagrįstus talpos testerius. Reikalas tas, kad akumuliatoriaus talpos tikrinimas yra gana ilgas procesas. Tarkime, kad norite iškrauti 2000 mAh bateriją, kurios srovė yra ~ 0,5A. Tai užtruks
Ličio jonų akumuliatoriaus talpos testeris (ličio galios testeris): 5 žingsniai
Ličio jonų akumuliatoriaus talpos testeris (ličio galios testeris): =========== ĮSPĖJIMAS & ATSISAKYMAS ========== Ličio jonų akumuliatoriai yra labai pavojingi, jei netinkamai su jais elgiamasi. NENAUDOKITE ĮKROVIMO / ĮDEGTI / ATIDARYTI ličio jonų šikšnosparnių. Viskas, ką darote naudodami šią informaciją, yra jūsų pačių rizika ====== ===================================