- Materiali richiesti
- Schema del circuito di carico elettronico di Arduino DC
- Progettazione PCB e file Gerber
- Ordinare il tuo PCB da AllPCB
- Codice Arduino per carico CC regolabile
- Testare il nostro carico CC regolabile
Se hai mai lavorato con batterie, circuiti SMPS o altri circuiti di alimentazione, spesso sarebbe capitato di dover testare la tua fonte di alimentazione caricandola per verificare come si comporta in diverse condizioni di carico. Un dispositivo che viene comunemente utilizzato per eseguire questo tipo di test è chiamato carico CC a corrente costante, che ci consente di regolare la corrente di uscita della fonte di alimentazione e quindi mantenerla costante fino a quando non viene regolata nuovamente. In questo tutorial impareremo come costruire il nostro carico elettronico regolabile utilizzando Arduino, che può assumere una tensione di ingresso massima di 24 V e assorbire una corrente fino a 5 A. Per questo progetto, abbiamo utilizzato schede PCB prodotte da AllPCB, un fornitore di servizi professionali di produzione e assemblaggio di PCB con sede in Cina.
Nel nostro precedente tutorial sulla sorgente di corrente controllata dalla tensione, abbiamo spiegato come utilizzare un amplificatore operazionale con un MOSFET e fare uso di un circuito sorgente di corrente controllata dalla tensione. Ma in questo tutorial, applicheremo quel circuito e creeremo una sorgente di corrente controllata digitalmente. Ovviamente, una sorgente di corrente controllata digitalmente richiede un circuito digitale e per servire allo scopo, viene utilizzato un Arduino NANO. Arduino NANO fornirà i controlli necessari per il carico DC.
Il circuito è composto da tre parti. La prima parte è la sezione Arduino Nano, la seconda parte è il convertitore da digitale ad analogico e la terza parte è un circuito analogico puro in cui viene utilizzato un doppio amplificatore operazionale in un unico pacchetto che controllerà la sezione di carico. Questo progetto si ispira a un post su Arduino, tuttavia, il circuito viene modificato per una minore complessità con funzionalità di base affinché tutti possano costruirlo.
Il nostro carico elettronico è progettato per avere le seguenti sezioni di input e output.
- Due interruttori di ingresso per aumentare e diminuire il carico.
- Un display LCD che visualizzerà il carico impostato, il carico effettivo e la tensione di carico.
- La corrente di carico massima è limitata a 5A.
- La tensione di ingresso massima è 24V per il carico.
Materiali richiesti
I componenti necessari per costruire un carico elettronico CC sono elencati di seguito.
- Arduino nano
- LCD 16x2 caratteri
- Presa a due cilindri
- Mosfet irf540n
- Mcp4921
- Lm358
- Resistenza shunt da 5 watt, 1 ohm
- 1k
- 10k - 6 pezzi
- Radiatore
- .1uF 50v
- 2k - 2 pezzi
Schema del circuito di carico elettronico di Arduino DC
Nello schema seguente, l'amplificatore operazionale ha due sezioni. Uno serve per controllare il MOSFET e l'altro per amplificare la corrente rilevata. Puoi anche guardare il video in fondo a questa pagina che spiega il funzionamento completo del circuito. La prima sezione ha R12, R13 e MOSFET. R12 viene utilizzato per ridurre l'effetto di carico sulla sezione di feedback e R13 viene utilizzato come resistenza di gate Mosfet.
Ulteriori due resistori R8 e R9 vengono utilizzati per rilevare la tensione di alimentazione dell'alimentatore che sarà sollecitata da questo carico fittizio. Secondo la regola del partitore di tensione, queste due resistenze supportano un massimo di 24V. Più di 24V produrrà una tensione che non sarà adatta per i pin di Arduino. Quindi fare attenzione a non collegare un alimentatore con una tensione di uscita superiore a 24V.
Il resistore R7 è il resistore di carico effettivo qui. È una resistenza da 5 Watt, 0,1 Ohm. Secondo la legge di potenza, supporterà massimo 7A (P = I 2 R), ma per il lato sicuro, è più saggio limitare la corrente di carico massimo di 5A. Pertanto, al momento il carico massimo di 24V, 5A può essere impostato da questo carico fittizio.
Un'altra sezione dell'amplificatore è configurata come amplificatore di guadagno. Fornirà un guadagno 6x. Durante il flusso di corrente, apparirà una caduta di tensione. Ad esempio, quando 5 A di corrente fluiscono attraverso il resistore, la caduta di tensione sarà di 0,5 V attraverso il resistore di shunt da 0,1 Ohm (V = I x R) secondo la legge degli ohm. L'amplificatore non invertente lo amplierà a x6, quindi 3V sarà l'uscita dalla seconda parte dell'amplificatore. Questa uscita verrà rilevata dal pin di ingresso analogico Arduino nano e verrà calcolata la corrente.
La prima parte dell'amplificatore è configurata come un circuito inseguitore di tensione che controllerà il MOSFET secondo la tensione di ingresso e otterrà la tensione di feedback desiderata a causa della corrente di carico che scorre attraverso il resistore di shunt.
MCP4921 è il convertitore da digitale ad analogico. Il DAC utilizza il protocollo di comunicazione SPI per ottenere i dati digitali da qualsiasi unità microcontrollore e fornire un'uscita di tensione analogica a seconda di esso. Questa tensione è l'ingresso dell'amplificatore operazionale. In precedenza abbiamo anche imparato a utilizzare questo DAC MCP4921 con PIC.
Dall'altro lato, c'è un Arduino Nano che fornirà i dati digitali al DAC tramite protocollo SPI e controllerà il carico, visualizzando anche i dati nel display a 16x2 caratteri. Vengono utilizzate due cose aggiuntive, ovvero il pulsante di diminuzione e aumento. Invece di collegarsi a un pin digitale, è collegato ai pin analogici. Pertanto, è possibile cambiarlo con un altro tipo di interruttori come slider o encoder analogico. Inoltre, modificando il codice è possibile fornire dati analogici grezzi per controllare il carico. Ciò evita anche il problema dell'antirimbalzo dello switch.
Infine, aumentando il carico, Arduino nano fornirà i dati di carico al DAC in formato digitale, il DAC fornirà dati analogici all'amplificatore operazionale e l'amplificatore operazionale controllerà il MOSFET secondo la tensione di ingresso dell'amplificatore operazionale. Infine, a seconda del flusso di corrente del carico attraverso il resistore di shunt, apparirà una caduta di tensione che verrà ulteriormente amplificata dal secondo canale dell'LM358 e ottenuta da Arduino nano. Questo verrà visualizzato sul display dei caratteri. La stessa cosa accadrà quando l'utente preme il pulsante di diminuzione.
Progettazione PCB e file Gerber
Poiché questo circuito ha un percorso di corrente elevato, è una scelta più saggia utilizzare tattiche di progettazione PCB appropriate per rimuovere casi di guasto indesiderati. Pertanto, un PCB è progettato per questo carico CC. Ho utilizzato Eagle PCB Design Software per progettare il mio PCB. Puoi scegliere qualsiasi software Cad PCB. Il PCB finale progettato nel software CAD è mostrato nell'immagine sottostante,
Un fattore importante da notare durante la progettazione di questo PCB è l'uso di un piano di alimentazione spesso per il corretto flusso di corrente su tutto il circuito. C'è anche la cucitura a terra VIAS (vie casuali nel piano di terra) che vengono utilizzate per un corretto flusso di terreno in entrambi gli strati verso l'alto e verso il basso.
Puoi anche scaricare il file Gerber di questo PCB dal link sottostante e usarlo per la fabbricazione.
- Scarica il file Gerber con carico CC elettronico regolabile
Ordinare il tuo PCB da AllPCB
Una volta che sei pronto con il tuo file Gerber, puoi usarlo per fabbricare il tuo PCB. A proposito, viene richiamato lo sponsor di questo articolo ALLPCB, noto per i suoi PCB di alta qualità e la spedizione ultraveloce. Oltre alla produzione di PCB, fornisce anche AllPCBAssemblaggio PCB e approvvigionamento di componenti.
Per ottenere il tuo ordine PCB da loro, visita allpcb.com e iscriviti. Quindi nella home page, inserisci le dimensioni del tuo PCB e la quantità richiesta come mostrato di seguito. Quindi fare clic su Cita ora.
Ora puoi modificare gli altri parametri del tuo PCB come il numero di strati, il colore della maschera, lo spessore, ecc. Sul lato destro, puoi scegliere il tuo paese e l'opzione di spedizione preferita. Questo ti mostrerà il tempo di consegna e l'importo totale da pagare. Ho scelto DHL e il mio importo totale è di $ 26, ma se sei un cliente per la prima volta i prezzi scenderanno alla cassa. Quindi fare clic su Aggiungi al carrello e quindi fare clic su Acquista ora.
Ora puoi fare clic su Carica il tuo file Gerber facendo clic su "Carica Gerber" e quindi su Acquista.
Nella pagina successiva, puoi inserire il tuo indirizzo di spedizione e controllare il prezzo finale che devi pagare per il tuo PCB. È quindi possibile rivedere l'ordine e quindi fare clic su Invia per effettuare il pagamento.
Una volta confermato l'ordine, puoi metterti comodo e inviare il tuo PCB a casa tua. Ho ricevuto il mio ordine dopo alcuni giorni e l'imballaggio era pulito come mostrato di seguito.
La qualità del PCB è stata buona come sempre, come puoi vedere di persona nelle immagini qui sotto. Di seguito sono mostrati il lato superiore e il lato inferiore della scheda.
Una volta ottenuta la scheda, puoi procedere con l'assemblaggio di tutti i componenti. La mia tavola finita ha un aspetto simile a questo mostrato di seguito.
Successivamente, puoi caricare il codice e accendere il modulo per verificare come funziona. Il codice completo per questo progetto è fornito in fondo a questa pagina. La spiegazione del codice è la seguente.
Codice Arduino per carico CC regolabile
Il codice è piuttosto semplice. All'inizio, abbiamo incluso i file di intestazione SPI e LCD, oltre a impostare la tensione logica massima, i pin di selezione del chip, ecc.
#includere
Questa sezione è costituita dalle dichiarazioni obbligatorie relative al flusso del programma di numeri interi e variabili. Inoltre, impostiamo i pin delle periferiche associate con Arduino Nano.
const int slaveSelectPin = 10; // Chip select pin int number = 0; aumento int = A2; // Aumenta pin int diminuzione = A3; // diminuisce il pin int current_sense = A0; // pin di rilevamento corrente int voltage_sense = A1; // pin di rilevamento tensione int state1 = 0; int state2 = 0; int Set = 0; volt float = 0; float load_current = 0.0; float load_voltage = 0.0; corrente di galleggiamento = 0,0; tensione flottante = 0,0; LCD LiquidCrystal (7, 6, 5, 4, 3, 2); // Pin LCD
Viene utilizzato per la configurazione di LCD e SPI. Inoltre, le direzioni dei pin sono impostate qui.
void setup () { pinMode (slaveSelectPin, OUTPUT); pinMode (aumenta, INPUT); pinMode (diminuzione, INPUT); pinMode (current_sense, INPUT); pinMode (voltage_sense, INPUT); // inizializza SPI: SPI.begin (); // imposta il numero di colonne e righe dell'LCD : lcd.begin (16, 2); // Stampa un messaggio sul display LCD. lcd.print ("Caricamento digitale"); lcd.setCursor (0, 1); lcd.print ("Circuit Digest"); ritardo (2000); }
Viene utilizzato per convertire il valore DAC.
void convert_DAC (unsigned int value) { / * Step Size = 2 ^ n, quindi 12bit 2 ^ 12 = 4096 Per il riferimento 5V, il passo sarà 5/4095 = 0.0012210012210012V o 1mV (circa) * / unsigned int container; unsigned int MSB; LSB int senza segno; / * Passaggio: 1, memorizza i dati a 12 bit nel contenitore Supponiamo che i dati siano 4095, in binario 1111 1111 1111 * / contenitore = valore; / * Passaggio: 2 Creazione fittizia a 8 bit. Quindi, dividendo 256, i 4 bit superiori vengono catturati in LSB LSB = 0000 1111 * / LSB = container / 256; / * Passaggio: 3 Invio della configurazione con punzonatura dei dati a 4 bit. LSB = 0011 0000 O 0000 1111. Il risultato è 0011 1111 * / LSB = (0x30) - LSB; / * Passaggio: 4 Il contenitore ha ancora il valore a 21 bit. Estrazione degli 8 bit inferiori. 1111 1111 AND 1111 1111 1111. Il risultato è 1111 1111 che è MSB * / MSB = 0xFF & container; / * Passaggio: 4 Invio dei dati a 16 bit dividendoli in due byte. * / digitalWrite (slaveSelectPin, LOW); ritardo (100); SPI.transfer (LSB); SPI.transfer (MSB); ritardo (100); // porta il pin SS alto per deselezionare il chip: digitalWrite (slaveSelectPin, HIGH); }
Questa sezione viene utilizzata per le operazioni relative al rilevamento della corrente.
float read_current (void) { load_current = 0; for (int a = 0; a <average; a ++) { load_current = load_current + analogRead (current_sense); } load_current = load_current / media; load_current = (load_current * MAX_VOLT) / 1024; load_current = (load_current / opamp_gain) / load_resistor; return load_current; }
Viene utilizzato per leggere la tensione di carico.
float read_voltage (void) { load_voltage = 0; for (int a = 0; a <average; a ++) { load_voltage = load_voltage + analogRead (voltage_sense); } load_voltage = load_voltage / average; load_voltage = ((load_voltage * MAX_VOLT) /1024.0) * 6; return load_voltage; }
Questo è il ciclo vero e proprio. Qui, vengono misurati i passaggi dell'interruttore ei dati vengono inviati al DAC. Dopo la trasmissione dei dati, vengono misurati il flusso di corrente effettivo e la tensione di carico. Entrambi i valori vengono infine stampati anche sul display LCD.
void loop () { state1 = analogRead (aumento); if (state1> 500) { delay (50); state1 = analogRead (aumento); se (stato1> 500) { volt = volt + 0,02; } } state2 = analogRead (diminuzione); if (state2> 500) { delay (50); state2 = analogRead (diminuzione); if (state2> 500) { if (volt == 0) { volt = 0; } altro { volt = volt-0,02; } } } numero = volt / 0,0012210012210012; convert_DAC (numero); voltaggio = read_voltage (); corrente = read_current (); lcd.setCursor (0, 0); lcd.print ("Imposta valore"); lcd.print ("="); Imposta = (volt / 2) * 10000; lcd.print (Set); lcd.print ("mA"); lcd.setCursor (0, 1); lcd.print ("I"); lcd.print ("="); lcd.print (current); lcd.print ("A"); lcd.print ("V"); lcd.print ("="); lcd.print (voltaggio); lcd.print ("V"); // lcd.print (load_voltage); //lcd.print("mA "); // ritardo (1000); //lcd.clear (); }
Testare il nostro carico CC regolabile
Il circuito di carico digitale è saldato e alimentato utilizzando una fonte di alimentazione a 12V. Ho usato la mia batteria al litio da 7,4 V sul lato della fonte di alimentazione e ho collegato una pinza amperometrica per verificare come funziona. Come puoi vedere quando la corrente impostata è di 300mA, il circuito assorbe 300mA dalla batteria che viene misurata anche dalla pinza amperometrica come 310mA.
Il funzionamento completo del circuito lo trovate nel video linkato sotto. Spero che tu abbia capito il progetto e ti sia piaciuto costruire qualcosa di utile. Se hai domande, lasciale nella sezione commenti o utilizza i forum.