Sari la conținut
ELFORUM - Forumul electronistilor

Descărcare acumulatori NI-MH asistată de Arduino Uno


mihai 7

Postări Recomandate

  • Răspunsuri 85
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Am înlocuit tranzistorii IRFZ44N cu IRLZ44N. Pentru un acumulator de 8.4 V, tensiunea afișată în terminal este aproape exactă, atât cu sarcină cât și fără sarcină, iar pentru un acumulator de 1.2 V, există o diferență între tensiunea reală a acumulatorului și cea afișată în terminal de aprox. 40 mV (mai mică cu 40mV decât cea reală). Diferența este și mai mică atunci când nu este conectată sarcina de 1R5.

Aș fi preferat să nu existe acea diferență, dar cred că este neglijabilă, nu-i așa?

 

PS: Am păstrat schema originală, cu rezistența de 10k între poarta tranzistorilor și masă. Atunci când am încercat varianta propusă de @dumitrumy, cu semnalul Arduino aplicat prin rezistența de 10k, exista o diferență și mai mare între tensiunea reală a acumulatorilor și cea afișată în terminal, chiar și pentru acumulatori de 8.4V.

Editat de mihai 7
Link spre comentariu

Unde am recomandat eu 10k? Simularea pusa de mine era doar pt a raspunde la aceasta postare:

CITAT:   Nimeni nu vede în prima schemă că prin Q2 curentul trece invers? Chiar și cu rezistența de 1R5 pusă în paralel cu el, fără circuitul LM2941, curentul trece tot invers prin el în momentul în care e pornită descărcarea. Q2 trebuie scos de tot iar acumulatorul pus cu - la masă.

Editat de dumitrumy
greseli de scriere
Link spre comentariu
Acum 1 oră, mihai 7 a spus:

Am înlocuit tranzistorii IRFZ44N cu IRLZ44N. Pentru un acumulator de 8.4 V, tensiunea afișată în terminal este aproape exactă, atât cu sarcină cât și fără sarcină, iar pentru un acumulator de 1.2 V, există o diferență între tensiunea reală a acumulatorului și cea afișată în terminal de aprox. 40 mV (mai mică cu 40mV decât cea reală). Diferența este și mai mică atunci când nu este conectată sarcina de 1R5.

Aș fi preferat să nu existe acea diferență, dar cred că este neglijabilă, nu-i așa?

Din ce inteleg, referinta ADC este 5V. Cand masori tensiuni mici, e de preferat sa schimbi referinta la o valoare mai mica. La 5V ai un LSB de cam 5mV. Daca schimbi referinta la 1V, pentru citirile de tensiuni mici/1 celula, atunci 1LSB este cam 1mV. Ideea e sa profiti de cat mai multi dintre cei 10b ai ADC-ului. 

Link spre comentariu
La 23.08.2022 la 19:00, Liviu.Mihaiu a spus:

Fa exact schema simulata de user @dumitrumy mai sus.
Nu cred ca a introdus parametrii unui Ni-Mh, dar poti testa asa cu tipul ala de MOSFET-uri.

 

Acum 1 oră, dumitrumy a spus:

Unde am recomandat eu 10k?

 

Domnule @dumitrumy, îmi cer iertare pentru că v-am atribuit afirmații pe care nu le-ați făcut, eu așa am înțeles din cele spuse de domnul @Liviu.Mihaiu, căruia de altfel îi sunt recunoscător pentru răspunsurile oferite, ca și celorlalți care m-au ajutat. 

 

Acum 27 minute, Mircea a spus:

Daca schimbi referinta la 1V, pentru citirile de tensiuni mici/1 celula, atunci 1LSB este cam 1mV. Ideea e sa profiti de cat mai multi dintre cei 10b ai ADC-ului. 

 Domnule @Mircea, îmi cer iertare, dar nu mă pricep la citirile "analog to digital". Nu știu ce reprezintă "1LSB" și nici "10b". Prin urmare, cum trebuie modificat codul pentru a îndeplini cele spuse de dvs.?

Editat de mihai 7
completare afirmații
Link spre comentariu

@mihai 7, in cod la formulele de citire analogica ai un 5000 (pentru ca referinta e 5V) si 1024 (pentru ca ADC-ul are 10b. 2 la puterea 10 = 1024 valori, 1 valoare = 1LSB).

 

Tu folosesti 5V care vin direct din alimentare ca referinta pentru ADC. Orice variatie si perturbatie a acestei tensiuni se reflecta in valoarea afisata pe ecranul montajului tau. E de preferat ca referinta sa fie separata si una de calitate cand masori la nivel de mV.

 

Acuma, la masuratorile pentru bateria de 8,4V influenta e mai mica, poate nesemnificativa. La cea de 1,2V incepe sa conteze.

 

Nu e foarte simplu de facut, insa nici complicat. La detectia unei celule de 1,2V se trece pe alta referinta si se schimba formulele. 

 

Dar, eu nu lucrez cu Arduino, deci nu stiu cum ia ADC-ul referinta, daca intern poate avea alta referinta de valoare mai mica sau merge numai extern. 

 

In fine, in proiectele mele unde mV conteaza lucrez cu referinte de 4,096V, 2,048V sau 1,024V in functie de ce am pe intrarea ADC. De ce? Gandeste-te ca ai un voltmetru cu cap de scala de 100V. E rezonabil sa masori 50V, dar greu de citit exact cand vrei sa masori 5V. Ai vrea unul cu cap de scala de 10V mai curand. Asta o realizezi schimband valoarea referintei ADC.

 

Daca noua referinta e 1,024V, atunci in formule cei 5000 sunt inlocuiti cu 1024.

 

Important: schimbarea referintei se face doar la schimbarea bateriei de descarcat.

Editat de Mircea
Link spre comentariu

Domnule @Mircea, înțeleg că schimbarea referinței presupune mai mult decât schimbarea formulei de calcul a voltajului afișat (adică:   voltageProbe = ((valueProbe*5000)/1024) * ((R1+R2)/R2);     //calculate voltage at probe in mV )? Mai mult decât atât, eu doresc să folosesc mai departe, în loc de Arduino, un Attiny85. Va crește oare eroarea de afișare a tensiunii acumulatorului?

Link spre comentariu

Exact, nu e doar formula de schimbat.

 

Insa, o varianta mai simpla decat adaugarea unei referinte noi este modificarea divizorului. Practic, se poate face incat la o baterie de 8,4V sa obtii exact 5V cand bateria e plina (ceea ce cred ca ai acum), dar cand treci pe o celula sa deconectezi rezistenta din divizor care da la masa. Astfel, masori 1,2V pe un cap de scala de 5V. 

 

Daca nu vrei sa complici lucrurile, se poate face un sistem cu jumpere pe care le preconfigurezi inainte sa pui bateria. Atat pentru schimbarea referintei, cat si pentru schimbarea divizorului. Se reduce automatizarea insa si exista riscul sa defectezi ADC-ul daca depasesti curentul maxim admis (nu stiu cat e rezistenta serie).

 

Stiu ca undeva in cod ai pus valorile rezistentelor din divizor, cat ai la intearea ADC cu bateria de 8,4V?

Link spre comentariu

La intrarea ADC, cu acumulatorul de 8.4V conectat (în fapt tensiunea acumulatorului este de 9391.10mV, iar la încărcare maximă poate avea o tensiune mai mare de 9500mV, până spre 10000mV), am o tensiune de 2904mV. Rezistențele din divizor au R1=32800Ohmi și R2=14800, adică au un raport de 3.21, ceea ce implică o tensiune maximă de intrare de 16050mV.

Mă gândisem și eu la modificarea rezistențelor din divizor, astfel încât să aibă un raport puțin mai mare decât 2(suficient cât să suporte în siguranță o intrare de aprox. 10000mV).

Editat de mihai 7
completare
Link spre comentariu

Am modificat  R1 = 20330.00, iar R2 = 14800.00 (a rărmas la fel). Numai că acum îmi afișează în terminal valori mult mai mici și cu acumulatorul de 8.4 V conectat. Ce valori ar trebui alese pentru divizor pentru a optimiza citirea exactă a tensiunii în terminal?

Link spre comentariu

Formula asta:

voltageProbe = ((valueProbe*5000)/1024)/ (R2/(R1+R2));

iti zice ca valoarea citita de ADC (valueProbe, adica cati LSB a citit ADC-ul) inmultita cu referinta de 5V si impartita la 10b (1024LSB) este ajustata cu cat divide divizorul. 

 

Sa zicem ca vrei sa obtii in terminal 15V cititi.

 

Atunci, simplificand totul (dar considerand ca divizorul divide cu exact 2,9297) ai:

voltageProbe = ((valueProbe*5000)/1024)x2.9297);

In acest caz, ca sa masori 1,2V valueProbe = 82LSB. Daca valueProbe = 81LSB, atunci va afisa 1,187V, la 83LSB = 1,216V. Deci, nu vei avea afisata niciodata o valoare de 1,193V sau 1,211V, caci iese din rezolutia ADC.

 

Daca insa ai o referinta de 1,024V, cu divizor de exact 2, atunci la 1,2V valueProbe = 586LSB, valorile apropiate fiind 1,202V pentru 587LSB sau 1,198V pentru 585LSB. Deja ai o rezolutie de 2mV.

 

Legat de valorile R1 si R2, trebuie sa faci combinatii cat sa obtii o valoare de divizare potrivita capului de scala. Mai sus am dat exemplul cu 15V, dar tu poti adapta unde ai nevoie.

 

Formula fiind: 5x1024x?=valoarea dorita cap de scala. ? este raportul de divizare al divizorului format din R1 si R2.

Link spre comentariu
Acum 14 minute, Mircea a spus:

Daca insa ai o referinta de 1,024V, cu divizor de exact 2, atunci la 1,2V valueProbe = 586LSB, valorile apropiate fiind 1,202V pentru 587LSB sau 1,198V pentru 585LSB. Deja ai o rezolutie de 2mV.

1) Schimbarea referinței ar presupune aplicarea unei tensiuni de 1.024 V - în ce punct? Repet ca vreau să folosesc Attiny85 și deja am toți pinii atribuiți (referința ar trebui aplicată în PB0 - AREF? -  dar deja pinul este folosit).

2) Apoi, în divizor contează doar raportul rezistorilor, sau și valoarea lor (de ordinul kiloohmilor, zecilor de kiloohmi, etc.)?

 

ATtiny85-Pinout.png

PS: Deja folosesc un buffer cu LM358, alt amplificator operațional potrivit nu am găsit.

Editat de mihai 7
Link spre comentariu

17.3 Operation
The ADC converts an analog input voltage to a 10-bit digital value through successive approximation. The minimum value represents GND and the maximum value represents the voltage on VCC , the voltage on the AREF pin or an internal 1.1V / 2.56V voltage reference.
The voltage reference for the ADC may be selected by writing to the REFS[2:0] bits in ADMUX. The VCC supply, the AREF pin or an internal 1.1V / 2.56V voltage reference may be selected as the ADC voltage reference. Optionally the internal 2.56V voltage reference may be decoupled by an external capacitor at the AREF pin to improve noise immunity.

 

De aici: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf

 

Musai sa citesti capitolul 17.

 

Avand referinta interna de 1,1V si 2,56V, poti face 5V ca referinta standard (cum esti acum). Cand detectezi o baterie de 8,4V sau mai mult ramai pe 5V referinta. Cand detectezi 1,2V treci pe 1,1V si ajustezi formula (schimbi 5000 cu 1100). Divizorul ramane acelasi (ca sa nu risti aplicarea unei tensiuni mari pe ADC).

 

La 1,2V ai 372LSB, la 371LSB ai 1,202V, la 373LSB ai 1,195V. Aceste valori sunt supuse erorilor ADC anuntate in foaia de catalog si preciziei referintei interne. Astea sunt inerente si implicite ADC-urilor ieftine din controllere ca cele din acest topic.

  • 1 LSB Integral Non-linearity
  • ± 2 LSB Absolute Accuracy

 

 

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări