- Materiale necesare
- Diagrama circuitului de încărcare electronică Arduino DC
- Design PCB și fișier Gerber
- Comandarea PCB-ului dvs. de la AllPCB
- Cod Arduino pentru încărcare DC reglabilă
- Testarea sarcinii DC reglabile
Dacă ați lucrat vreodată cu baterii, circuite SMPS sau alte circuite de alimentare, atunci de multe ori s-ar fi întâmplat să vă testați sursa de alimentare încărcând-o pentru a verifica cum funcționează în diferite condiții de încărcare. Un dispozitiv care este utilizat în mod obișnuit pentru a efectua acest tip de test se numește Constant Current DC Load, care ne permite să reglăm curentul de ieșire al sursei dvs. de energie și apoi îl menținem constant până când acesta este ajustat din nou. În acest tutorial, vom învăța cum să construim propria noastră încărcare electronică reglabilă folosind Arduino, care poate lua o tensiune de intrare maximă de 24V și poate scurge curent de până la 5A. Pentru acest proiect, am folosit plăci PCB fabricate de AllPCB, un furnizor de servicii profesionale din China pentru fabricarea și asamblarea PCB-urilor.
În tutorialul nostru anterior cu sursa de curent controlată de tensiune, am explicat cum să utilizați un amplificator operațional cu un MOSFET și să utilizați un circuit de sursă de curent controlat de tensiune. Dar în acest tutorial, vom aplica acel circuit și vom crea o sursă de curent controlată digital. Evident, o sursă de curent controlată digital necesită un circuit digital și pentru a servi scopului, este utilizat un Arduino NANO. Arduino NANO va furniza comenzile necesare pentru încărcarea DC.
Circuitul este format din trei părți. Prima parte este secțiunea Arduino Nano, a doua parte este convertorul digital-analog, iar a treia este un circuit analogic pur, unde se folosește un amplificator operațional dual într-un singur pachet, care va controla secțiunea de încărcare. Acest proiect este inspirat de o postare pe Arduino, cu toate acestea, circuitul este schimbat pentru o complexitate mai mică, cu caracteristici de bază pentru ca toată lumea să îl construiască.
Sarcina noastră electronică este concepută pentru a avea următoarele secțiuni de intrare și ieșire.
- Două comutatoare de intrare pentru creșterea și scăderea sarcinii.
- Un ecran LCD care va afișa sarcina setată, sarcina reală și tensiunea de sarcină.
- Curentul maxim de încărcare este limitat la 5A.
- Tensiunea maximă de intrare este de 24V pentru sarcină.
Materiale necesare
Componentele necesare pentru a construi o sarcină electronică DC sunt enumerate mai jos.
- Arduino nano
- LCD de 16x2 caractere
- Priză cu două butoaie
- Mosfet irf540n
- Mcp4921
- Lm358
- Rezistor de șunt de 5 wați.1 ohmi
- 1k
- 10k - 6buc
- Radiator
- .1uF 50v
- 2k - 2buc
Diagrama circuitului de încărcare electronică Arduino DC
În schema de mai jos, amplificatorul operațional are două secțiuni. Una este să controlați MOSFET, iar cealaltă este să amplificați curentul detectat. De asemenea, puteți verifica videoclipul din partea de jos a acestei pagini, care explică funcționarea completă a circuitului. Prima secțiune are R12, R13 și MOSFET. R12 este utilizat pentru a reduce efectul de încărcare pe secțiunea de feedback și R13 este utilizat ca rezistor de poartă Mosfet.
Două rezistențe suplimentare R8 și R9 sunt utilizate pentru a detecta tensiunea de alimentare a sursei de alimentare care va fi stresată de această sarcină falsă. Conform regulii divizorului de tensiune, aceste două rezistențe suportă maximum 24V. Mai mult de 24V vor produce o tensiune care nu va fi potrivită pentru pinii Arduino. Deci, aveți grijă să nu conectați sursa de alimentare care are o tensiune de ieșire mai mare de 24V.
Rezistorul R7 este rezistența de sarcină reală aici. Este un rezistor de 5 wați,.1 Ohm. Conform legii puterii, va suporta maxim 7A (P = I 2 R), dar pentru partea sigură este mai înțelept să limitezi curentul maxim de încărcare de 5A. Prin urmare, în prezent, sarcina maximă de 24V, 5A poate fi setată de această sarcină fictivă.
O altă secțiune a amplificatorului este configurată ca amplificator de câștig. Acesta va oferi câștig de 6x. În timpul fluxului de curent, va apărea o cădere de tensiune. De exemplu, atunci când 5A de curent curge prin rezistor, căderea de tensiune va fi.5V peste rezistorul de șunt de 1 Ohm (V = I x R) conform legii ohmilor. Amplificatorul fără inversare îl va amplifica la x6, prin urmare 3V va fi ieșirea din a doua parte a amplificatorului. Această ieșire va fi detectată de pinul de intrare analogic Arduino și curentul va fi calculat.
Prima parte a amplificatorului este configurată ca un circuit de urmărire a tensiunii care va controla MOSFET conform tensiunii de intrare și va obține tensiunea de feedback dorită datorită curentului de sarcină care curge prin rezistența de șunt.
MCP4921 este convertorul digital în analog. DAC utilizează protocolul de comunicație SPI pentru a obține datele digitale de la orice unitate de microcontroler și pentru a furniza ieșire de tensiune analogică în funcție de aceasta. Această tensiune este intrarea amplificatorului op. Am învățat anterior cum să folosim acest MCP4921 DAC cu PIC.
Pe de altă parte, există un Arduino Nano care va furniza datele digitale către DAC prin protocolul SPI și va controla încărcarea, afișând și datele în afișajul de 16x2 caractere. Sunt utilizate două lucruri suplimentare, adică butonul de micșorare și creștere. În loc să se conecteze la un pin digital, acesta este conectat în pinii analogici. Prin urmare, se poate schimba cu un alt tip de comutatoare, cum ar fi glisorul sau codificatorul analogic. De asemenea, prin modificarea codului, puteți furniza date analogice brute pentru a controla sarcina. Acest lucru evită, de asemenea, problema comutării debounce.
În cele din urmă, prin creșterea încărcării, Arduino nano va furniza datele de încărcare către DAC în format digital, DAC va furniza date analogice amplificatorului operațional, iar amplificatorul operațional va controla MOSFET conform tensiunii de intrare a amplificatorului operațional.. În cele din urmă, în funcție de curentul de curent de încărcare prin rezistența de șunt, va apărea o cădere de tensiune care va fi amplificată în continuare de cel de-al doilea canal al LM358 și obținută de către nano Arduino. Aceasta va fi afișată pe afișajul caracterelor. Același lucru se va întâmpla atunci când utilizatorul apasă butonul de scădere.
Design PCB și fișier Gerber
Deoarece acest circuit are o cale de curent mare, este o alegere mai înțeleaptă să folosiți tactici adecvate de proiectare a PCB-ului pentru a elimina cazurile de defecțiuni nedorite. Astfel, un PCB este proiectat pentru această încărcare DC. Am folosit software-ul Eagle PCB Design pentru a-mi proiecta PCB-ul. Puteți alege orice software PCB Cad. PCB-ul final proiectat în software-ul CAD este prezentat în imaginea de mai jos,
Un factor important de remarcat în timpul proiectării acestui PCB este utilizarea unui plan de putere gros pentru un flux de curent adecvat pe tot circuitul. Există, de asemenea , cusături la sol VIAS (vii aleatorii în planul de sol) care sunt utilizate pentru fluxul adecvat al solului atât în straturile de sus cât și de jos.
De asemenea, puteți descărca fișierul Gerber al acestui PCB de pe linkul de mai jos și îl puteți folosi pentru fabricare.
- Descărcați fișierul Gerber electronic cu reglare continuă electronică
Comandarea PCB-ului dvs. de la AllPCB
Odată ce sunteți gata cu fișierul Gerber, îl puteți folosi pentru a vă fabrica PCB-ul. Apropo de asta, apare sponsorul acestui articol ALLPCB, care sunt cunoscuți pentru PCB-urile lor de înaltă calitate și transportul ultrarapid. În afară de PCB Manufacturing, AllPCB oferă șiAsamblarea PCB și aprovizionarea componentelor.
Pentru a primi comanda PCB de la ei, vizitați allpcb.com și înscriere. Apoi, pe pagina principală, introduceți dimensiunile PCB-ului și cantitatea necesară, așa cum se arată mai jos. Apoi faceți clic pe Citat acum.
Acum puteți schimba ceilalți parametri ai PCB-ului, cum ar fi numărul de straturi, culoarea măștii, grosimea etc. În partea dreaptă, puteți alege țara dvs. și opțiunea de transport preferată. Aceasta vă va arăta timpul de plată și suma totală care trebuie plătită. Am ales DHL și suma mea totală este de 26 USD, dar dacă sunteți client pentru prima dată, prețurile vor scădea la checkout. Apoi faceți clic pe Adăugare în coș și apoi faceți clic pe Verificați acum.
Acum, puteți face clic pe încărcați fișierul Gerber făcând clic pe „Încărcați Gerber” și apoi faceți clic pe cumpărați.
În pagina următoare, puteți introduce adresa de expediere și puteți verifica prețul final pe care trebuie să îl plătiți pentru PCB. Puteți apoi să revizuiți comanda și apoi să faceți clic pe trimitere pentru a efectua plata.
Odată confirmată comanda, vă puteți așeza și retransmite pentru ca PCB-ul dvs. să ajungă la ușa dumneavoastră. Am primit comanda după câteva zile și apoi ambalajul a fost îngrijit așa cum se arată mai jos.
Calitatea PCB-ului a fost bună întotdeauna, după cum puteți vedea în imaginile de mai jos. Partea superioară și partea inferioară a plăcii sunt prezentate mai jos.
Odată ce ați obținut placa, puteți continua asamblarea tuturor componentelor. Tabloul meu finit arată așa cum se arată mai jos.
Apoi, puteți încărca codul și porni modulul pentru a verifica cum funcționează. Codul complet pentru acest proiect este dat în partea de jos a acestei pagini. Explicația codului este următoarea.
Cod Arduino pentru încărcare DC reglabilă
Codul este destul de simplu. La început, am inclus fișiere antet SPI și LCD, precum și setat tensiunea logică maximă, pini de selecție a cipurilor etc.
#include
Această secțiune constă din declarațiile necesare pentru fluxul programului de numere întregi și variabile. De asemenea, setăm pinii perifericilor asociați cu Arduino Nano.
const int slaveSelectPin = 10; // Chip select PIN pin number = 0; int creștere = A2; // Mărește pin int reduce = A3; // reduce pin int current_sense = A0; // pin de sens curent int tension_sense = A1; // tensiune pin pin int state1 = 0; int state2 = 0; int Set = 0; volt plutitor = 0; float load_current = 0,0; float load_voltage = 0,0; curent plutitor = 0,0; tensiune de plutire = 0,0; LiquidCrystal lcd (7, 6, 5, 4, 3, 2); // Pinii LCD
Acesta este utilizat pentru configurarea LCD și SPI. De asemenea, direcțiile pinului sunt setate aici.
void setup () { pinMode (slaveSelectPin, OUTPUT); pinMode (creștere, INPUT); pinMode (scădere, INPUT); pinMode (current_sense, INPUT); pinMode (voltage_sense, INPUT); // inițializează SPI: SPI.begin (); // configurați numărul LCD de coloane și rânduri: lcd.begin (16, 2); // Imprimați un mesaj pe ecranul LCD. lcd.print („Încărcare digitală”); lcd.setCursor (0, 1); lcd.print ("Circuit Digest"); întârziere (2000); }
Este folosit pentru conversia valorii DAC.
void convert_DAC (valoare int nesemnată) { / * Dimensiune pas = 2 ^ n, Prin urmare 12 biți 2 ^ 12 = 4096 Pentru referință 5V, pasul va fi 5/4095 = 0,0012210012210012V sau 1mV (aproximativ) * / container int nesemnat; nesemnat int MSB; nesemnat int LSB; / * Pasul: 1, a stocat datele de 12 biți în container Să presupunem că datele sunt 4095, în binar 1111 1111 1111 * / container = valoare; / * Pasul: 2 Crearea Dummy 8 biți. Deci, împărțind 256, cei 4 biți superiori sunt capturați în LSB LSB = 0000 1111 * / LSB = container / 256; / * Pasul: 3 Trimiterea configurației cu perforarea datelor de 4 biți. LSB = 0011 0000 SAU 0000 1111. Rezultatul este 0011 1111 * / LSB = (0x30) - LSB; / * Pasul: 4 Containerul are în continuare valoarea de 21 biți. Extragerea celor 8 biți inferiori. 1111 1111 ȘI 1111 1111 1111. Rezultatul este 1111 1111 care este MSB * / MSB = 0xFF & container; / * Pasul: 4 Trimiterea datelor de 16 biți împărțind în doi octeți. * / digitalWrite (slaveSelectPin, LOW); întârziere (100); SPI.transfer (LSB); SPI.transfer (MSB); întârziere (100); // luați pinul SS ridicat pentru a deselecta cipul: digitalWrite (slaveSelectPin, HIGH); }
Această secțiune este utilizată pentru operațiile legate de detectarea curentă.
float read_current (void) { load_current = 0; for (int a = 0; a <medie; a ++) { load_current = load_current + analogRead (current_sense); } load_current = load_current / mediu; load_current = (load_current * MAX_VOLT) / 1024; load_current = (load_current / opamp_gain) / load_resistor; returnează sarcina_curent; }
Acesta este utilizat pentru citirea tensiunii de sarcină.
float read_voltage (void) { load_voltage = 0; pentru (int a = 0; a <medie; a ++) { sarcina_tensiune = sarcina_tensiune + analogRead (tensiune_sens); } load_voltage = încărcare_tensiune / medie; load_voltage = ((load_voltage * MAX_VOLT) /1024.0) * 6; retur sarcina_tensiune; }
Aceasta este bucla reală. Aici, pașii de comutare sunt măsurați și datele sunt trimise către DAC. După transmiterea datelor, se măsoară debitul curent real și tensiunea de sarcină. Ambele valori sunt, de asemenea, imprimate pe ecranul LCD.
bucla nulă () { state1 = analogRead (creștere); if (state1> 500) { întârziere (50); state1 = analogRead (creștere); if (stare1> 500) { volt = volt + 0,02; } } state2 = analogRead (scădere); if (state2> 500) { întârziere (50); state2 = analogRead (scădere); if (state2> 500) { if (volt == 0) { volt = 0; } else { volt = volt-0,02; } } } număr = volt / 0,0012210012210012; convert_DAC (număr); tensiune = citire_tensiune (); current = read_current (); lcd.setCursor (0, 0); lcd.print ("Valoarea setată"); lcd.print ("="); Set = (volt / 2) * 10000; lcd.print (Set); lcd.print ("mA"); lcd.setCursor (0, 1); lcd.print („I”); lcd.print ("="); lcd.print (curent); lcd.print ("A"); lcd.print ("V"); lcd.print ("="); lcd.print (tensiune); lcd.print ("V"); // lcd.print (load_voltage); //lcd.print("mA "); // întârziere (1000); //lcd.clear (); }
Testarea sarcinii DC reglabile
Circuitul de încărcare digital este lipit și alimentat utilizând o sursă de alimentare de 12V. Am folosit bateria cu litiu de 7.4V pe partea sursei de alimentare și am conectat un clemmetru pentru a verifica modul în care funcționează. După cum puteți vedea când curentul setat este de 300mA, circuitul extrage 300mA din baterie, care este măsurată și cu clemmetru ca 310mA.
Funcționarea completă a circuitului poate fi găsită în videoclipul legat mai jos. Sper că ați înțeles proiectul și v-a plăcut să construiți ceva util. Dacă aveți întrebări, lăsați-le în secțiunea de comentarii sau utilizați forumurile.