Cuprins:

Un alt tester de capacitate a bateriei: 6 pași
Un alt tester de capacitate a bateriei: 6 pași

Video: Un alt tester de capacitate a bateriei: 6 pași

Video: Un alt tester de capacitate a bateriei: 6 pași
Video: Tester de acumulatori cu litiu 2024, Iulie
Anonim
Încă un alt tester de capacitate a bateriei
Încă un alt tester de capacitate a bateriei
Încă un alt tester de capacitate a bateriei
Încă un alt tester de capacitate a bateriei

De ce încă un tester de capacitate

Am citit o mulțime de instrucțiuni diferite de construire a testerului, dar niciuna nu pare să se potrivească nevoilor mele. Am vrut să pot testa și mai mult decât celule NiCd / NiMH sau Lion singulare. Am vrut să pot testa o baterie a sculei electrice fără să o iau mai întâi la o parte. Deci, am decis să mă uit mai atent la această chestiune și să proiectez una a mea. Un lucru duce la altul și în cele din urmă am decis să scriu eu însumi un instructiv. De asemenea, am decis să nu intru în toate detaliile despre cum să construiți testerul, deoarece toată lumea poate decide cu privire la anumite alegeri, cum ar fi dimensiunea rezistorului de utilizat sau dacă este nevoie de un PCB sau este suficient Veroboard și există, de asemenea, o mulțime de instrumente cum să instalați vulturul sau cum să faceți un PCB. Cu alte cuvinte, mă voi concentra asupra schemelor și a codului și a modului de calibrare a testerului.

Pasul 1: Istoric - Versiunea 1

Istorie - Versiunea 1
Istorie - Versiunea 1

Mai sus este prima versiune cu menționat mai jos peste 10V suport de intrare adăugat (R12 și R17 și Q11 și Q12).

Prima versiune a fost preluată mai mult sau mai puțin dintr-un instructable de deba168 (din păcate nu pot găsi instructable pentru a oferi un link). Au fost făcute doar câteva modificări minore. În această versiune am avut o rezistență de încărcare de 10 ohmi controlată de un mosfet. Acest lucru a adus însă unele probleme. La testarea unei celule NiCd sau NiMH, timpul necesar a fost ușor măsurat în ore, dacă nu în zile. O baterie de 1500mAh a durat peste 12 ore (curentul era de doar 120mA). Pe de altă parte, prima versiune ar putea testa doar bateriile sub 10V. Iar o baterie complet încărcată de 9,6 V poate avea de fapt până la 11,2 V, care nu a putut fi testată din cauza limitei de 10 V. Trebuia făcut ceva. În primul rând, tocmai am adăugat câteva mosfete și rezistențe pentru a face divizoarele de tensiune să poată permite mai mult de 10V. Dar, pe de altă parte, aceasta a adus o altă problemă. O baterie de 14,4V complet încărcată poate avea până la 16,8V tp, ceea ce cu rezistor de 10 ohmi însemna 1,68A curent și, desigur, o disipare a puterii de la rezistorul de încărcare de aproape 30W. Deci, cu tensiune scăzută timp de testare prea mare și cu tensiune înaltă curent prea mare. În mod evident, nu era o soluție adecvată și era nevoie de o dezvoltare ulterioară.

Pasul 2: Versiunea 2

Am vrut o soluție în care curentul să rămână în anumite limite, indiferent de tensiunea bateriei. O soluție ar fi fost să folosesc PWM și doar un rezistor, dar am preferat să am o soluție fără curent pulsatoriu sau să am nevoie să disip căldura MOSFET. Astfel, am creat o soluție cu 10 sloturi de tensiune, fiecare 2V lățime, folosind 10 rezistențe de 3,3ohm și un mosfet pentru fiecare rezistor.

Pasul 3: Așa s-a dovedit

Așa s-a dovedit
Așa s-a dovedit

Comentarii despre circuit Se poate argumenta că pierderea de tensiune asupra mosfetului este neglijabilă, deoarece rezistența mosfetului este atât de redusă, dar am lăsat alegerea mosfetului la cititor și astfel rezistența poate trece chiar și peste 1 ohm unde începe să contează. În prima versiune, alegerea corectă a unui MOSFET ar elimina necesitatea măsurării punctelor inferioare, dar în versiunea 2 am decis să măsoară tensiunea pe un singur rezistor, ceea ce face important să avem de fapt două puncte de măsurare. Iar motivul din spatele alegerii a fost simplitatea cablării Veroboard. Acest lucru adaugă o anumită eroare de precizie, deoarece tensiunea măsurată pe un rezistor este semnificativ mai mică decât măsurarea pe toate rezistențele. La selectarea componentelor am decis să folosesc ceea ce aveam deja la îndemână sau ce puteam obține cu ușurință. Acest lucru a condus la urmărirea BOM:

  • Arduino Pro Mini 5V! IMPORTANT! Am folosit versiunea 5V și totul se bazează pe ea
  • Afișaj OLED I2C de 128x64
  • 10 x 5W rezistențe de 3,3 Ohm
  • 3 x 2n7000 mosfete
  • 10 x mosfete IRFZ34N
  • Rezistențe 6 x 10 kOhm
  • 2 rezistențe de 5 kOhm
  • Condensator 16V 680uF
  • 1 vechi ventilator CPU

Nu am adăugat următoarele în schemă

  • rezistențele pullup pe liniile I2C, pe care le-am observat, au făcut ca afișajul să fie mai stabil
  • linii de înaltă tensiune
  • condensator în linie de 5V care a stabilizat și afișajul

În timpul testării, am observat că rezistențele de încărcare se vor încălzi destul de mult, mai ales dacă ar fi toate folosite. Temperatura a crescut la peste 100 de grade Celsius (care este peste 212 grade Fahrenheit) și dacă întregul sistem trebuie închis într-o cutie, ar trebui să existe un fel de răcire. Rezistențele pe care le-am folosit sunt de 3,3 ohmi / 5W și curentul maxim ar trebui să apară cu aproximativ 2V per rezistor, dând 2V / 3,3 = 0,61A, ceea ce duce la 1,21W. Am ajuns să adaug un simplu ventilator în cutie. Mai ales pentru că mi s-a întâmplat să am un ventilator vechi al procesorului.

Funcționalitate schematică

Este destul de direct și explicativ. Bateria de testat este conectată la seria de rezistențe și la masă. Punctele de măsurare a tensiunii sunt conexiunea bateriei și primul rezistor. Divizoarele de tensiune sunt folosite apoi pentru a scădea tensiunea la un nivel mai potrivit pentru Arduino. O singură ieșire digitală este utilizată pentru a selecta gama de 10V sau 20V a separatoarelor. Fiecare rezistență din sarcină poate fi conectată individual la pământ folosind mosfete, care sunt acționate direct de Arduino. Și, în cele din urmă, afișajul este conectat la pinii Arduino I2C. Nu sunt multe de spus despre schematicul J

Pasul 4: Codul

Codul
Codul

Mai sus se poate vedea funcționalitatea brută a codului. Să aruncăm o privire mai atentă la cod atunci (fișierele arduino ino sunt atașate). Există o serie de funcții și apoi bucla principală.

Bucla principală

Când măsurarea este gata, rezultatele sunt afișate, iar execuția se termină acolo. Dacă măsurarea nu este încă efectuată, atunci se verifică mai întâi ce tip de baterie este selectat și apoi tensiunea pe intrare. Dacă tensiunea depășește 0,1 V, trebuie să existe cel puțin un fel de baterie conectată. În acest caz, este apelat un subrutină pentru a încerca să afle câte celule este în baterie pentru a decide cum să testeze. Numărul de celule este mai mult sau mai puțin informații care ar putea fi utilizate mai bine, dar, în această versiune, este raportat numai prin interfața serială. Dacă totul este bun, procesul de descărcare este început și la fiecare rundă a buclei principale se calculează capacitatea bateriei. La sfârșitul buclei principale, afișajul este populat cu valori cunoscute.

Procedura de afișare a rezultatelor

Funcția showResults setează pur și simplu liniile care trebuie afișate pe afișaj și, de asemenea, șirul care trebuie trimis la interfața serială.

Procedura de măsurare a tensiunilor

La începutul funcției se măsoară Vcc-ul Arduino. Este necesar pentru a putea calcula tensiunile măsurate folosind intrări analogice. Apoi, tensiunea bateriei este măsurată folosind un interval de 20V pentru a putea decide ce interval de utilizare. Apoi se calculează atât tensiunea bateriei, cât și tensiunea rezistenței. Măsurările tensiunii bateriei profită de clasa DividerInput, care are metode de citire și tensiune pentru a da citirea brută sau tensiunea calculată a intrării analogice în cauză.

Procedura de selectare a valorilor utilizate

În funcția selectUsedValues, numărul de celule este ghicit, iar limitele înalte și joase pentru baterie sunt setate pentru a fi utilizate cu procedura de descărcare. De asemenea, măsurarea este marcată ca începută, limitele pentru această procedură sunt stabilite la începutul variabilelor globale. Deși ar putea fi constante și ar putea fi, de asemenea, definite în cadrul procedurii, deoarece nu sunt utilizate la nivel global. Dar hei, există întotdeauna ceva de îmbunătățit:)

Procedură pentru calcularea capacității bateriei

Funcția de descărcare are grijă să numere efectiv capacitatea bateriei. Obține limitele joase și înalte ale tensiunilor pentru baterie sub testare ca parametri. Valoarea ridicată nu este utilizată în această versiune, dar valoarea scăzută este utilizată pentru a decide când să opriți testarea. La începutul funcției, numărul de rezistențe de utilizat se află folosind o funcție creată în acest scop. Funcția returnează numărul de rezistență și în același timp pornește descărcarea și resetează contorul. Apoi, tensiunile sunt măsurate și utilizate împreună cu valoarea cunoscută a rezistorului pentru a calcula curentul. Acum că știm tensiunea și curentul și timpul de la acesta a fost de la ultima măsurare, putem calcula capacitatea. La sfârșitul procesului de descărcare, tensiunea bateriei este comparată cu limita inferioară și, dacă a trecut sub limită, faza de descărcare se oprește, mosfeturile sunt închise, iar măsurarea este semnalizată ca fiind gata.

Procedură pentru găsirea numărului de rezistențe de utilizat

În funcția selectNumOfResistors se face o comparație simplă a tensiunii cu valorile prestabilite și după care se decide numărul de rezistențe care trebuie utilizate. Mosfet-ul adecvat este deschis pentru a omite unele dintre rezistențe. Sloturile de tensiune sunt selectate astfel încât curentul maxim oricând în timpul descărcării să rămână puțin peste 600mA (2V / 3,3 Ohm = 606mA). Funcția returnează numărul de rezistențe utilizate. Deoarece ventilatorul este condus din aceeași linie ca primul mosfet, acesta trebuie să fie întotdeauna deschis atunci când descărcarea are loc.

Pasul 5: Calibrarea contorului

Calibrarea contorului
Calibrarea contorului

Pentru ca instrumentul să fie calibrat, am creat o altă aplicație (atașată). Folosește același hardware. La început, valorile divizorului de corecție sunt setate la 1000.

const int divCorrectionB10V = 1000; // multiplicator de corecție a separatorului în intervalul 10V const int divCorrectionR10V = 1000; // multiplicator de corecție a separatorului în intervalul 10V const int divCorrectionB20V = 1000; // multiplicator de corecție a separatorului în intervalul 20V const int divCorrectionR20V = 1000; // multiplicator de corecție a separatorului în intervalul 20V

în funcția readVcc () tensiunea Vcc rezultată depinde de setarea valorii pe ultima linie a funcției înainte de întoarcere. De obicei, puteți găsi pe internet o valoare de 1126400L pentru a fi utilizată în calcul. Am observat că rezultatul nu a fost corect.

Procesul de calibrare:

  1. Încărcați aplicația de măsurare pe Arduino.
  2. Puteți vedea în Arduino (și în ieșirea serială și dacă ventilatorul se rotește) dacă încărcarea este pornită. Dacă este rotit comutatorul de selectare a tipului de baterie.
  3. Reglați valoarea în readuVCC () pentru a avea un rezultat corect. Luați valoarea pe care o oferă funcția (care este în milivolți) și împărțiți valoarea lungă cu aceasta. Veți obține valoarea brută a referinței interne. Acum măsurați tensiunea reală de alimentare în milivolți cu un multimetru și multiplicați-o cu valoarea calculată anterior și veți obține noua valoare lungă corectată. În cazul meu, funcția a returnat 5288mV când Vcc-ul real era de 5.14V. Calculând 1126400/5288 * 5140 = 1094874 pe care l-am finalizat prin proces. Puneți noua valoare în cod și încărcați-o din nou pe Arduino.
  4. Reglarea valorilor de corecție a divizorului rezistorului de intrare analogică are loc utilizând o sursă de energie reglabilă care este utilizată pentru alimentarea intrării contorului. Cel mai simplu este de a utiliza tensiuni de la 1V la 20V cu pași de 1V și înregistrarea rezultatelor pe o foaie de calcul. În foaia de calcul se ia media. Valorile corectate sunt calculate cu următoarea formulă: „raw_value * range * Vcc / Vin” unde raw_value este valoarea în 10VdivB, 10VdivR, 20VdivB sau 20VdivR în funcție de corecția care trebuie calculată.

Vedeți foaia de calcul cum mi-a părut. Mediile sunt calculate numai din valorile care urmează să fie în interval și valorile respective sunt apoi setate în aplicația reală a contorului.

Asa

const int divCorrectionB10V = 998; // divider correction divider in range 10V const int divCorrectionR10V = 1022; // divider correction divider in range 10V const int divCorrectionB20V = 1044; // divider correction divider in range 20V const int divCorrectionR20V = 1045; // divizor de corecție divizor în intervalul 20V

Reglarea valorii rezistorului se poate face furnizând o anumită tensiune la intrare (adică 2V), comutând comutatorul de tip bat (pentru a porni sarcina) și măsurând curentul care intră și tensiunea pe primul rezistor și împărțind tensiunea cu curentul. Pentru mine 2V a dat 607mA ceea ce dă 2 / 0,607 = 3,2948 ohmi pe care i-am rotunjit la 3,295 ohmi. Deci, acum calibrarea este terminată.

Pasul 6: Ultima NOTĂ

O notă importantă aici. Este imperativ să aveți toate conexiunile în stare excelentă de la baterie la rezistențe. Am avut o conexiune proastă și mă întrebam de ce am obținut cu 0,3V mai puțini volți în rețeaua de rezistență decât pe baterie. Acest lucru a însemnat că procesul de măsurare a ajuns aproape imediat cu celule NiCd de 1,2 V, deoarece limita inferioară de 0,95 V a fost atinsă rapid.

Recomandat: