Carica batterie con Arduino

Il 16/10/2017 12:37, alfio ha scritto:

ecco lo schema che ho partorito adesso :-)

il modulo step-down sarebbe uno di questi cosi qui a basso costo:

formatting link

la parte di controllo della corrente l'ho affidata a due operazionali esterni, e un mosfet per la scarica (quale mi consigliate ?).

L'uscita PWM di arduino diventa il riferimento in tensione tramite un semplice filtro passa basso RC a 1Hz circa. una uscita digitale decide se il riferimento va usato come corrente di carica o scarica.

il dc-dc step-down dovra' essere regolato per max 2V di uscita.

4 pulsanti per la selezione rapida della batteria in esame, e 4 pulsanti per i vari menu, che devo ancora decidere.

l'ingesso AREF andra' regolato per 2V circa per aumentare la precisione di lettura (se serve).

[FIDOCAD] MC 80 190 0 0 115 LI 80 180 80 190 MC 90 190 0 0 115 LI 90 180 90 190 MC 100 190 0 0 115 LI 100 180 100 190 MC 110 190 0 0 115 LI 110 180 110 190 MC 65 210 0 1 074 MC 130 210 2 0 170 MC 130 220 2 0 170 MC 130 230 2 0 170 MC 130 240 2 0 170 MC 80 250 0 0 115 MC 90 250 0 0 115 MC 100 250 0 0 115 MC 110 250 0 0 115 MC 80 260 0 0 045 MC 90 260 0 0 045 MC 100 260 0 0 045 MC 110 260 0 0 045 LI 110 200 110 250 LI 100 200 100 250 LI 90 200 90 250 LI 80 200 80 250 MC 65 220 0 1 074 MC 65 230 0 1 074 MC 65 240 0 1 074 LI 65 210 120 210 LI 65 220 120 220 LI 65 230 120 230 LI 65 240 120 240 LI 130 210 140 210 LI 130 240 140 240 LI 140 230 130 230 LI 130 220 140 220 LI 140 210 140 260 MC 140 260 0 0 045 TY 75 200 5 3 90 0 0 * 1M TY 75 260 5 3 90 0 0 * 22k LI 200 180 200 190 LI 190 180 190 190 LI 180 180 180 190 LI 170 180 170 190 TY 120 205 5 3 90 0 0 * 1u TY 75 180 5 3 90 0 0 * D11 TY 85 180 5 3 90 0 0 * D10 TY 95 180 5 3 90 0 0 * D9 TY 105 180 5 3 90 0 0 * D3 TY 165 180 5 3 90 0 0 * D13 TY 175 180 5 3 90 0 0 * D12 TY 185 180 5 3 90 0 0 * D8 TY 195 180 5 3 90 0 0 * D7 TY 80 165 5 3 0 0 0 * ____PWM____ LI 60 240 55 240 LI 55 240 55 295 MC 170 190 1 0 074 MC 180 190 1 0 074 MC 190 190 1 0 074 MC 200 190 1 0 074 MC 130 385 2 0 580 MC 105 380 2 0 200 MC 105 360 2 0 200 MC 140 410 3 0 115 MC 160 375 0 0 580 MC 185 380 3 0 115 MC 205 380 0 0 200 MC 225 385 0 0 115 MC 230 380 0 0 445 MC 200 375 3 0 200 MC 135 325 0 0 450 MC 135 345 1 0 000 MC 135 325 3 0 000 LI 135 320 135 315 LI 250 315 250 375 LI 250 385 250 410 LI 250 410 150 410 LI 130 385 135 385 LI 155 410 155 385 LI 155 385 160 385 LI 160 375 130 375 LI 155 375 155 305 LI 200 360 200 305 LI 105 360 200 360 LI 200 375 200 380 LI 195 380 205 380 LI 220 380 230 380 LI 225 380 225 385 LI 90 380 90 360 LI 90 370 85 370 MC 135 415 0 0 115 LI 140 410 135 410 LI 135 350 135 415 LI 225 430 85 430 LI 225 395 225 430 LI 135 425 135 430 SA 135 315 SA 135 385 SA 135 410 SA 135 430 SA 155 410 SA 155 375 SA 200 360 SA 200 380 SA 225 380 SA 90 370 MC 155 300 1 0 074 MC 200 300 1 0 074 MC 85 370 2 0 074 LI 155 295 155 300 LI 55 295 155 295 LI 200 300 200 195 TY 70 290 5 3 0 0 0 * Riferimento corrente TY 195 290 5 3 90 0 0 * 0=Carica 1=Scarica LI 250 315 85 315 MC 85 315 2 0 010 MC 85 430 2 0 020 TY 105 390 5 3 0 0 0 * LM358 TY 115 330 5 3 0 0 0 * BATT TY 60 365 5 3 0 0 0 * Pin 4 TY 60 370 5 3 0 0 0 * Feedback TY 60 375 5 3 0 0 0 * LM2596 TY 60 315 5 3 0 0 0 * Uscita TY 60 320 5 3 0 0 0 * Modulo TY 60 325 5 3 0 0 0 * Step down TY 60 330 5 3 0 0 0 * LM2596 MC 135 430 0 0 045 LI 95 65 95 130 LI 100 65 100 130 MC 80 75 3 0 114 LI 85 70 85 65 LI 90 75 95 75 LI 80 75 75 75 LI 75 75 75 85 LI 75 85 100 85 TY 80 145 5 3 90 0 0 * AREF TY 90 65 5 3 90 0 0 * GND TY 95 65 5 3 90 0 0 * VCC TY 80 65 5 3 90 0 0 * V0 LI 90 110 95 110 LI 80 110 75 110 MC 80 110 1 1 114 LI 85 115 85 130 LI 75 130 75 110 MC 85 120 0 0 170 TY 90 145 5 3 90 0 0 * GND TY 95 145 5 3 90 0 0 * 5V TY 70 145 5 3 90 0 0 * 3v3 MC 185 70 1 0 860 MC 185 85 1 0 860 MC 185 100 1 0 860 MC 185 115 1 0 860 MC 205 70 1 0 860 MC 205 85 1 0 860 MC 205 100 1 0 860 MC 205 115 1 0 860 LI 110 65 110 130 LI 115 65 115 130 LI 120 65 120 130 LI 125 65 125 130 LI 130 65 130 130 LI 135 65 135 130 LI 145 75 135 75 LI 145 90 130 90 LI 145 105 125 105 LI 145 120 120 120 LI 160 120 190 120 LI 190 120 190 115 LI 170 115 170 120 LI 160 105 190 105 LI 190 105 190 100 LI 170 100 170 105 LI 160 90 190 90 LI 190 90 190 85 LI 170 85 170 90 LI 160 75 190 75 LI 190 75 190 70 LI 170 70 170 75 LI 185 70 185 130 LI 205 70 205 130 MC 160 75 0 1 200 MC 160 90 0 1 200 MC 160 120 0 1 200 MC 160 105 0 1 200 TY 115 140 5 3 90 0 0 * D4 TY 120 140 5 3 90 0 0 * D2 TY 125 140 5 3 90 0 0 * D1 TY 130 140 5 3 90 0 0 * D0 TY 110 140 5 3 90 0 0 * D5 TY 105 140 5 3 90 0 0 * D6 TY 105 65 5 3 90 0 0 * RS TY 110 65 5 3 90 0 0 * E TY 115 65 5 3 90 0 0 * DB7 TY 120 65 5 3 90 0 0 * DB6 TY 125 65 5 3 90 0 0 * DB5 TY 130 65 5 3 90 0 0 * DB4 TY 180 140 5 3 90 0 0 * A4 TY 200 140 5 3 90 0 0 * A5 RV 75 40 145 65 RV 65 130 215 180 MC 230 170 2 0 074 MC 230 160 2 0 074 MC 230 150 2 0 074 MC 230 140 2 0 074 LI 225 170 215 170 LI 215 160 225 160 LI 225 150 215 150 LI 215 140 225 140 LI 230 170 250 170 LI 250 170 250 315 TY 245 290 5 3 90 0 0 * Tensione batteria SA 250 315 TY 210 140 5 3 0 0 0 * A0 TY 210 150 5 3 0 0 0 * A1 TY 210 160 5 3 0 0 0 * A2 TY 210 170 5 3 0 0 0 * A3 SA 110 240 SA 100 230 SA 90 220 SA 80 210 TY 125 155 5 3 0 0 0 * Arduino Uno TY 125 415 5 3 0 0 0 * 0.1 TY 145 405 5 3 0 0 0 * 0.1 TY 95 45 5 3 0 0 0 * Display 16x2 LI 95 100 55 100 LI 55 100 55 105 MC 55 105 0 0 045 SA 95 100
Reply to
alfio
Loading thread data ...

Il 16/10/2017 21:28, alfio ha scritto:

molto istruttivo. Registrati, ne vale la pena! (Quale pena???... :-) )

Reply to
LAB

Le sonde DS18B20 sono one-wire e possono essere collegate in parallelo, quindi puoi leggerle tutte con un solo I/O.

--

http://www.avg.com
Reply to
LAB

Uhmm... Non ho mai condiviso dei pulsanti con il display. Come gestisci

semplice mettere i pulsanti sulle uscite di un partitore resistivo e leggere la tensione con un ingresso analogico. Usando resistenze pesate potresti anche rilevare la pressione di due pulsanti contemporaneamente.

--

http://www.avg.com
Reply to
LAB

Il 16/10/2017 23:26, LAB ha scritto:

non ho letto le regole del forum, ma la semplice registrazione non mi fa scaricare il file che mi hai linkato. :-(

se mi dai il link alla discussione in cui c'e' il tuo progetto, comincio a leggere quella.

Reply to
alfio

Il 17/10/2017 10:05, LAB ha scritto:

il display legge i 4 bit dei dati solo quando i 2 ingressi E e RS sono attivi, per cui mentre non comandi il display puoi scrivere i 4 bit come ti pare. io li comando uno per volta, e poi leggo lo stato dei 2 ingressi, memorizzo cio' che leggo, cosi' ho lo stato degli 8 pulsanti in un byte, poi ci faccio quello che mi serve, antirimbalzo compreso. in questo modo gli 8 pulsanti sono indipendenti.

di seguito il codice che ho gia' usato in altri progetti. la funzione va chiamata ciclicamente nel loop, possibilmente a intervalli fissi.

#define BR1_PIN A4 // buttons row input #define BR2_PIN A5

#define BC1_PIN 0 // buttons column output #define BC2_PIN 1 // buttons column output #define BC3_PIN 2 // buttons column output #define BC4_PIN 4 // buttons column output

#define BUT_1 0x01 #define BUT_2 0x02 #define BUT_3 0x04 #define BUT_4 0x08 #define BUT_5 0x10 #define BUT_6 0x20 #define BUT_7 0x40 #define BUT_8 0x80

int oldbut,oldbut1,oldbut2; unsigned long nextscan;

int buttons ( void ) { int b = 0; digitalWrite( BC1_PIN,LOW ); digitalWrite( BC2_PIN,HIGH ); digitalWrite( BC3_PIN,HIGH ); digitalWrite( BC4_PIN,HIGH ); if( digitalRead( BR1_PIN )==LOW ) b |= BUT_1; if( digitalRead( BR2_PIN )==LOW ) b |= BUT_2; digitalWrite( BC1_PIN,HIGH ); digitalWrite( BC2_PIN,LOW ); if( digitalRead( BR1_PIN )==LOW ) b |= BUT_3; if( digitalRead( BR2_PIN )==LOW ) b |= BUT_4; digitalWrite( BC2_PIN,HIGH ); digitalWrite( BC3_PIN,LOW ); if( digitalRead( BR1_PIN )==LOW ) b |= BUT_5; if( digitalRead( BR2_PIN )==LOW ) b |= BUT_6; digitalWrite( BC3_PIN,HIGH ); digitalWrite( BC4_PIN,LOW ); if( digitalRead( BR1_PIN )==LOW ) b |= BUT_7; if( digitalRead( BR2_PIN )==LOW ) b |= BUT_8; int but = b & oldbut1 & oldbut2; // 3 scantime debounce oldbut2 = oldbut1; oldbut1 = b; return but; }

void setup() { // put your setup code here, to run once: nextscan = millis(); oldbut = oldbut1 = oldbut2 = 0; }

void loop() { // put your main code here, to run repeatedly:

if ( millis() >= nextscan ) { nextscan += 50; // every 50 millis int but = buttons(); int pressed = but & ( but ^ oldbut ); int released = oldbut & ( but ^ oldbut ); oldbut = but;

if ( BUT_1 & pressed ) ; // do action for rising edge if ( BUT_1 & released ) ; // do action for falling edge if ( BUT_1 & but ) ; // do action while active } }

Reply to
alfio

Buongiorno, Siete alla ricerca di finanziamento per sia rilanciare le vostre attivit? ?; sia per la realizzazione di un progetto, sia per comperarvi un appart amento ma purtroppo la banca li pone a condizioni di cui siete incapaci di

iti che vanno di 1.000 ? a 2.300.000 ? ad ogni persona capa

on esitate di contattarlo per ulteriori informazioni. Posta elettronica: snipped-for-privacy@hotmail.com Whatsapp : +330754190215

Grazie!

Reply to
Patrick Lauvergne

La discussione sta qui:

formatting link

Per avere l'accesso completo devi presentarti nell'apposita sezione. Bastano poche parole...

--

http://www.avg.com
Reply to
LAB

converrebbe scrivere su BR1 e BR2 e leggere parallelamente BC1...4, usando PORT e PIN per velocizzare parecchio l'operazione:

PORTC&= 11101111; // Mette a 0 A4 BUT_A= PIND &00010111; // Legge I/O 0,1,2,4 BUT_1= BUT_A&00000001; // BUT_1=I/O 0 BUT_2=(BUT_A&00000010)>>1; // BUT_2=I/O 1 BUT_3=(BUT_A&00000100)>>2; // BUT_3=I/O 2 BUT_4=(BUT_A&00010000)>>4; // BUT_4=I/O 4

PORTC&= 11101111; // Mette a 0 A5 BUT_B=PIND&00010111; // Legge I/O 0,1,2,4 BUT_5= BUT_A&00000001; // BUT_5=I/O 0 BUT_6=(BUT_A&00000010)>>1; // BUT_6=I/O 1 BUT_7=(BUT_A&00000100)>>2; // BUT_7=I/O 2 BUT_8=(BUT_A&00010000)>>4; // BUT_8=I/O 4

(Salvo errori...)

--

http://www.avg.com
Reply to
LAB

Ooops... Mancano tutte le "B" per indicare la notazione binaria e ho sbagliato A5!

PORTC&= B11101111; // Mette a 0 A4 BUT_A= PIND &B00010111; // Legge I/O 0,1,2,4 BUT_1= BUT_A&B00000001; // BUT_1=I/O 0 BUT_2=(BUT_A&B00000010)>>1; // BUT_2=I/O 1 BUT_3=(BUT_A&B00000100)>>2; // BUT_3=I/O 2 BUT_4=(BUT_A&B00010000)>>4; // BUT_4=I/O 4

PORTC&= B11011111; // Mette a 0 A5 BUT_B= PIND &B00010111; // Legge I/O 0,1,2,4 BUT_5= BUT_A&B00000001; // BUT_5=I/O 0 BUT_6=(BUT_A&B00000010)>>1; // BUT_6=I/O 1 BUT_7=(BUT_A&B00000100)>>2; // BUT_7=I/O 2 BUT_8=(BUT_A&B00010000)>>4; // BUT_8=I/O 4

--

http://www.avg.com
Reply to
LAB

Il 20/10/2017 15:59, LAB ha scritto:

non ho capito

bisogna pero' aggiungere altri 2 diodi, e va verificato se l'ingresso con 1,2V viene letto come 0. i diodi su BC1..4 ci vanno perche' sono comunque delle uscite quando viene comandato il display, e vanno aggiunti anche su BR1..2 perche' diventano uscite nella lettura dei pulsanti, questo perche' bisogna proteggere le uscite nel caso di pressione contemporanea di 2 o piu' pulsanti.

piuttosto, che menu ci mettiamo ? io direi:

- configurazione * capacita' nominale [mAh] * corrente di carica [mA] * corrente di scarica [mA] * corrente di mantenimento [mA]

- comando * esegui carica * esegui scarica * esegui scarica e carica * esegui cicli di test (scarica + carica) * interrompi

- visualizzazione * tensione batteria [V] * tempo trascorso [h:m:s] * accumulatore [mAh] * resistenza interna [mOhm]

Reply to
alfio

Il 20/10/2017 17:50, alfio ha scritto:

Beh... Per protezione ci puoi mettere due resistenze, oppure 4 se vuoi considerare che due pulsanti dello stesso gruppo potrebbero essere

apposta... :-)

Reply to
LAB

Il 20/10/2017 17:50, alfio ha scritto:

Ah... Tra l'altro usi due ingressi solo per quello, quindi non devi fare commutazioni dei pin uscita/ingresso.

display perda qualche carattere, a meno che tu riscriva il display a ogni ciclo (il che rallenta notevolmente il ciclo!). Il display va

scritto o bisogna scrivere una "pagina" totalmente diversa.

Reply to
LAB

Il 20/10/2017 19:13, LAB ha scritto:

questo lo so, il codice che ho postato e' parte di un progetto funzionante

sinceramente non capisco perche' il display dovrebbe perdere dei caratteri.

Reply to
alfio

Stavo notando che non ti occorre fare commutazioni ingresso/uscita. Inizialmente credevo che rientrassi commutando 2 uscite in ingressi.

--


----Android NewsGroup Reader---- 
http://usenet.sinaapp.com/
Reply to
LAB

quelli dei pulsanti. Io, se avessi pensato di farlo, mi sarei posto il problema di alternare precisamente i dati ma, se funziona bene come dici, basta non porsi il problema. :-)

--


----Android NewsGroup Reader---- 
http://usenet.sinaapp.com/
Reply to
LAB

Buongiorno, Siete alla ricerca di finanziamento per sia rilanciare le vostre attivit? ?; sia per la realizzazione di un progetto, sia per comperarvi un appart amento ma purtroppo la banca li pone a condizioni di cui siete incapaci di

iti che vanno di 1.000 ? a 2.300.000 ? ad ogni persona capa

on esitate di contattarlo per ulteriori informazioni. Posta elettronica: snipped-for-privacy@hotmail.com Whatsapp : +330754190215

Grazie!

Reply to
Patrick Lauvergne

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.