UFOSTUFO il 22/12/2015, 14:26
Dummy Load con Arduino
Salve, ogni giorno ho a che fare con Alimentatori (5-10-20A), Batterie, ecc.
Per testare la loro effettiva potenza mi sono costruito un carico resistivo con resistenze corazzate più una ventola. Il tutto funziona, ma scalda, non è affidabile..
Sarebbe comodo utilizzare un dummy lord (carico elettronico) in cui tramite arduino, posso scegliere la corrente di prova (Graduale in salita se voglio) e regolabile tramite potenziometro.

Si potrebbe utilizzare un display per avere Tensione di uscita, corrente di uscita, potenza, e quello che può' essere utile.

Diciamo che si pensava ad un dummy load con le seguenti caratteristiche: Tensione = 0-36V    Corrente = 0-25A

Se siete interessati potremmo iniziare a buttare giù qualcosa.
Buone Feste

Sabin il 23/12/2015, 8:26
Re: Dummy Load con Arduino
Sarebbe un aggeggio utile. Io di solito metto alla prova le batterie da 12v, e mi marrancio con lampadine da 50W.
Sarebbe interessante se si riuscisse a testare anche piccole stilo ricaricabili da 1,2 volt.
Ancora più interessante se potrebbe misurare il flusso in ricarica.

Apparecchiature come telefonini e altro sui 5 volt per la ricarica utilizzo un alimentatore che visualizza ampere e volt. Ovviamente con tensione regolabile. Con questo sistema posso scegliere se fare cariche veloci o lente. Con cariche lente (4,9 v) la vita della batteria si allunga, e durante la ricarica rimane fredda.

ElettroshockNow il 23/12/2015, 13:02
Re: Dummy Load con Arduino
... bel progetto.

20A a 24V ? ....
Cavolo son quasi 0.5kW di potenza da dissipare  .

Vista la potenza di gioco escluderei una dissipazione sui finali del dispositivo ....

Io proporrei un circuito che monitorizza tensione e corrente e in grado di gestire un carico load che assorba fino a 20A .

A questo punto connettere sul load 5 lampadine come consigliato da Sabin o resistenze corazzate in grado di dissipare la potenza e il circuito dovrà solo gestire in PWM il carico.

Se lavoriamo con frequenze di PWM sui 8Khz (o anche meno) avremo una risoluzione PWM spettacolare .

Ho proposto questa soluzione perché il circuito potrebbe avere anche altri possibili utilizzi:

-dummy load (collegando un carico resistivo esterno)
-fusibile elettronico (collegato tra sorgente e carico)
-limitatore di corrente
-semplice carica batterie

Sabin il 23/12/2015, 15:53
Re: Dummy Load con Arduino
ElettroshockNow :


-dummy load (collegando un carico resistivo esterno)
-fusibile elettronico (collegato tra sorgente e carico)
-limitatore di corrente
-semplice carica batterie



E se per il test delle batterie potrebbe farebbe in automatico, prima scarica,
poi ricarica, con il conteggio dei Wh (separati) in entrambe le direzioni, si
avrebbero le informazioni attendibili per valutare lo stato della batteria.
Ma per non complicare molto, meglio fare le misurazioni manualmente.
Il progetto è un po sopra le mie capacità progettuali. Ma seguirei volentieri.


ElettroshockNow il 25/12/2015, 17:02
Re: Dummy Load con Arduino
Idea ....

Allegati:
Screenshot_2015-12-25-16-56-34.jpg

ElettroshockNow il 25/12/2015, 23:23
Re: Dummy Load con Arduino
Potrebbe andare ?
In pratica un Arduino gestisce attraverso due pwm il percorso della corrente ...
Se proveniente dall'alimentatore servirà per caricare una eventuale batteria o supervisionare la corrente di uscita.
In quest'ultimo caso sarà possibile selezionare se al superamento della soglia interrompere l'erogazione o limitarne la corrente.
Altrimenti possiamo prelevare la corrente dalla batteria e dirigerla ad un carico esterno gestendo il valore desiderato (funzione dummy load).
Se invece volessimo mettere sotto test l'alimentatore basterà sempre in funzione dummy load effettuare un ponticello (sarebbe anche possibile collegarlo al posto della batteria 😉)
Buon EA
ElettroshockNow

Allegati:
Dummy_load_Arduino.jpg

Sabin il 26/12/2015, 9:51
Re: Dummy Load con Arduino
Secondo me è le basi sono perfette.

Le posizioni si sceglieranno con i pulsanti? O con un selettore?

Il rilevamento della tensione (senza carico) lo potrebbe fare in automatico, dal dispaly si potrebbe avere una procedura guidata (collegamento senza carico, fatto il rilevamento, una schermata che da l'ok per mettere il carico, oppure per modificare la soglia di distacco)?

UFOSTUFO il 27/12/2015, 17:27
Re: Dummy Load con Arduino
Beh che dire.. si era partiti da un semplice dummy load ma quando ci sono teste pensanti si arriva a progettare molto di più.
Mi piace molto.

Che dire, io inizierei a lavorare sullo schema elettrico. mettiamoci all'opera!



ElettroshockNow il 28/12/2015, 0:06
Re: Dummy Load con Arduino
UFOSTUFO :
Che dire, io inizierei a lavorare sullo schema elettrico. mettiamoci all'opera!


Ma certo .... proviamo a buttar giù qualcosa di buono.

Innanzitutto ... Che processore ?
Da quello che ho capito la base è arduino ,quindi ricadono sul mini ..nano .. o il classico UNO .
Io punterei per UNO con lo shield display e pulsanti incorporati.

I pulsanti da sfuttare per impostazioni di base e modalità ,ma (forse sarò vintage) mi piacerebbe avere due o tre potenziometri per variare le soglie.

Ad esempio :
-un potenziometro sceglie la tensione minima (utile nella scarica o nel calcolo capacità )
-un potenziometro sceglie la tensione massima (che nel caso di carica batteria sarà la soglia),
-un potenziometro la corrente massima (soglia limitatrice o fuse ... )
....
In tutto con un pulsante "Hold" che mantiene le impostazioni anche variando i potenziometri...

Che dite ....?

Per lo schema invece punterei sul classico .... Un driver per due mosfet ...,Acs758 per misurare la corrente e partitore per la tensione .

Sabin il 28/12/2015, 9:57
Re: Dummy Load con Arduino
Io con il "mini" non farò più nuove realizzazioni, ne ho qualcuno per scorta. L'adattatore usb/seriale, esterno, spesso mi ha dato problemi.
Preferisco dal "nano" in poi. Il cavetto usb collegato direttamente su arduino garantisce un segnale più pulito.
Potenziometri? Mah, offende un po l'intelligenza di Arduino.
Il display, un quattro righe? Sarebbe utile per visualizzare dei promemoria.
Per le batterie sarebbe utile uno stress test? Pochi secondi di carico, che abbassi la tensione di un volt, per vedere in che condizioni è la batteria, (quanti watt può produrre).

ElettroshockNow il 28/12/2015, 11:27
Re: Dummy Load con Arduino
Sabin :
Io con il "mini" non farò più nuove realizzazioni, ne ho qualcuno per scorta. L'adattatore usb/seriale, esterno, spesso mi ha dato problemi.
Preferisco dal "nano" in poi. Il cavetto usb collegato direttamente su arduino garantisce un segnale più pulito.


Ok ... condivido il tuo stesso pensiero

Sabin :

Potenziometri? Mah, offende un po l'intelligenza di Arduino.



A me piacciono tanto  ... più che altro sono comodissimi in laboratorio modificando i parametri senza entrare nei menù.
Che ne dici di :
-due pulsanti variano la soglia tensione minima
-due la soglia di tensione massima
-due la corrente di soglia

il tutto visualizzato sul display 4 righe .

E' ovvio che alcune funzioni non richiedono di modificare le soglie, tipo il controllo da te suggerito.
Sarebbe interessante fare uno studio sulla resistenza interna degli accumulatori .... (sono completamente ignorante )



Sabin il 28/12/2015, 15:27
Re: Dummy Load con Arduino
Penso che anche con i pulsanti si può prevedere di modificare i parametri mentre esegue una funzione. Sicuramente fattibile per la corrente di soglia, e se c'è un'altra coppia di pulsanti, anche la tensione minima.

Presumo che i PWM di solito siano normalmente aperti.

ElettroshockNow il 28/12/2015, 15:52
Re: Dummy Load con Arduino
Sabin :

Presumo che i PWM di solito siano normalmente aperti.


Sisi ,io punterei su due IRF4310 pilotati da un classico IR2110 ...semplice e funzionale.
Dovrebbero in linea teorica dissipare circa 2W in condizione normale e 6W in massima limitazione  ;)
Il sensore corrente ACS758 oppure anche il più economico ACS712 (30A).
Dovrei avere tutto per i primi test ... tranne il display 4x20 ....

Ma penso di acquistare questo con l'interfaccia I2C integrata ...
E' bello ...

http://www.ebay.it/itm/Yellow-Serial-IIC-I2C-2004-20x4-Character-DC-5v-LCD-LCM-Module-Display-Arduino-/361449740356?hash=item5428155844:g:KAIAAOSwcBhWXRqL

Allegati:
4x20.JPG

UFOSTUFO il 29/12/2015, 1:16
Re: Dummy Load con Arduino
Una cosa un po' più evoluta di questa (sicuramente più potente)
http://blog.iteadstudio.com/test-your-power-adaptor-by-dummy-load/

ElettroshockNow il 29/12/2015, 6:03
Re: Dummy Load con Arduino
UFOSTUFO :
Una cosa un po' più evoluta di questa (sicuramente più potente)


È si ... deve simulare ben 2.5W di carico 😂

Sabin il 29/12/2015, 21:25
Re: Dummy Load con Arduino
ElettroshockNow :

....
Dovrei avere tutto per i primi test ... tranne il display 4x20 ....

Ma penso di acquistare questo con l'interfaccia I2C integrata ...
E' bello ...

http://www.ebay.it/itm/Yellow-Serial-IIC-I2C-2004-20x4-Character-DC-5v-LCD-LCM-Module-Display-Arduino-/361449740356?hash=item5428155844:g:KAIAAOSwcBhWXRqL



L'interfaccia I2C l'ho usato nell'ultima realizzazione (yogurtiera).
Mi sembra che aggiorni il display una volta al secondo, ma non dovrebbe essere un problema.

ElettroshockNow il 29/12/2015, 22:12
Re: Dummy Load con Arduino
1 volta al secondo ....  .
Sisi non sarà un problema ,ma speravo meglio....

Domani faccio due prove (oggi ... febbre per me ) e se la dissipazione dei finali (e credo di si) viene contenuto con un piccolo dissipatore propongo di fare uno shield con pinout Arduino ... così da connetterlo direttamente .
Sul pcb ... alloggeremo i due finali ... il driver ..il sensore ACS (io punto per il 712) un termistore e le connessioni  (display ,pulsantiera ,ventola ).

ElettroshockNow il 30/12/2015, 18:04
Re: Dummy Load con Arduino
....primi test ......
8...Amper e non sentirli ... vediamo a 20 come si comporterà.

Allegati:
20151230_174204.jpg

Sabin il 30/12/2015, 18:58
Re: Dummy Load con Arduino
Ottimo! Con i transistor ho pochissima esperienza.
Potrei iniziare a fare ipotesi sulla schermata LCD.
La funzione scarica batteria la vedrei così.

[V 12,5    lmt 11,5 _]
[A 5,5     lmt 5,5  <]
[W 69        Wh 180  ]
[Funzione SB    menu_]

Sul lato destro una freccia spostabile con 2 tasti su/giù,
nella posizione della freccia, con due tasti dx/sx la regolazione diretta del valore limite (lmt).
La riga in basso, per entrare nel menù.

UFOSTUFO il 31/12/2015, 1:16
Re: Dummy Load con Arduino
Oggi abbiamo iniziato a sviluppare i primi layout e fare i primi test su un carico di 8A. Come scritto dall'elettroshocknow non li ha sentiti affatto.
L'idea è proprio quella di realizzare una shield dedicata da incastonare all'arduino uno!
Per quanto riguarda il pannello, si prevedono 4 pulsantini gestione display, impostazioni e conferme.
Un pulsante per il reset e due potenziometri.
Presto le prime bozze

Notte

ElettroshockNow il 5/1/2016, 16:45
Re: Dummy Load con Arduino
Oggi ... Ho iniziato a vedere il cuore del circuito ...
Uno step down da 20A che ci consentirà la funzione limitatrice di corrente al nostro circuito ...
Alla fine si tratta solo di una bobina e un diodo in più.
In settimana dovrebbero arrivare i toroidi micrometals materiale 26 e i driver ir2110 .....
Per ora mi sono arrangiato con un ir2101 e un totem con due transistor ... Che in fin dei conti riesce a pilotare il Gate anche con spike da 8A ... ...ottenendo il massimo delle prestazioni dal finale ...
Ma questo sarà per un'altro progetto ....
Ciao
Elettro

Allegati:
Avalanche_mosfet.jpg

ElettroshockNow il 5/1/2016, 16:54
Re: Dummy Load con Arduino
Lo Step down ..in versuonerie "volante"  ;)

Allegati:
Step_down.jpg

UFOSTUFO il 5/1/2016, 19:58
Re: Dummy Load con Arduino
L'80% del layout esterno dovrebbe essere raffiguranto nel seguente esempio:

FRONT




BACK



ElettroshockNow il 5/1/2016, 21:32
Re: Dummy Load con Arduino
Uao .... molto professionale    ..
Ma cosa servono i led sotto le boccole?
Forse per indicare il verso della corrente ?

Appena termino le basi hardware le condivido insieme alla base del programma .
Poi bisognerà lavorare sui menù....
Io baso la struttura ....Poi la modifichiamo in corso d'opera .
Ciao grandi
Elettro

ElettroshockNow il 5/1/2016, 23:13
Re: Dummy Load con Arduino
Dopo l'aggiornamento .... Ha un'aspetto bellissimo.
I potenziometri ovviamente sono a discrezione di chi lo realizzerà.. potenziometri o variabili da menù  oppure entrambi ... ☺..
Mi vengono in mente tipo il menù per variare i campi dei potenziometri ...... ecc ecc

UFOSTUFO il 5/1/2016, 23:48
Re: Dummy Load con Arduino
A me viene in mente la visualizzazione dei picchi di carico.. della corrente media...ecc... tutte statistiche!

Comunque per quanto mi riguarda, sulla corrente, monterò un multigiro!

Sabin il 6/1/2016, 10:00
Re: Dummy Load con Arduino
[quote]I potenziometri ovviamente sono a discrezione di chi lo realizzerà.. potenziometri o variabili da menù  oppure entrambi

Penso che entrambe le versioni potrebbero interessare.
Di solito chi ha più attitudini verso la programmazione, ne ha meno verso l'hardware, e viceversa.

Ma per i carichi leggeri, sotto 1 ampere, lo stesso circuito può garantire precisione, nel tempo? Forse per mantenere integra la sensibilità si dovrebbe fare un ingresso dedicato?

Elettro.) Nel Reply #21 parli di Step down. Ci sarà la possibilità di abbassare la tensione?

ElettroshockNow il 6/1/2016, 10:33
Re: Dummy Load con Arduino
Sisi hai ragione.... La nostre abitudini scelgono lo layout del nostro ArduLab ..

Tornando alle caratteristiche :
La precisione è di 0.1A che ho ritenuto soddisfacente tenendo in considerazione che ArduLab sarà in  grado di gestire 20A .
Invece per il carico circa 250W .

Step down ? 
Sisi ...la tensione in ingresso potrà raggiungere 35V (và bene anche un trasformatore con ponte e condensatori)  e in uscita prelevare la tensione che vuoi mantenendo la stessa potenza ...
È uno schema che potrà tornarci molto utile in futuri progetti ... tipo un regolatore di carica MPPT  ;)

Ciao e buona epifania a tutti.
ElettroshockNow

Smilzo il 6/1/2016, 15:15
Re: Dummy Load con Arduino
ciao a tutti seguo anche questo progetto molto molto interessante che sicuramente potrà tornarmi utile..vi faccio i miei complimenti siete bravissimi e preparatissimi.
Per ora non posso che essere solo un'"ospite" e non far altro che leggervi e cercare di capire il piu possibile i passi della realizzazione ....ma spero piu in la di dare anch'io un minimo contributo utile a tutti..grazie a tutti per la condivisione..

ElettroshockNow il 7/1/2016, 15:10
Re: Dummy Load con Arduino
Ma quale ospite  ...
Qui stiamo per imparare attraverso la condivisione reciproca di esperienze , conoscenze ma sopratutto intuizioni 😉 ...

ElettroshockNow il 7/1/2016, 15:12
Re: Dummy Load con Arduino
Oggi ho aumentato la frequenza di switching a 32khz e i 512 passi di regolazione possono essere ritenuti ancora in tolleranza per la precisione da noi richiesta.


Allegati:
20160107_130748.jpg

ElettroshockNow il 7/1/2016, 15:20
Re: Dummy Load con Arduino
Con Vin proveniente da un banco batterie 24V ho alimentato alcune lampadine erogano 11A a continuativi a 10V ottenendo ripple di circa 1Vpp  ....Che andrà a ridursi con il giusto banco condensatori di uscita ...attualmente di soli 200uF 😂  quindi piccolissimo.
Il progetto verrà calcolato per avere un ripple dell'1% alla massima potenza (circa 2000uF) .
Il toroide scelto (non sono tanto bravo ) è un micrometals T184 materiale 26 ....

Allegati:
20160107_130740.jpg

ElettroshockNow il 8/1/2016, 15:18
Re: Dummy Load con Arduino
Si giocherella con il pcb ...
Come vi trovate con gli smd ? 

Allegati:
20160108_145229.jpg

ElettroshockNow il 8/1/2016, 18:47
Re: Dummy Load con Arduino
L'idea ....

Allegati:
received_448112495384200.jpeg

Sabin il 10/1/2016, 10:29
Re: Dummy Load con Arduino
ElettroshockNow :

Step down ? 
Sisi ...la tensione in ingresso potrà raggiungere 35V (và bene anche un trasformatore con ponte e condensatori)  e in uscita prelevare la tensione che vuoi mantenendo la stessa potenza ...
È uno schema che potrà tornarci molto utile in futuri progetti ... tipo un regolatore di carica MPPT  ;)

Ciao e buona epifania a tutti.
ElettroshockNow


Se il progetto può diventare un regolatore MPPT. Non sarebbe utile integrare lo switch ENEL/batterie?

Questo è il mio stress tester per batterie da 12v, in 5 litri.


Allegati:
160109_test-batterie.jpg

ElettroshockNow il 10/1/2016, 15:13
Re: Dummy Load con Arduino
Sabin :

Se il progetto può diventare un regolatore MPPT. Non sarebbe utile integrare lo switch ENEL/batterie?


...credo proprio che ne avrà bisogno.
Ma senza modifiche si può sfruttare l'uscita shunt ....Per un carico oppure un relè  ;)

ElettroshockNow il 10/1/2016, 15:15
Re: Dummy Load con Arduino
...Sabin :

Questo è il mio stress tester per batterie da 12v, in 5 litri.


Come si dice ... Una tanica di energia 


ElettroshockNow il 12/1/2016, 15:57
Re: Dummy Load con Arduino
Continuano i test prima del prototipo .
Oggi prova distruttiva ...ma senza distruzione !!!!
Incredibile prelevare oltre 30A con alette tiepide .
Un ringraziamento a UFOSTUFO per la robusta resistenza di carico ,senza di essa difficilmente avrai superato i 20A 😊

Allegati:
20160112_152746.jpg

UFOSTUFO il 12/1/2016, 18:54
Re: Dummy Load con Arduino
Quante cose da imparare, quante cose da sperimentare.
Se ne parlava proprio oggi.. Negli anni 90 arrivare a visualizzare 5 Ampere era un traguardo e quanto calore generato.
Oggi si sono raggiunti picchi mostruosi..
Comunque ArduLab procede alla grande.




ElettroshockNow il 15/1/2016, 20:22
Re: Dummy Load con Arduino
La pulsantiera che verrà installata sarà quella mostrata in figura.
Si tratta di una pulsantiera analogica ,eventualmente riproducibile con alcune resistenze.

Link
LINK

Allegati:
Pulsantiera_ArduLab.jpg

ElettroshockNow il 15/1/2016, 21:59
Re: Dummy Load con Arduino
Prima di buttare giù lo schema completo volevo mettere in evidenz alcune limitazione che andiamo a incontrare con l'uso di Arduino Uno vista la ridotta quantità di Pin.

Elenco una possibile configurazione :

[color=#0000ff]Ingressi Analogici:
[list bull-blueball]
[*]Tastiera
[*]V_out (Tensione uscita Load)
[*]I_out (Corrente dal supply al load)
[*]I_shunt (Corrente dal Load alla resistenza di shunt)

[*]Display (SDA) (Protocollo I2C)
[*]Display (SCL) (Protocollo I2C)
[/list]


[color=#00ff00]Ingressi Digitali:
[list bull-greenball]
[*]PWM buck (gestisce lo step down ..Pin9)
[*]PWM shunt (gestisce la corrente verso la resistenza di zavorra..Pin10)
[*]PWM Fan (gestisce un eventuale Fan)
[*]Led "Supply"
[*]Led "Load"
[*]Led "Shunt"
[*]Led "Fault"(si accende per intervento Fuse)
[*]Pulsante Reset
[*]DS18B20 Temperatura Aletta (Protocollo One Wire) + Temperatura shunt
[/list]


In pratica ho abbadonato l'uso dei classici NTC per la misurazione della temperatura passando a sensori One Wire ,recuperand due analogici.

Potremo recuperare un ingresso analogico usando una tastiera classica ...,ma cmq sia dobbiamo abbandonare i potenziometri per la regolazione .

Allegati:
ArduinoUno.jpg

ElettroshockNow il 15/1/2016, 22:09
Re: Dummy Load con Arduino
Visto che abbiamo 4 ingressi digitali liberi potremo sfruttare gli encoder rotativi ... che ne dite .

In sostanza perdiamo alla fine dei conti la Vin ... ma serve?

Ciao
Elettro

Allegati:
Encoder_rotativo.jpg

UFOSTUFO il 16/1/2016, 16:44
Re: Dummy Load con Arduino
Possiamo controllare la temperatura in modo classico, risparmiando ingressi (utili)

Con un circuitino semplice come questo, preleviamo i 15 volt dall'ingresso scheda (l'assorbimento viene gestito tutto dall'alimentatore esterno)

Come Transistor va benissimo un bdx53, la resistenza R3 almeno da 1watt


Allegati:
termoventola.jpg

ElettroshockNow il 16/1/2016, 17:13
Re: Dummy Load con Arduino
UFOSTUFO :
Possiamo controllare la temperatura in modo classico, risparmiando ingressi (utili)

Con un circuitino semplice come questo, preleviamo i 15 volt dall'ingresso scheda (l'assorbimento viene gestito tutto dall'alimentatore esterno)

Come Transistor va benissimo un bdx53, la resistenza R3 almeno da 1watt


,ottima idea ...
Recuperiamo sia il sensore One wire (ero un po' preoccupato per la lentezza della conversione ...anche di 750mS) e il Pin di uscita della ventola.
...
In conclusione ...
Analogici :
Tastiera
Display X2
V_load
I_load
I_shunt

Digitali :
Led x4
Pulsante Reset
Due encoder x4
Pwm_buck
Pwm_shunt

Ci restano solo due digitali liberi e lascerei il TX e RX  ..mantenendo funzionante il serialprint

Accendiamo?

La prossima settimana provo a finire il pcb




ElettroshockNow il 16/1/2016, 19:02
Re: Dummy Load con Arduino
Di seguito lo schema della sezione potenza di ArduLab  [smiley=2vrolijk_08.gif]

Allegati:
ArduLab_V1_2.jpg

Sabin il 17/1/2016, 15:22
Re: Dummy Load con Arduino
L'eventuale versione "regolatore mppt" sarà molto più complicato?
Questo in elaborazione, potrebbe fare da regolatore (fotovoltaico) PWM?

Si potrebbe realizzare una scatola di montaggio con i componenti necessari al realizzo?


ElettroshockNow il 17/1/2016, 15:34
Re: Dummy Load con Arduino
Sabin :
L'eventuale versione "regolatore mppt" sarà molto più complicato?
Questo in elaborazione, potrebbe fare da regolatore (fotovoltaico) PWM?

Si potrebbe realizzare una scatola di montaggio con i componenti necessari al realizzo?


Possiamo far tutto  ;).

Lo schema proposto è la sezione di potenza di ArduLab ,ma possiamo tranquillamente implementarla in un regolatore mppt (alcune modifiche).
Finito questo progetto possiamo addentrarci in un regolatore Homemade marchiato EA Lab .

Per lo sviluppo di PCB e o scatole di montaggio ,dipende molto dalle richieste.

Io proporrei di concludere questo progetto (una volta terminato il prototipo mancherà la programmazione  )
dopodiché apriamo una discussione e vediamo i partecipanti .



Austenite il 17/1/2016, 17:55
Re: Dummy Load con Arduino
Complimenti ragazzi  ottime iniziative

ElettroshockNow il 18/1/2016, 8:20
Re: Dummy Load con Arduino
Grazie ,è un piacere condividere progetti e renderli accessibili a tutti .
ArduLab sarà un dispositivo indispensabile per molte applicazioni.
Ad esempio nella realizzazione del piccolo inverter spesso ci si affida a classici fusibili durante i primi test.
ArduLab invece monitorizza costantemente la corrente di uscita e se oltrepassa un certa soglia interrompe o limita l'erogazione in pochi mS salvaguardando i delicati componenti.

Per non parlare della possibilità di ciclare una batteria al piombo e sapere lo stato della batteria misurandone la capacità  ;)

Ciao
ElettroshockNow

UFOSTUFO il 18/1/2016, 20:21
Re: Dummy Load con Arduino
La comodità di ArduLab sta proprio nel suo circuito versatile, potrà essere configurato per svariati utilizzi.
- Dummy Load
- Fuse
- Limiter
- Carica/Scarica batterie Piombo-Gel
- con l'aggiunta di uno o due componenti, anche come mppt.
- ecc.


Nota direzionale: proprio per renderlo versatile, si è optato per l'utilizzo dell'arduino Mega (molti ingressi, molte uscite, molte serial) al posto dell'uno. In futuro sarà completamente configurabile a nostro piacimento.
Domani verranno effettuate altre prove.

Stay Tuned...

UFOSTUFO il 18/1/2016, 20:38
Re: Dummy Load con Arduino
Aggiornamento Layout Box ArduLab

Allegati:
2lt02a.jpg

Sabin il 19/1/2016, 9:47
Re: Dummy Load con Arduino
Io aumenterei la distanza tra i connettori.
I negativi li metterei uno in basso a destra, quello a sinistra va bene.
I positivi sotto il display in direzione dei negativi.
Così non ci sarebbero problemi in caso si usano pinze coccodrillo.

Per calcolare la capacità delle batterie penso sia utile avere anche il dato Ampere ora.
E i minuti trascorsi, prima di raggiungere la soglia minima.
In teoria. Una batteria nuova, 50 Ah a c/10, dovrei avere 50/10 = 5.
Ovvero, posso prelevare 5A per 10 ore?

UFOSTUFO il 19/1/2016, 15:11
Re: Dummy Load con Arduino
Ciao Sabin, si chiaro questo è un disegno pseudo approssimativo, le distanze tra i connettori saranno da prendere in considerazione (viste le alte potenze in gioco).
Usando l'arduino mega, configurato a modo si potranno avere svariati tipi di misurazione

ElettroshockNow il 20/1/2016, 10:45
Re: Dummy Load con Arduino
Perfetto ... l'arduino mega ci consentirà di non avere limitazioni.

A proposito ...
Ieri sera (sempre di corsa ) ho introdotto nel codice il feedback PID .

Ora il sistema risulta estremamente veloce nelle correzioni e consente di avere una tensione in uscita stabilizzata.
Certo non sarà come un alimentatore ,ma poco ci manca  ;)

In settimana facciamo un a prova generale sempre con breadboard e condividiamo il codice base (da non modificare ) per iniziate a creare menù e funzioni ...

In questo sò che una persona è molto brava 

Ciao
Elettro

ElettroshockNow il 20/1/2016, 11:03
Re: Dummy Load con Arduino
In pratica si potrà gestire tutto l'ArduLab con solo tre variabili.
[list bull-greensq]
[*]V_max
[*]I_max
[*]I_dummy
[/list]

Esempio:
Funzione limiter
V_max=35 (massima o superiore alla tensione del supply )
I_max=10
I_dummy=0

Con questa configurazione Ardulab è trasparente alla tensione in ingresso (tensione uscita uguale a quella di ingresso) e limiterà a 10A la corrente massima.
Ovviamente la tensione di uscita calerà di conseguenza.

Funzione Supply dummy load
V_max =35
I_max=5
I_dummy=20

Ora verrà simulato un carico di 5A al power supply connesso e tutta la potenza verrà indirizzata alle resistenze di shunt

Funzione carica batterie
V_max =15
I_max=10
I_dummy=0

Verrà eseguita una carica a corrente costante di 10A fino al raggiungimento dei 15V
Nel programma bisognerà aggiungere un If quando sentirà che la corrente sia inferiore a una certa soglia (tipo 200mA ) che indicherà la fine della carica a singola fase (possiamo anche mettere tutte le fasi ....,ma è un'altro discorso )

Scarica Batterie ...
V_max=0
I_max=0
I_dummy=10

Verrà scaricata la batteria in pwm sulle resistenze di shunt con una corrente costante (impulsiva a 31Khz) sulle resistenze di zavorra.


Funzione alimentatore
V_max=12V
I_max=20A
I_dummy=0

Alimentatore stabilizzato a 12V che limiterà la corrente massima a 20A

Per la funzione fuse invece richiederà una comparazione diretta della corrente ...


Ciao
ElettroshockNow


UFOSTUFO il 21/1/2016, 20:19
Re: Dummy Load con Arduino
Ordine eseguito...
Arrivano i componenti, ora la faccenda si fa seria 



Intanto la vista dall'alto di ArduLab



Allegati:
Senza_titolo.png

ElettroshockNow il 22/1/2016, 11:10
Re: Dummy Load con Arduino
Arriva lo schema predefinitivo ....
Basta solo realizzarlo e provarlo  ....

Allegati:
ArduLab_V2_0.jpg

ArduLab_V2_0.pdf

danye il 24/1/2016, 9:21
Re: Dummy Load con Arduino
Grande Elettro! Perché usi un mosfet q5 al posto di un diodo?

ElettroshockNow il 24/1/2016, 16:04
Re: Dummy Load con Arduino
danye :
Grande Elettro! Perché usi un mosfet q5 al posto di un diodo?


....
Segreto ...
Scherzo ...

Mi sarei aspettato la domanda appena condiviso lo schema .... invece è passato inosservato fino ad ora ...

Nei normali buck converter si usa un diodo durante la fase nella quale viene scaricato (consentitemi il termine) dell'induttanza.
In tale fase tutta la corrente attraversa il diodo e di conseguenza dissipa .
Quanto ?
Ampere x Tensione Diodo ...
Quindi 20x0.7=14W

Ovviamente diviso due perché lavora per circa metà periodo del pwm ...7W .

7W non sano tanti ,ma esiste un modo per recuperarli.
Basta usare un mosfet e mandarlo in conduzione quando dovrebbe condurre il diodo.

A questo punto la dissipazione è legata alla Rds interna del mosfet e una parte di switching.

Gli IRFB4310 hanno una Rds di 5.6 mOhm ..ne consegue 20x20x0.0056= 2.2W/2 = 1.1W 

Che dire ...ben 6W di differenza .

Cmq nel progetto tale funzione non verrà implementata ,ma se dopo il test finale riscontrassimo la necessità potremo implementarla.

Un'altro motivo ...
Ho comprato uno stock da 10 pcs e visto che il diodo di ricircolo non è male ...lo sfrutto

Ciao
Elettro



danye il 24/1/2016, 19:41
Re: Dummy Load con Arduino
Per portare in conduzione il q5 bisogna pilotare il gate in controfase rispetto al gate del q3 e siamo d'accordo, ma occorre anche che il drain sia a potenziale positivo rispetto al source o sbaglio?
Se ho capito bene nel momento che q3 apre si crea una tensione ai capi della bobina con il + verso il C3 che invece polarizzerebbe al contrario il drain ed il source.
Mi sfugge qualcosa??

ElettroshockNow il 24/1/2016, 20:14
Re: Dummy Load con Arduino
Nono non ti sfugge niente .
Q3 viene pilotato dal pwm .
Quando è in conduzione la corrente scorre attraverso di lui e attraverso il toroide che immagazzina energia .
In questa fase il diodo di ricircolo su q5 è interdetto perché avrà il positivo sul suo catodo.
Quando invece andrà in interdizione q3 il toroide restituirà la sua energia immagazzinare e lo farà grazie al diodo di ricircolo che in questo caso si troverà polarizzato direttamente data dalla forze elettromotrice inversa che viene a generare ai suoi capi....
In pratica è come quando metti il diodo di ricircolo ai capi di un relè  ;) ...ma in questo caso viene recuperata l'energia.

Allegati:
Transistor_ON.png

Diodo_ON.jpg

danye il 24/1/2016, 21:43
Re: Dummy Load con Arduino
Si si, forse mi sono spiegato male, intendevo porre l'attenzione sul mosfet in sostituzione del diodo. Nella fase di scarica della bobina e q3 interdetto avremmo sul drain una tensione negativa rispetto al source, non occorre che il drain abbia potenziale positivo rispetto al sorce come q3 quando conduce? La domanda è: funzionerebbe lo stesso? In poche parole in un mosfet in conduzione è fondamentale che la corrente scorra dal drain al source o può scorrere anche dal souce al drain?





ElettroshockNow il 25/1/2016, 6:43
Re: Dummy Load con Arduino
Smontaggio prototipo su breadboard ....
Ma prima di farlo ho fatto un breve video  ;)



Un saluto
ElettroshockNow

ElettroshockNow il 25/1/2016, 9:55
Re: Dummy Load con Arduino
danye :
Si si, forse mi sono spiegato male, intendevo porre l'attenzione sul mosfet in sostituzione del diodo. Nella fase di scarica della bobina e q3 interdetto avremmo sul drain una tensione negativa rispetto al source, non occorre che il drain abbia potenziale positivo rispetto al sorce come q3 quando conduce? La domanda è: funzionerebbe lo stesso? In poche parole in un mosfet in conduzione è fondamentale che la corrente scorra dal drain al source o può scorrere anche dal souce al drain?



Per far condurre un mosfet la tensione di gate deve essere necessariamente più alta del source.
Ponendo un resistore tra i suddetti piedini il mosfet resterà sempre interdetto.
Diversamente il diodo in parallelo interno nel mosfet si comporterà come un semplice diodo (in realtà come zener) e condurrà quando sarà polarizzato direttamente.
Inversamente invece condurrà al superamento della tensione avalanche cimando eventuali spike (che ovviamente non devono esserci)

Ho capito la domanda ?
Elettro 

Bridge il 25/1/2016, 10:04
Re: Dummy Load con Arduino
Hai una mente ....effervescente, Elettro, complimenti davvero.-
Una domanda:
-Perchè hai sentito il bisogno di imporre una magnetizzazione residua all'induttore.-
Il valore della R21 a quanto ammonta?.-
Bridge

ElettroshockNow il 25/1/2016, 12:22
Re: Dummy Load con Arduino
Grazie Bridge ...alla fine ci assomigliamo tutti 
Stesso ordine nel laboratorio e sempre alla ricerca di sfide elettroniche 

Inizialmente avevo problemi con il feedback .
Con un toroide più piccolo il problema si riduceva ,ma non si annullava.

Facendo un controllo solo proporzionale anzi un semplice if (se tensione più bassa aumenta il duty ...se più alta riduci ) funzionava alla perfezione ,ma era molto lento ad inseguire il target
A quel punto ho introdotto il calcolo PD che tiene in considerazione il duty precedente e quindi capire la pendenza della variazione del target o meglio l'errore.

Lì ha rischiato di essere scaraventato sul muro ... Non ne voleva sapere  ....

Il caso a voluto che durante le prove ho attaccato un a lampadina da 5W 12V (io adoro le lampadine ....)

Con la lampadina tutto perfetto 

Quindi ho seguito quella strada e ho concluso che il circuito (calcola che è in test non con i componenti scelti a tavolino ...ma di recupero ) necessitava di circa 150mA di assorbimento costante.

La configurazione più semplice scelta è stata un 317 con una resistenza da 4.7 Ohm ...circa 200mA .

Il motivo ?

Andrebbe approfondito ....
Potrebbe essere la velocità relativamente bassa del feedback o il toroide che non venendo mai scaricato obbliga il feedback a grosse variazioni di duty cycle.

Con il definitivo mi addentrero più nel dettaglio (è un buon motivo di studio) ,ma credo che sia necessario un carico costante in uscita .

Scuriosando vari schemi ho riscontrato sempre una resistenza di carico ,ma in quel caso se la cavano perché la tensione è costante ....

Se avessi scelto la stessa soluzione avrei avuto un termosifone ad alte tensioni (alte intendo i 30V) oppure un carico non sufficiente alle basse .

Bridge il 25/1/2016, 14:17
Re: Dummy Load con Arduino
ElettroshockNow :
Stesso ordine nel laboratorio


Si, sempre "ordine" ....sempre sparso!!!.-

ElettroshockNow :
Inizialmente avevo problemi con ............


Interessante spiegazione che acquisce im me la consapevolezza della mia totale ignoranza sulla programmazione.-

Quando ho visto il tuo schema  qui sopra, mi è balzato subito agli occhi quell'LM317 in configurazione corrente costante ed ho subito immaginato il motivo della sua presenza.-
In questo modo improprio vai a tenere la "briglia" un pò corta all'induttore e non solo, riducendo un pò il "pompaggio" scaturito dalla presenza dei condensatori a valle della stessa.-
Penso sia così.-
Per curiosità, hai provato ad eliminare la L??.-
Prova e valuta il risultato.-


Sono in procinto di rispondere a Misaett in: Homemade inverter, dove tra l'altro pongo un'interrogativo aperto ovviamente a tutti, e questo spero per te sia uno sprone a provare quel tipo di configurazione, ....magari su di una BreadBoard.-

ElettroshockNow il 25/1/2016, 14:39
Re: Dummy Load con Arduino
Senza la L era la prima versione dell'arduinverter.
Abbandonata perché con carichi capacitivi sorgeva il problema di reattanze troppo basse e quindi correnti elevatissime limitate solo dalla sorgente.
Se fosse stato solo regolatore di carica avrei proseguito su quella strada (la limitazione sarebbe stata dalla I max dei pannelli) ,ma qui è molto probabile che vengano usate batterie come sorgente ... e immagina che botto .
Cmq una prova la faccio per vedere se è veramente colpa dell'induttore.
Per farlo dovrò necessariamente mettere un LPF un sensore tensione altrimenti sente il pwm.

Nuova configurazione ? 

Sempre pronto per nuove teorie ....


Bridge il 26/1/2016, 22:06
Re: Dummy Load con Arduino
ElettroshockNow :
...e quindi correnti elevatissime limitate solo dalla sorgente.


Mi sono trovato nella tua stessa situazione tempo fa.- Mi ci è voluto tempo e ......MOS per capire dove stava l'inghippo.-
Io credo che quell'anomalia, possa avere diverse cause tra cui la più plausibile e deleteria sia la presenza dei condensatori di input, e a seguire MOS, L, condensatori di OUT, in questo ordine.-
Se togli la L e la C di OUT, non il diodo di ricircolo, penso che il problema si risolva e la corrente potrà essere libera di fluire in funzione della tipologia di carico con andamento condizionato dal ritmo imposto dall'interruttore.- L'ampiezza del Ripple in OUT è direttamente proporzionale alla differenza tra la Vin e la Vout desiderata.- Filtraggio insufficiente!.-

"""""""""""""""""
Con l'induttore e C di out presenti, nel momento di apertura dell'interruttore si realizzano due situazioni che in un certo senso "contrastano" tra di loro e cioè:
-Il condensatore di input (di capacità molto grande, quello a Sx) si ricarica alla tensione massima offerta dal generatore, al contrario di quello che avviene a valle dell'induttore (sempre di elevata capacità), che dovrebbe ricevere "ossigeno" dalla L tramite il diodo di ricircolo, .........dovrebbe, ma la presenza del carico sostanzialmente nega ciò e contribuisce a scaricarlo ulteriormente di un valore tanto più elevato, tanto più è grande il Toff, carico compreso.-

"""""""""""""""""
-Sin qui tutto nella norma, tutto previsto, ....ma cosa accade nel momento del Ton??.- Il povero MOS si trova un magazzeno di energia sul suo Drain ed una sorta di cortocircuito istantaneo sul suo Source per via della presenza del carico con in più il condensatore "affamato" in parallelo e qui sorgono i guai ad un ritmo dettato dal PWM.- La corrente in questo caso raggiunge valori importanti, come già hai constatato anche tu.-

Potrebbe, ma non è detto, esserci anche un'altra situazione critica e questa volta in assenza o poco carico.- Se il MOS ha il diodo entrocontenuto si potrebbe instaurare anche un rimpallamento  energetico tra le due capacità proprio per la presenza dell'induttore.- Andata attravero il MOS e ritorno tramide il diodo antiparallelo entrocontenuto nel MOS stesso.-
Mi ha fatto buttare la bava dalla bocca.-
Spero di non aver detto un mare di frescacce.-

Questo è il mio pensiero che deve essere preso sempre con le "pinze".-






ElettroshockNow il 28/1/2016, 16:01
Re: Dummy Load con Arduino
Possibile sistemazione componenti 

Allegati:
Ardulab_Comp.jpg

ElettroshockNow il 28/1/2016, 19:45
Re: Dummy Load con Arduino
Preparazione PCB ...

Allegati:
ArduLab_PCB-Comp.jpg

Sabin il 29/1/2016, 9:01
Re: Dummy Load con Arduino
ElettroshockNow :
In pratica si potrà gestire tutto l'ArduLab con solo tre variabili.
[list bull-greensq]
[*]V_max
[*]I_max
[*]I_dummy
[/list]

Esempio:
Funzione limiter
V_max=35 (massima o superiore alla tensione del supply )
I_max=10
I_dummy=0

Con questa configurazione Ardulab è trasparente alla tensione in ingresso (tensione uscita uguale a quella di ingresso) e limiterà a 10A la corrente massima.
Ovviamente la tensione di uscita calerà di conseguenza.

Funzione Supply dummy load
V_max =35
I_max=5
I_dummy=20

Ora verrà simulato un carico di 5A al power supply connesso e tutta la potenza verrà indirizzata alle resistenze di shunt

Funzione carica batterie
V_max =15
I_max=10
I_dummy=0

Verrà eseguita una carica a corrente costante di 10A fino al raggiungimento dei 15V
Nel programma bisognerà aggiungere un If quando sentirà che la corrente sia inferiore a una certa soglia (tipo 200mA ) che indicherà la fine della carica a singola fase (possiamo anche mettere tutte le fasi ....,ma è un'altro discorso )

Scarica Batterie ...
V_max=0
I_max=0
I_dummy=10

Verrà scaricata la batteria in pwm sulle resistenze di shunt con una corrente costante (impulsiva a 31Khz) sulle resistenze di zavorra.


Funzione alimentatore
V_max=12V
I_max=20A
I_dummy=0

Alimentatore stabilizzato a 12V che limiterà la corrente massima a 20A

Per la funzione fuse invece richiederà una comparazione diretta della corrente ...


Ciao
ElettroshockNow


Con la funzione Carica batterie si possono gestire vari tipi di batterie, anche se si ha un carica batterie da 30A.
Per caricare una piccola batteria da 7A basta impostare 1A o meno, e la batteria non sarà stressata.

ElettroshockNow il 29/1/2016, 9:23
Re: Dummy Load con Arduino
Certo ,hai il pieno controllo di ArduLab.
Nasce come carica batterie a corrente costante e soglia massima ,ma tranquillamente si può trasfornare in un 4 fasi ..5 ...ecc ecc.

Tu sei bravo nel creare menù?

ElettroshockNow il 29/1/2016, 9:24
Re: Dummy Load con Arduino
Controllo dimensioni componenti ...Sembra tutto entrare ...al limite dello spazio 

Allegati:
20160129_091849.jpg

ElettroshockNow il 29/1/2016, 11:10
Re: Dummy Load con Arduino
Serigrafia  ;) ....

Allegati:
Ardulab_Comp_001.jpg

Sabin il 29/1/2016, 12:23
Re: Dummy Load con Arduino
Nella programmazione non sono andato verso livelli avanzati.
Di solito quando raggiungo l'obiettivo mi fermo, e trascuro l'estetica.
Se per i settaggi c'è un codice di base, posso vedere se sono in grado di migliorarlo.

ElettroshockNow il 29/1/2016, 12:29
Re: Dummy Load con Arduino
La parte che gestisce il pwm la metterò all'interno di una subroutine chiamata Ardulab ().
Essa gestisce il pwm con un algoritmo proporzionale derivato e i coefficienti verranno calcolati in laboratorio.
In pratica non consiglio la modifica della subroutine.

Quello che manca è tutto il resto 😆...

Menù...sottomenu...funzioni ....ecc ecc

Cmq farò una bozza dove poter mettere mano

UFOSTUFO il 29/1/2016, 20:22
Re: Dummy Load con Arduino
Una volta realizzato il pcb, stampato, montato i componenti, si faranno prove di laboratorio per vedere se il passaggio da breadboard a scheda sia stato perfetto (anzi mi auguro vivamente che sia per componenti aggiunti, sia per piste vere, tutto funzioni ancora meglio)
.Una volta verificato che tutto è a regime, si inizierà a buttare giù lo schema del menù con i vari settaggi.
Chiaramente modificabile per semplificarlo.

Coming Soon.

kekko.alchemi il 30/1/2016, 11:31
Re: Dummy Load con Arduino
ElettroshockNow :
Smontaggio prototipo su breadboard ....
Ma prima di farlo ho fatto un breve video  ;)



Un saluto
ElettroshockNow



Che dire, sei un grande come sempre Elettro!!! Sbalorditivo!! 

Sabin il 30/1/2016, 15:12
Re: Dummy Load con Arduino
Ipotesi codice.
Ogni singola riga della schermata potrebbe essere una subroutine?
La variabili?
Variabili base: V_max, I_max, I_dummy.
Variabile funzione: (limiter, Supply dummy load, carica batterie, scarica batterie, alimentatore.
Variabile (posizione cursore settaggi, ultima colonna a destra)
Qualche riga iniziale per il codice (allegato)
Al momento ho un tastierino a tre pulsanti. Quale metodo usate per i pulsanti?


Allegati:
160130_codice.txt

UFOSTUFO il 30/1/2016, 16:42
Re: Dummy Load con Arduino
Ciao Sabin, sto buttando giù uno schema a blocchi per definire i passaggi e le impostazioni.
Comunque utilizziamo un tastierino a 5 pulsanti (4 direzionali e/o crescenti o decrescenti e un pulsante per il set)
La regolazione per esempio della tensione o corrente, può essere gestita tramite potenziometri (encoder) o i due pulsanti.

ElettroshockNow il 9/2/2016, 19:07
Re: Dummy Load con Arduino
Inizia la stampa del prototipo ...
Il piccolo bromografo fà egregiamente il suo lavoro

Allegati:
20160209_183131.jpg

20160209_184335.jpg

ElettroshockNow il 9/2/2016, 20:30
Re: Dummy Load con Arduino
....Domani si stagna e provo a mettere il solder mask...successivamente foratura cnc e per finire la serigrafia ...


Allegati:
20160209_202553.jpg

ElettroshockNow il 11/2/2016, 17:45
Re: Dummy Load con Arduino
Primo prototipo sotto test ...
Mancano ancora diversi componenti ,ma il grande è fatto

Allegati:
20160211_173700.jpg

20160211_173107.jpg

20160211_140420.jpg

20160211_125244.jpg

20160211_113253.jpg

UFOSTUFO il 11/2/2016, 18:24
Re: Dummy Load con Arduino
Oggi Giornata molto intensa di lavoro, abbiamo preparato il secondo pcb (bromografo di Electro che si comporta alla meraviglia) poi abbiamo iniziato ad inserire e saldare i componenti. Il toroide insieme ai condensatori fanno paura!
Primi test con programmazione basilare, soddisfacenti.
Sarà spremuto a dovere.

ElettroshockNow il 11/2/2016, 19:20
Re: Dummy Load con Arduino
La prossima settimana lo spremiagrumi a dovere ....
Ma già ai primi test ..sembra che la ventilazione sia un optional  ...

Diversamente dalle resistenze di carico ... piccoli caloriferi  .

Cmq gran bella giornata con fuochi d'artificio a fine lavori ... ...
Che spettacolo

Sabin il 12/2/2016, 9:57
Re: Dummy Load con Arduino
Il poliziotto della corrente comincia a prendere forma. 

masmox il 12/2/2016, 17:10
Re: Dummy Load con Arduino
ElettroshockNow :
Arriva lo schema predefinitivo ....
Basta solo realizzarlo e provarlo  ....



Ciao, sono nuovo del forum. Guardavo lo schema ma non mi è chiaro l'utilizzo di V_SET ed I_SET, utilizzati come ingresso ad Arduino. Poi, i segnali PWM_buck e PWM_shunt non li vedo collegati ad micro ma solo PWM_HI e PWM_LI, forse qualcosa mi sfugge?
grazie

ElettroshockNow il 12/2/2016, 17:44
Re: Dummy Load con Arduino
Ciao masmox e benvenuto.
Effettivamente non ho messo bene le diciture per i collegamenti tra driver e finali.
Se noti ci son dei pad  contrassegnati con la X .

L'uscita HO del driver ir2110 và sul pin HO (coperto dalla scritta ..domani rimedio) che non sarebbe altro che Pwm_buck.
Il VS và invece sul source dello stesso mosfet.
LO si collega con Pwm_shunt.

Per il Vset e Iset sono ingressi analogici per variare le soglie interne di arduino.
Vengono usati per eseguire dei test ,ma successivamente sostituiti con encoder.

Ciao
Elettro

ElettroshockNow il 12/2/2016, 17:46
Re: Dummy Load con Arduino
I PWM_HI e LI sono collegati ai pin 6 e 7 di arduino

UFOSTUFO il 17/2/2016, 17:17
Re: Dummy Load con Arduino
Aggiornamento del 17 Febbraio 2016

- Test su ArduLab, parecchia corrente in gioco (più di 20A), risultato, aletta appena tiepida. Tanto che sul secondo prototipo monteremo la metà di quella presente.  ;)

- Inserimento Pulsantiera e inizio programmazione.
(se qualcuno fosse bravo con la programmazione si facesse avanti).

 



Allegati:
IMG_1242.jpg

IMG_1241.jpg

IMG_1245.jpg

IMG_1246.jpg

IMG_1248.jpg

Sabin il 20/2/2016, 13:03
Re: Dummy Load con Arduino
Forse è un po difficile avviare l'elaborazione condivisa del codice.
Ricordo con lo switch enel/batterie che si è partiti con la realizzazione della componentistica, e poi seguirono i miglioramenti. codice, LCD, e altro.

Bridge il 8/3/2016, 22:46
Re: Dummy Load con Arduino
Oggi "ravanando" tra le mie scartoffie ho ritrovato una simulazione, fatta qualche anno orsono, di un carico elettronico non Lineare, bensì a commutazione.-
Questa simulazione è seguita alla realizzazione di un Electronic Load Lineare a 5 canali.-
Me ne ero quasi dimenticato.-
Il tutto a componenti discreti, compreso il moltiplicatore analogico per il calcolo della potenza V*I.-

Certo che tramite software tutto è enormemente più semplice, ma purtroppo sono ...un'asino in merito, ...sono nato troppo presto.-
Lo inserisco per far notare la "ricchezza" circuitale con tutte le difficoltà annesse, rispetto a quanto realizzato in questo topic tramite Arduino.-

L'ausilio che il software può dare è letteralmente disarmante per chi non lo "mastica", ....come me ...purtroppo!.-
Bridge

Allegati:
Pulse9-20_4_2msProvaRange3CMOS.jpg

Bridge il 9/3/2016, 11:09
Re: Dummy Load con Arduino
"Ravanando" ancora per cercare un'appunto che risulta ancora introvabile, è uscita fuori una nota "frettolosa" sul Pulse EL qui sopra illustrato.-
Lo inserisco qui sotto sperando di fare cosa gradita e che possa introdurre ad un ragionamento logico sul suo funzionamento.-

Allegati:
PulseElectronicLoad.jpg

UFOSTUFO il 9/3/2016, 18:36
Re: Dummy Load con Arduino
Ciao Bridge, invece è apprezzatissimo il tuo schema, davvero professionale. Chiaramente, oggi con l'ausilio dei programmatori, e le alte frequenze in aiuto si può realizzare quasi qualsiasi cosa.. ma osservare "uno schema vecchia maniera" è davvero una gran cosa.
Il progetto ArduLab è quasi terminato. Stiamo lavorando sul menù che richiede giustamente tempi importanti.
Spero lo realizzerai per avere un grande aiuto in laboratorio.

Stay Tuned

Bridge il 10/3/2016, 8:30
Re: Dummy Load con Arduino
UFOSTUFO :
Spero lo realizzerai per avere un grande aiuto in laboratorio.


OK, per lo sprone alla realizzazione.-
Sono daccordo riguardo alla comodità di avere a disposizione un carico elettronico.-
Esistono due tipologie: Lineare ed a commutazione.-
Il primo si presta benissimo nei laboratori di ricerca ed altro, mentre il secondo (più ruvido) per le applicazioni più svariate e "pesanti".-
Ne ho realizzati diversi di tutte e due le tipologie in tempi più o meno remoti, tra cui uno a cinque canali dedicato allo studio di moduli FV a concentrazione, di cui posto un paio di foto.-

Grazie per la comprensione.-


Allegati:
CarEl1.jpg

CarEl5.jpg

danye il 10/3/2016, 9:08
Re: Dummy Load con Arduino
Bridge, ammirando il tuo lavoro  colgo l'occasione di salutarti e di ringraziarti per il grande contributo che offri al forum!!
Daniele.

Bridge il 10/3/2016, 10:24
Re: Dummy Load con Arduino
danye :
...contributo che offri al forum


E' uno slancio spontaneo e "sentito" per attrarre e ....RRRiportare i più volenterosi verso l'elettronica, come un tempo oramai lontano.-
C'è ancora spazio per divertirsi con poco ed in modo "salubre" al contrario di tanti altri modi sovente devastanti, ...basterebbe un pò di buona volontà.-
Grazie comunque e piacere di leggerti.-
Bridge


ElettroshockNow il 1/4/2016, 14:30
Re: Dummy Load con Arduino
Nasce il secondo ArduLab .... e siamo quasi pronti per la parte più gustosa ...
Ora bisogna regalargli un bell'abito e via con la programmazione fine  ;)

Allegati:
20160401_092356.jpg

20160401_092407.jpg

20160401_121647.jpg

20160401_132235.jpg

danye il 1/4/2016, 19:32
Re: Dummy Load con Arduino
Bellissimo! Bravissimi!!!!

guppio75 il 2/4/2016, 9:58
Re: Dummy Load con Arduino
Caspita! Che meraviglia.
Mi accorgo solo ora di questo meraviglioso progetto.
Complimenti!


UFOSTUFO il 4/5/2016, 22:55
Re: Dummy Load con Arduino
Ardulab è quasi arrivato alla fine..
Oggi è stato creato il prototipo.. al quale manca verniciatura, mascherina frontale con serigrafia, ma ci siamo..
stiamo implementando anche un buzzer per tutte le funzioni necessarie (fault, batteria carica, batteria scarica, corrente al limite...ecc)

Allegati:
IMG_3303_Fotor.jpg

danye il 5/5/2016, 0:34
Re: Dummy Load con Arduino
Bravissimi! Un lavoro perfetto!

ElettroshockNow il 5/5/2016, 7:09
Re: Dummy Load con Arduino
[smiley=2vrolijk_08.gif] come si fà a non averlo nel proprio laboratorio ....é così bello ....
Ottimo lavoro Ufostufo 

UFOSTUFO il 18/6/2016, 12:41
Re: Dummy Load con Arduino
Signori, ci siamo, l'attesa per ArduLab è finita.
A giorni sarà applicato il layout grafico esterno e il nostro strumento da laboratorio sarà pronto.
Abbiamo dovuto sacrificare qualche opzione dello stesso (guardasi sezione alimentazione), il resto funziona tutto molto egregiamente.
Sarà presentato tutto il progetto tramite filmato.
Gli schemi e il firmware saranno pubblicati al più presto.
Ringraziando sempre immensamente Elettroshocknow per l'ottimo lavoro svolto.

  Stay Tuned...

ElettroshockNow il 18/6/2016, 16:25
Re: Dummy Load con Arduino
Buonasera a tutti e grazie UFOSTUFO per la collaborazione nel progetto..
Oltre alla infinita pazienza dimostrata ;)

Di seguito è allegato il CODICE ARDULAB VER 1.0 e le librerie
I problemi riscontrati non sono stati pochi ,alcuni risolvibili ,altri no.

Il progetto nasce come Dummy Load ,ma visto l'ottimo comportamento nei test preliminari abbiamo osato spingerci oltre introducendo altre funzioni utili in un piccolo laboratorio,ma ne potremo aggiungere anche altre.


A voi il codice scritto di facile comprensione e con possibilità di personalizzazioni


//
//LISTATO ARDULAB MEGA VER 1.0
//
//Prodotto da ElettroshockNow & UFOSTUFO (ElettroshockNow@gmail.com)
//Condiviso su http://WWW.EnergiAlternativa.org
//
//Eventuali condivisioni su alri canali/Forum devono specificare
//il forum di origine http://WWW.ENERGIALTERNATIVA.ORG e la licenza
//di seguito specificata
//
//ATTENZIONE:
//
//CC BY-NC-SA 4.0
//Uso non commerciale, modificabile, con obbligo di condivisione-
//http://creativecommons.org/licenses/by-nc-sa/4.0/deed.it
//


//Librerie
#include <Wire.h>
#include <PCF8574_HD44780_I2C.h>
#include <Thermistor.h>
#include <EEPROMex.h>
#include <EEPROMvar.h>

//Configurazione Pin Arduino Mega2560
//USCITA PWM PWM_shunt PIN10
//USCITA PWM PWM_buck PIN9
//Ingressi Analogici
#define V_in_Pin 2               
#define V_out_Pin 3
#define I_out_Pin 4          
#define I_shunt_Pin 5
#define V_set_Pin 8
#define I_set_Pin 9
#define Key_Pin 10
//Ingressi/Uscite Digitali
#define Led_supply_Pin 2
#define Led_load_Pin 3
#define Led_shunt_Pin 4
#define Stab_Pin 8
#define Reset 9
#define Led_fault_Pin 10
#define Buzzer_Pin 18

//Definizione Costanti
#define menu 5
#define Num_Letture 20
#define Fattore_Corrente_Buck 0.075
#define Fattore_Corrente_Shunt 0.071 //0.0775
#define Fattore_Voltage 0.055
#define Kp_V 5//Gain Feedback Proporzionale //10
#define Ki_V 0 //Gain Feedback Integrale //0
#define Kd_V 0 //Gain Feedback Derivata //2
#define Kp_I 2//Gain Feedback Proporzionale
#define Ki_I 0//Gain Feedback Integrale
#define Kd_I 4//Gain Feedback Derivata


// Indirizzo LCD I2C 0x27, 20*4
PCF8574_HD44780_I2C lcd(0x27, 20, 4);
Thermistor temp(6);
//Variabili
int Temperatura,Offset_I_out,Offset_I_shunt;
unsigned long refresh,check,Start_charge,Time_charge,Last_millis;
float PWM_shunt,PWM_buck,I_out,I_shunt,V_out,V_in,I_max,V_max,Energia;
float errore_V,ePrec_V,eIntegr_V,errore_I,ePrec_I,eIntegr_I;
byte limita,Key,Set,memorizzare,ON;

//SETTAGGIO valori di DEFAULT (1°PowerUp)
int Screen = 20;//pagina di default "UMMY LOAD"
byte Fuse = 25;
byte Vpot_min = 5;
byte Vpot_max = 30;
byte Ipot_min = 0;
byte Ipot_max = 20;
byte Ipot_min_Dum = 0;
byte Ipot_max_Dum = 20;
byte Ipot_min_Lim = 0;
byte Ipot_max_Lim = 10;
byte Stato_Buzzer = 1;
float VBat_charge = 14.7;
float IBat_charge = 5;
float VBat_discharge = 10.5;
float IBat_discharge = 5;
float VRef = 0.0;
byte clearlcd = 0;
byte sottomenu = 0;
byte Fault = 0;
byte Protezione = 0;
byte Allert = 0;
byte charge = 0 ;



void setup() {
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(Led_supply_Pin, OUTPUT);
  pinMode(Led_load_Pin, OUTPUT);
  pinMode(Led_shunt_Pin, OUTPUT);
  pinMode(Led_fault_Pin, OUTPUT);
  pinMode(Buzzer_Pin, OUTPUT);
  pinMode(Stab_Pin, OUTPUT);
  pinMode(Reset, INPUT);

  digitalWrite(6, LOW);
  digitalWrite(Led_supply_Pin, LOW);
  digitalWrite(Led_load_Pin, LOW);
  digitalWrite(Led_shunt_Pin, LOW);
  digitalWrite(Led_fault_Pin, LOW);
  digitalWrite(Stab_Pin, LOW);
  digitalWrite(Reset, HIGH);


  // Doppia uscita PWM (BUCK&SHUNT) a 31.2Khz ,511 step
  TCCR4A = _BV(COM4A1) | _BV(COM4A0) | _BV(COM4B1) | _BV(COM4B0) | _BV(WGM41); //Fast PWM, 10-bit
  TCCR4B = _BV(CS40) | _BV(WGM42); //Prescaler a 1
  OCR4A = 511;
  OCR4B = 511;
  Serial.begin(9600) ;
  lcd.init();          
  lcd.backlight();      
  lcd.clear();
  //MESSAGGIO DI BENVENUTO         
  lcd.setCursor(1, 0);
  lcd.print("ArduLab Vers. 1.0");
  lcd.setCursor(9, 1);
  lcd.print("By");
  lcd.setCursor(1, 2);
  lcd.print("EnergiAlternativa");
  lcd.setCursor(2, 3);
  lcd.print("CC BY-NC-SA 4.0");
  delay(2500);
  lcd.clear();
  lcd.setCursor(8, 1);
  lcd.print("WWW.");
  lcd.setCursor(1, 2);
  lcd.print("ENERGIALTERNATIVA");
  lcd.setCursor(8, 3);
  lcd.print(".ORG");
  delay(3000);
  lcd.clear();



 
  Offset_I_out  = analogRead(I_out_Pin);
  Offset_I_shunt  = analogRead(I_shunt_Pin);

  if (EEPROM.read(0) != 255) { //SALVATAGGIO DATI IN EEPROM
    Vpot_min = EEPROM.read(0);
    Vpot_max = EEPROM.read(1);
    Ipot_min = EEPROM.read(2);
    Ipot_max = EEPROM.read(3);
    Ipot_min_Dum = EEPROM.read(4);
    Ipot_max_Dum = EEPROM.read(5);
    Ipot_min_Lim = EEPROM.read(6);
    Ipot_max_Lim = EEPROM.read(7);
    Stato_Buzzer = EEPROM.read(8);
    VBat_charge = EEPROM.readFloat(20);
    IBat_charge = EEPROM.readFloat(24);
    VBat_discharge = EEPROM.readFloat(28);
    IBat_discharge = EEPROM.readFloat(32);
  }

    if (Stato_Buzzer) {
    digitalWrite(Buzzer_Pin, HIGH);
    delay(500);
    digitalWrite(Buzzer_Pin, LOW);
  }
 
}

void loop() {
  ArduLab(); //Subroutine misure e PWM
  Tastiera();//Subroutine la Tastiera
  Display();//Subroutine il Display
}





void Display() { //Subroutine visualizzazione su Display LCD 20*4

  if (millis() > (refresh + 500))
  {
    refresh = millis();
    if (clearlcd) {
      lcd.clear();
      clearlcd = 0;
    }

    if (Fault) { //AVARIA
      digitalWrite(Led_fault_Pin, HIGH);
      lcd.setCursor(0, 0);
      lcd.print("FAULT");
      lcd.setCursor(0, 1);
      switch (Fault) {
        case 1://CORTOCIRCUITO
          lcd.print("CORTO");
          break;
        case 2:
          lcd.print("FUSE SEZIONE BUCK");
          break;
        case 3:
          lcd.print("Vin Bassa Tensione");
          break;
        case 4:
          lcd.print("Vin Alta Tensione ");
          break;
        case 5:
          lcd.print("FUSE SEZIONE SHUNT");
          break;
        case 6:
          lcd.print("Temperatura Limite");
          break;
        case 7:
          break;
        case 8:
          break;
        case 9:
          break;
        case 10:
          break;


      }


    }

    else { //NORMAL

      lcd.setCursor(0, 0);
      if (Set == 1)
      {
        lcd.print("SET");
        memorizzare = 1;
      }

      else if (ON == 0)
      {
        lcd.print("OFF");
        if (memorizzare) {


          EEPROM.write(0, Vpot_min);
          EEPROM.write(1, Vpot_max);
          EEPROM.write(2, Ipot_min);
          EEPROM.write(3, Ipot_max);
          EEPROM.write(4, Ipot_min_Dum);
          EEPROM.write(5, Ipot_max_Dum);
          EEPROM.write(6, Ipot_min_Lim);
          EEPROM.write(7, Ipot_max_Lim);
          EEPROM.write(8, Stato_Buzzer);
          EEPROM.writeFloat(20, VBat_charge);
          EEPROM.writeFloat(24, IBat_charge);
          EEPROM.writeFloat(28, VBat_discharge);
          EEPROM.writeFloat(32, IBat_discharge);
          memorizzare = 0;


        }
      }
      else lcd.print("ON");



      switch (Screen) {
        case 0://MENU
          sottomenu = 2;
          lcd.setCursor(7, 0);
          lcd.print("MENU");
          lcd.setCursor(0, 1);
          lcd.print("Temp=");
          lcd.print(Temperatura, 1);
          lcd.print("C");
          lcd.setCursor(0, 2);
          lcd.print("Buzzer=");
          if (Stato_Buzzer)lcd.print("ON");
          else lcd.print("OFF");
          break;
        case 1:
          sottomenu = 2;
          lcd.setCursor(7, 0);
          lcd.print("SILENZIA");
          lcd.setCursor(0, 2);
          lcd.print("Buzzer=");
          if (Stato_Buzzer)lcd.print("ON");
          else lcd.print("OFF");
          break;
        case 2:
          sottomenu = 2;
          lcd.setCursor(0, 0);
          lcd.print("IL PROGETTO ARDULAB");
           lcd.setCursor(0, 1);
          lcd.print("VIENE RILASCIATO");
           lcd.setCursor(0, 2);
          lcd.print("CON LICENZA COMMONS");
           lcd.setCursor(0, 3);
          lcd.print("CC BY-NC-SA 4.0");
          break;

        case 10: //ALIMENTATORE
          sottomenu = 2;
          digitalWrite(Stab_Pin, HIGH);
          V_max = float(analogRead(V_set_Pin) * (Vpot_max - Vpot_min)) / 1023 + Vpot_min;
          I_max = float(analogRead(I_set_Pin) * (Ipot_max - Ipot_min)) / 1023 + Ipot_min;
          digitalWrite(Led_supply_Pin, HIGH);
          digitalWrite(Led_load_Pin, HIGH);
          digitalWrite(Led_shunt_Pin, LOW);
          lcd.setCursor(4, 0);
          lcd.print("ALIMENTATORE");
          lcd.setCursor(0, 1);
          lcd.print("Vin=");
          lcd.print(V_in, 1);
          lcd.print("V ");
          lcd.setCursor(10, 1);
          lcd.print("Vout=");
          lcd.print(V_out, 1);
          lcd.print("V ");
          lcd.setCursor(0, 2);
          lcd.print("Pout=");
          lcd.print((V_out * I_out), 0);
          lcd.print("W");
          lcd.setCursor(10, 2);
          lcd.print("Iout=");
          lcd.print(I_out, 1);
          lcd.print("A ");
          lcd.setCursor(0, 3);
          lcd.print("Vs=");
          lcd.print(V_max, 1);
          lcd.print("V ");
          lcd.setCursor(10, 3);
          lcd.print("Is=");
          lcd.print(I_max, 1);
          lcd.print("A ");
          break;
        case 11:
          lcd.setCursor(4, 0);
          lcd.print("ALIMENTATORE");
          lcd.setCursor(0, 1);
          lcd.print("Range Pot Tensione ");
          lcd.setCursor(0, 2);
          lcd.print("min=");
          lcd.print(Vpot_min);
          lcd.print("V");
          lcd.setCursor(10, 2);
          lcd.print("max=");
          lcd.print(Vpot_max);
          lcd.print("V");
          lcd.setCursor(0, 3);
          //lcd.print("Vset=");
          //lcd.print(V_max, 1);
          //lcd.print("V");
          break;
        case 12:
          lcd.setCursor(4, 0);
          lcd.print("ALIMENTATORE");
          lcd.setCursor(0, 1);
          lcd.print("Range Pot Corrente ");
          lcd.setCursor(0, 2);
          lcd.print("min=");
          lcd.print(Ipot_min);
          lcd.print("A");
          lcd.setCursor(10, 2);
          lcd.print("max=");
          lcd.print(Ipot_max);
          lcd.print("A");
          lcd.setCursor(0, 3);
          lcd.print("Iset=");
          lcd.print(I_max, 1);
          lcd.print("A");
          break;
        case 20: //DUMMY LOAD
          sottomenu = 1;
          digitalWrite(Stab_Pin, LOW);
          V_max = 32;
          I_max = float(analogRead(I_set_Pin) * (Ipot_max_Dum - Ipot_min_Dum)) / 1023 + Ipot_min_Dum;
          digitalWrite(Led_supply_Pin, HIGH);
          digitalWrite(Led_load_Pin, LOW);
          digitalWrite(Led_shunt_Pin, HIGH);
          lcd.setCursor(5, 0);
          lcd.print("UMMY LOAD");
          lcd.setCursor(0, 1);
          lcd.print("Vin=");
          lcd.print(V_in, 1);
          lcd.print("V ");
          lcd.setCursor(10, 1);
          lcd.print("Iout=");
          lcd.print(I_shunt, 1);
          lcd.print("A ");
          lcd.setCursor(0, 2);
          lcd.print("Ref=");
          lcd.print(VRef, 1);
          lcd.print("V ");
          lcd.setCursor(10, 2);
          lcd.print("Pout=");
          lcd.print((V_out * I_shunt), 0);
          lcd.print("W");
          lcd.setCursor(0, 3);
          //lcd.print(Asc(223));
          lcd.print("V=");
          lcd.print(V_in-VRef, 1);
          lcd.print("V ");         
          lcd.setCursor(10, 3);
          lcd.print("Is=");
          lcd.print(I_max, 1);
          lcd.print("A ");
          break;
        case 21:
          lcd.setCursor(5, 0);
          lcd.print("UMMY LOAD");
          lcd.setCursor(0, 1);
          lcd.print("Range Pot Corrente ");
          lcd.setCursor(0, 2);
          lcd.print("min=");
          lcd.print(Ipot_min_Dum);
          lcd.print("A");
          lcd.setCursor(10, 2);
          lcd.print("max=");
          lcd.print(Ipot_max_Dum);
          lcd.print("A");
          lcd.setCursor(0, 3);
          break;
        case 22:
          lcd.setCursor(0, 0);
          lcd.print("22");
          break;
        case 30://LIMITER
          sottomenu = 1;
          digitalWrite(Stab_Pin, LOW);
          V_max = 32;
          I_max = float(analogRead(I_set_Pin) * (Ipot_max_Lim - Ipot_min_Lim)) / 1023 + Ipot_min_Lim;
          digitalWrite(Led_supply_Pin, HIGH);
          digitalWrite(Led_load_Pin, HIGH);
          digitalWrite(Led_shunt_Pin, LOW);
          lcd.setCursor(6, 0);
          lcd.print("LIMITER");
          lcd.setCursor(0, 1);
          lcd.print("Vin=");
          lcd.print(V_in, 1);
          lcd.print("V ");
          lcd.setCursor(10, 1);
          lcd.print("Vout=");
          lcd.print(V_out, 1);
          lcd.print("V ");
          lcd.setCursor(0, 2);
          lcd.print("Pout=");
          lcd.print((V_out * I_out), 0);
          lcd.print("W");
          lcd.setCursor(10, 2);
          lcd.print("Iout=");
          lcd.print(I_out, 1);
          lcd.print("A ");
          lcd.setCursor(0, 3);
          lcd.setCursor(10, 3);
          lcd.print("Is=");
          lcd.print(I_max, 1);
          lcd.print("A ");
          break;
        case 31:
          lcd.setCursor(6, 0);
          lcd.print("LIMITER");
          lcd.setCursor(0, 1);
          lcd.print("Range Pot Corrente ");
          lcd.setCursor(0, 2);
          lcd.print("min=");
          lcd.print(Ipot_min_Lim);
          lcd.print("A");
          lcd.setCursor(10, 2);
          lcd.print("max=");
          lcd.print(Ipot_max_Lim);
          lcd.print("A");
          lcd.setCursor(0, 3);
          break;
        case 32:
          lcd.setCursor(0, 0);
          lcd.print("32");
          break;
        case 40://Carica Batteria
          sottomenu = 1;
          digitalWrite(Stab_Pin, LOW);
          V_max = VBat_charge;
          I_max = IBat_charge;
          digitalWrite(Led_supply_Pin, HIGH);
          digitalWrite(Led_load_Pin, HIGH);
          digitalWrite(Led_shunt_Pin, LOW);
          lcd.setCursor(4, 0);
          lcd.print("CARICA BATTERIA");
          lcd.setCursor(0, 1);
          lcd.print("V=");
          lcd.print(V_out, 1);
          lcd.print("V ");
          lcd.setCursor(10, 1);
          lcd.print("I=");
          lcd.print(I_out, 1);
          lcd.print("A ");
          lcd.setCursor(0, 2);
          lcd.print("T=");
          lcd.print(Time_charge/60);
          lcd.print("min");
          lcd.setCursor(10, 2);
          lcd.print("E=");
          lcd.print(Energia / 3600/1000, 1);
          lcd.print("Ah");
          lcd.setCursor(0, 3);
          if (ON && charge == 0)charge = 1;
          if (charge) {
            if (ON) {
              lcd.print("IN CARICA...");
              Time_charge = (millis() - Start_charge) / 1000;
              Energia += (millis() - Last_millis) * I_out;
              Last_millis = millis();
            }
            else
              lcd.print("CARICA TERMINATA");
          }
          else {
            Start_charge = millis();
            Last_millis = millis();
          }
          if (V_out >= (VBat_charge - 0.1) && I_out < (IBat_charge / 5) && ON) {
            ON = 0;
            if (Stato_Buzzer) {
              digitalWrite(Buzzer_Pin, HIGH);;
              delay(100);
              digitalWrite(Buzzer_Pin, LOW);
              delay(100);
              digitalWrite(Buzzer_Pin, HIGH);;
              delay(1000);
              digitalWrite(Buzzer_Pin, LOW);
            }
          }
          break;
        case 41:
          lcd.setCursor(0, 0);
          lcd.setCursor(4, 0);
          lcd.print("CARICA BATTERIA");
          lcd.setCursor(4, 1);
          lcd.print("IMPOSTAZIONI");
          lcd.setCursor(0, 2);
          lcd.print("V=");
          lcd.print(VBat_charge);
          lcd.print("V");
          lcd.setCursor(10, 2);
          lcd.print("I=");
          lcd.print(IBat_charge);
          lcd.print("A");
          break;
        case 42:
          break;
        case 50://Scarica Batteria
          sottomenu = 1;
          digitalWrite(Stab_Pin, LOW);
          digitalWrite(Led_supply_Pin, LOW);
          digitalWrite(Led_load_Pin, HIGH);
          digitalWrite(Led_shunt_Pin, HIGH);
          lcd.setCursor(4, 0);
          lcd.print("SCARICA BATTERIA");
          lcd.setCursor(0, 1);
          lcd.print("V=");
          lcd.print(V_out, 1);
          lcd.print("V ");
          lcd.setCursor(10, 1);
          lcd.print("I=");
          lcd.print(I_shunt, 1);
          lcd.print("A ");
          lcd.setCursor(0, 2);
          lcd.print("T=");
          lcd.print(Time_charge/60);
          lcd.print("min");
          lcd.setCursor(10, 2);
          lcd.print("E=");
          lcd.print(Energia / 3600/1000, 1);
          lcd.print("Ah");
          lcd.setCursor(0, 3);
          if (ON && charge == 0)charge = 1;
          if (charge) {
            if (ON) {
              lcd.print("IN SCARICA...");
              Time_charge = (millis() - Start_charge) / 1000;
              Energia += (millis() - Last_millis) * I_shunt;
              Last_millis = millis();
            }
            else
              lcd.print("SCARICA TERMINATA");
          }
          else {
            Start_charge = millis();
            Last_millis = millis();
          }
          if (V_out < VBat_discharge && ON) {
            ON = 0;
            if (Stato_Buzzer) {
              digitalWrite(Buzzer_Pin, HIGH);;
              delay(1000);
              digitalWrite(Buzzer_Pin, LOW);
              delay(100);
              digitalWrite(Buzzer_Pin, HIGH);;
              delay(100);
              digitalWrite(Buzzer_Pin, LOW);
            }
          }

          break;
        case 51:
          lcd.setCursor(4, 0);
          lcd.print("SCARICA BATTERIA");
          lcd.setCursor(4, 1);
          lcd.print("IMPOSTAZIONI");
          lcd.setCursor(0, 2);
          lcd.print("V=");
          lcd.print(VBat_discharge);
          lcd.print("V");
          lcd.setCursor(10, 2);
          lcd.print("I=");
          lcd.print(IBat_discharge);
          lcd.print("A"); ;
          break;
        case 52:
          lcd.setCursor(0, 0);
          lcd.print("52");
          break;
        case 60:
          lcd.setCursor(0, 0);
          lcd.print("60");
          break;
        case 61:
          lcd.setCursor(0, 0);
          lcd.print("61");
          break;
        case 62:
          lcd.setCursor(0, 0);
          lcd.print("62");
          break;
        default:
          break;
      }
    }
  }
}




void ArduLab() {  //Subroutine misure e controllo PWM
  Temperatura = temp.getTemp();
  V_in = (analogRead(V_in_Pin) * Fattore_Voltage);
  I_out = 0;
  V_out = 0;
  for (int i = 0; i < Num_Letture; i++) {
    I_out = I_out + ((analogRead(I_out_Pin) - Offset_I_out));
    I_shunt = I_shunt + ((analogRead(I_shunt_Pin) - Offset_I_shunt));
    V_out = V_out + (analogRead(V_out_Pin) );
  }
  I_out = I_out / Num_Letture * Fattore_Corrente_Buck;
  I_shunt = I_shunt / Num_Letture * Fattore_Corrente_Shunt;
  V_out = V_out / Num_Letture * Fattore_Voltage;

  if (I_shunt < 0)I_shunt = 0;
  if (I_out < 0)I_out = 0;


  if (Screen >= 10 && Screen < 20 | Screen >= 30 && Screen < 50) { //GESTIONE PWM ALIMENTATORE & LIMITER
    PWM_shunt = 0;
    //if (I_out < 0)I_out = 0;
    if (I_out > I_max)limita = 1;
    if (V_out > V_max)limita = 0;
    errore_V = V_max - V_out;
    errore_I = I_max - I_out;
    if (limita)PWM_buck += ((Kp_I * errore_I) + (Ki_I * eIntegr_I) + (Kd_I * ePrec_I));
    else PWM_buck += ((Kp_V * errore_V) + (Ki_V * eIntegr_V) + (Kd_V * ePrec_V));
    /*
    {
      if (V_out>V_max)PWM_buck=0;
      else PWM_buck=511;
    }
    */
    eIntegr_V += errore_V;
    ePrec_V = errore_V;
    eIntegr_I += errore_I;
    ePrec_I = errore_I;
    if (PWM_buck > 511)PWM_buck = 511;
    else if (PWM_buck < 0)PWM_buck = 0;
  }

  if (Screen >= 20 && Screen < 30 ) { //GESTIONE PWM DUMMY LOAD
    PWM_buck = 511;
    limita = 1;
    //if (I_shunt < 0)I_out = 0;
    errore_I = I_max - I_shunt;
    PWM_shunt += ((Kp_I * errore_I) + (Ki_I * eIntegr_I) + (Kd_I * ePrec_I));
    eIntegr_I += errore_I;
    ePrec_I = errore_I;
    if (PWM_shunt > 511)PWM_shunt = 511;
    else if (PWM_shunt < 0)PWM_shunt = 0;
  }

  if (Screen >= 50 && Screen < 60 ) { //GESTINE PWM SCARICA BATTERIA
    PWM_buck = 0;
    errore_I = IBat_discharge - I_shunt;
    PWM_shunt += ((Kp_I * errore_I) + (Ki_I * eIntegr_I) + (Kd_I * ePrec_I));
    eIntegr_I += errore_I;
    ePrec_I = errore_I;
    if (PWM_shunt > 511)PWM_shunt = 511;
    else if (PWM_shunt < 0)PWM_shunt = 0;
  }





  //CONTROLLO USCITE


  if (ON == 0 | Fault) { //SPENTO o in Fault
    ON = 0;
    OCR4A = 511;
    OCR4B = 511;
    errore_V = 0;
    eIntegr_V = 0;
    ePrec_V = 0;
    errore_I = 0;
    eIntegr_I = 0;
    ePrec_I = 0;
    PWM_shunt = 0;
    PWM_buck  = 0;

  }
  else { //ACCESO e OPERATIVO
    OCR4A = 511 - PWM_shunt;
    OCR4B = 511 - PWM_buck;
  }


  //PROTEZIONI VARIE

  if (ON) {
    if (I_out > Fuse)Fault = 2; //MAX corrente 25A sezione Buck
    if (I_shunt > Fuse)Fault = 5;//MAX corrente 25A sezione Shunt
    if (V_in < 5)Fault = 3; //Tensione in ingresso bassa
    if (V_in > 35)Fault = 4; //Tensione in ingresso alta
    if (Temperatura > 70)Fault = 6; //Temperatura
    if (Fault)clearlcd = 1; //pulisci il display per visualizzare fault
  }

}




void Tastiera() {//Selezione Pagine e gestione Variabili
  if (digitalRead(Reset) == 0 && Screen==20)VRef=V_in;
  if (digitalRead(Reset) == 0 && ON == 0) { //Resetta il Fault e charge
    Energia = 0;
    charge = 0;
    Time_charge = 0;
    Fault = 0;
    clearlcd = 1;
    digitalWrite(Led_fault_Pin, LOW);
  }
  if (Fault == 0) { //disattiva Tastiera se in Fault
    byte decine = Screen / 10;
    byte unita = Screen - (decine * 10);
    int Key_Read = analogRead(Key_Pin);
    Key = 0;
    if (Key_Read < 880)Key = 1;
    if (Key_Read < 620)Key = 2;
    if (Key_Read < 414)Key = 3;
    if (Key_Read < 233)Key = 4;
    if (Key_Read < 70)Key = 5;
    if (Key > 0)clearlcd = 1;
    if (Key == 1 && unita == 0) {
      if (ON)ON = 0;
      else ON = 1;
    }
    if (Key == 1 && unita > 0) {
      if (Set == 0) {
        Set = 1;
        ON = 0;
      }
      else {
        Set = 0;
        ON = 0;
        Screen = decine * 10;
      }
    }
    if (Set == 0) { //modalità navigazione menù
      if (unita < sottomenu && Key == 3)Screen++;
      if (unita > 0 && Key == 4)Screen--;
      if (unita == 0 && decine < (menu + 1) && Key == 2) {
        Screen += 10;
        if (Screen == 10)Screen += 10; //SALTA FUNZIONE ALIMENTATORE
        ON = 0;
      }
      if (Screen == ((menu + 1) * 10))Screen = 0;
      if (unita == 0 && decine > 0 && Key == 5) {
        Screen -= 10;
        if (Screen == 10)Screen -= 10; //SALTA FUNZIONE ALIMENTATORE
        ON = 0;
      }
      //if (Screen < 0)Screen = (menu * 10);
    }
    else switch (Screen) {
        case 1:
          if (Stato_Buzzer < 1 && Key == 2)Stato_Buzzer++;
          if (Stato_Buzzer > 0 && Key == 5)Stato_Buzzer--;
          break;
        case 10:
          break;
        case 11:
          if (Vpot_max < 32 && Key == 2)Vpot_max++;
          if (Vpot_max > 0 && Key == 5)Vpot_max--;
          if (Vpot_min < Vpot_max && Key == 4)Vpot_min++;
          if (Vpot_min > 0 && Key == 3)Vpot_min--;
          break;
        case 12:
          if (Ipot_max < 20 && Key == 2)Ipot_max++;
          if (Ipot_max > 0 && Key == 5)Ipot_max--;
          if (Ipot_min < Vpot_max && Key == 4)Ipot_min++;
          if (Ipot_min > 0 && Key == 3)Ipot_min--;
          break;
        case 20:
          break;
        case 21:
          if (Ipot_max_Dum < 20 && Key == 2)Ipot_max_Dum++;
          if (Ipot_max_Dum > 0 && Key == 5)Ipot_max_Dum--;
          if (Ipot_min_Dum < Vpot_max && Key == 4)Ipot_min_Dum++;
          if (Ipot_min_Dum > 0 && Key == 3)Ipot_min_Dum--;
          break;
        case 22:
          break;
        case 30:
          break;
        case 31:
          if (Ipot_max_Lim < 20 && Key == 2)Ipot_max_Lim++;
          if (Ipot_max_Lim > 0 && Key == 5)Ipot_max_Lim--;
          if (Ipot_min_Lim < Vpot_max && Key == 4)Ipot_min_Lim++;
          if (Ipot_min_Lim > 0 && Key == 3)Ipot_min_Lim--;
          break;
        case 32:
          break;
        case 40:
          break;
        case 41:
          if (VBat_charge < 32 && Key == 4)VBat_charge += 0.1;
          if (VBat_charge > 0 && Key == 3)VBat_charge -= 0.1;
          if (IBat_charge < 20 && Key == 2)IBat_charge += 0.1;
          if (IBat_charge > 0 && Key == 5)IBat_charge -= 0.1;
          break;
        case 42:
          break;
        case 50:
          break;
        case 51:
          if (VBat_discharge < 32 && Key == 4)VBat_discharge += 0.1;
          if (VBat_discharge > 0 && Key == 3)VBat_discharge -= 0.1;
          if (IBat_discharge < 20 && Key == 2)IBat_discharge += 0.1;
          if (IBat_discharge > 0 && Key == 5)IBat_discharge -= 0.1;
          break;
        default:
          break;
      }
  }



  while (analogRead(Key_Pin) < 880) {//BEEP
    if (Stato_Buzzer)digitalWrite(Buzzer_Pin, HIGH);
  };
  delay(50);
  if (Stato_Buzzer)digitalWrite(Buzzer_Pin, LOW);
}


Allegati:
libraries.zip

ElettroshockNow il 18/6/2016, 17:08
Re: Dummy Load con Arduino
In Allegato ZIP contenente PCB e schemi nella versione 2.1

Allegati:
Ardulab_Schema_V2_1.jpg

Ardulab_PCB_V2_1.jpg

ArduLab_V2_1.zip

Hugo il 10/7/2016, 3:14
Re: Dummy Load con Arduino
Olá! Pode ser usado para fazer a formação de material ativo nas placas de uma bateria Planté? Uma bateria totalmente caseira?

fly1971 il 11/12/2021, 17:35
Re: Dummy Load con Arduino
Ciao a tutti
Ho verificato che con lo stesso login dei energialternativa.info posso accedere anche a questo , chiedo mai 2 forum sono completamente distaccati ho hanno qualcosa in comune ?
Mi complimento per questo progetto e su come è stato implementato e a riguardo ho alcune domande da porvi.
Stavo cercando un dummy load o carico fittizio come vogliamo chiamarlo da usare soprattutto per le batterie e misurare la loro capacità, ma ho trovato un po di difficoltà perché  il mio caricabatteria universale da modellismo IMAX6B è limitato come potenza di scarica a 5W e poi per i pacchi delle celle al Litio richiede  il connettore di bilanciamento e qualche volta non ho potuto testare pacchi batterie di utensili, i quali hanno già la loro scheda BMS.
Allora stavo cercando qualche progetto da costruimi, su i vari siti cinesi , si trovano prodotti e a buon prezzo che hanno queste funzioni , ma se si rompono difficili da riparare, invece quacosa costruito da me è  più facile  da gestire un guasto, e nella ricerca è comparso questo progetto piu attinente alle mie esigenze.
Ho letto tutto di questo progetto e lo trovo un progetto completo  mi sono chiesto se  si puo sviluppare una versione light, con le sole funzioni di dummy load e scarica batteria con delle modifiche sul codice.
Ho visto lo schema, queta versione più leggera  si può fare eliminando la sezione si step/down, induttanza e componenti a dx e sx , lasciando i sensori ACS per la I out e I shunt. In alcuni progetti in rete sulla sezione shunt montano piccole resistenze da 5-10W e poi i mosfet li collegano a dissipatori con ventola.  Quindi  un ulteriore modifica potrebbe essere quella di una resistenza da 20W  e aggiungere un secondo mosfet e collegare tutto a un dissipattore con ventola, cosi si elimina l’uscita SHUNT, correggetemi se le mie soluzioni possono essere sbagliate. A riguardo del LM317 non capito bene il funzionamento , per limitare la corrente?
A riguardo dei 2 sensori di corrente ACS712 sul progetto non vedo le resistenze da 2mOhm.
Passiamo alla sezione codice e qui c’è la nota dolente, ho una buona  dimistichezza con la parte di elettronica di base ma poco con i codici di arduino, recentemente ho ternimato una puntatrice con Mot e arduino nano, avevo trovato un codice dove tramite un potenziometro potevo regolare i 2 impulsi e la pausa, e poi tramite un tasto di avvio mi faceva partire gli impulsi, volevo aggiungerci una funzione manuale  e far ein modo che  il MOT restava acceso per tutto il tempo che tenevo premuto il pulsante di avvio , dopo un po di sbattimenti sono riuscito a fare una modifica anche se poco elegante ma mi funziona.
Sicuramente il codice sarà ridotto a quello che avete pubblicato, alcune varibili e valori possono essere eliminati perché inerenti allo step/down e alla sezione carica batteria, nella sezione scarica batteria è stato impostato come fisso la Vbatt-discharge e Ibatt-discharge, questi 2 valori dovrebbero essere impostati variabili, e poter scegliere la V di cut-off per ogni tipologia di pacco batteria e anche la corrente di scarica, e se poteva implemtare anche su arduino nano.
Provo a stamparmi il codice cosi da poterlo leggerlo con calma e capire dove  fare qualche modifica.
Scusate per il mio intervento molto prolisso e spero che mi potete aiutare.
Un saluto


fly1971 il 14/12/2021, 15:52
Re: Dummy Load con Arduino


MI  sono letto il codice e ho fatto alcune modifiche, ho eliminato alcune sezioni , alimentatore e carica batteria, ho ci sono alcune cose che non mi tornano e tra queste la più importante a riguardo della sezioen scarica batteria, ma la VBatt_discharge e IBatt-discharge sono valori che posso impostare io a seconda del pacco batteria e la corrente di scarica?
le parti che non ho capito e sono evidenziate in Verde e riguardano la parte del PWM e le sue uscite, anche perchè vorrei tentare di adatatrlo ad arduino nano se è possibile, mi sembra che con ilnumero di uscite ed ingressi siano sufficienti quelli di arduino nano. Si aggiunge  la parte iniziale della sub routine misure controlli  e la part ecentrale della routine tasiera.
Le parti in giallo sono da cancellare
Le parti in azzurro sono le modfiche fatte.
sicuyramente ci saranno degli errori , se qualcuno mi puo aiutare a correggerli.
Alla prossima.
Ho inserito il codice con la finestra specifica di C++ e ho provato a evidenziar ele varie parti , ma all'anteprima non mi evidenza i vari colori , sono contretto a inserirlo come listato in word , dove sono evidenziate le varie parti in colore modificate.


Allegati:
codice1_1.doc



TOP100-SOLAR Galleria Immagini EnergiAlternativa