- Nødvendige materialer
- Arduino DC elektronisk belastningskredsløbsdiagram
- PCB Design og Gerber File
- Bestilling af dit printkort fra AllPCB
- Arduino-kode til justerbar DC-belastning
- Test af vores justerbare DC-belastning
Hvis du nogensinde har arbejdet med batterier, SMPS-kredsløb eller andre strømforsyningskredsløb, ville det ofte have forekommet, at du skal teste din strømkilde ved at indlæse den for at kontrollere, hvordan den fungerer under forskellige belastningsforhold. En enhed, der almindeligvis bruges til at udføre denne type test kaldes en konstantstrøm DC-belastning, som giver os mulighed for at justere udgangsstrømmen til din strømkilde og derefter holde den konstant, indtil den justeres igen ændres. I denne vejledning lærer vi, hvordan vi bygger vores helt egen justerbare elektroniske belastning ved hjælp af Arduino, som kan tage en maksimal indgangsspænding på 24V og dræne strøm så høj som 5A. Til dette projekt har vi brugt PCB-kort, der er fremstillet af AllPCB, en Kina-baseret professionel PCB-producent og samlingstjenesteudbyder.
I vores tidligere spændingsstyrede strømkildevejledning har vi forklaret, hvordan man bruger en operationsforstærker med en MOSFET og gør brug af et spændingsstyret strømkildekredsløb. Men i denne vejledning anvender vi det kredsløb og laver en digitalt styret strømkilde. Det er klart, at en digitalt styret strømkilde kræver et digitalt kredsløb, og for at tjene formålet bruges en Arduino NANO. Arduino NANO leverer nødvendige kontroller til DC-belastningen.
Kredsløbet består af tre dele. Den første del er Arduino Nano-sektionen, den anden del er den digitale til analoge konverter, og den tredje del er et rent analogt kredsløb, hvor der anvendes en dobbelt operationsforstærker i en enkelt pakke, som styrer belastningssektionen. Dette projekt er inspireret af et indlæg på Arduino, men kredsløbet ændres for mindre kompleksitet med grundlæggende funktioner, som alle kan bygge det.
Vores elektroniske belastning er designet til at have følgende input og output sektioner.
- To indgangskontakter til at øge og mindske belastningen.
- Et LCD-display, der viser den indstillede belastning, faktiske belastning og belastningsspændingen.
- Den maksimale belastningsstrøm er begrænset til 5A.
- Den maksimale indgangsspænding er 24V for belastningen.
Nødvendige materialer
Komponenterne, der kræves for at opbygge en jævnstrømsbelastning, er anført nedenfor.
- Arduino nano
- 16x2 tegn LCD
- To fatningsstik
- Mosfet IRF540N
- Mcp4921
- Lm358
- 5watt shuntmodstand.1 ohm
- 1k
- 10k - 6stk
- Kølelegeme
- .1uF 50v
- 2k - 2stk
Arduino DC elektronisk belastningskredsløbsdiagram
I nedenstående skema har operationsforstærkeren to sektioner. Den ene er at kontrollere MOSFET, og den anden er at forstærke den registrerede strøm. Du kan også tjekke videoen nederst på denne side, der forklarer den komplette funktion af kredsløbet. Den første sektion har R12, R13 og MOSFET. R12 bruges til at reducere belastningseffekten på feedback-sektionen, og R13 bruges som Mosfet gate-modstand.
Yderligere to modstande R8 og R9 bruges til at registrere forsyningsspændingen for strømforsyningen, der vil blive stresset af denne dummy-belastning. I henhold til spændingsdelerreglen understøtter disse to modstande maksimalt 24V. Mere end 24V vil producere en spænding, der ikke passer til Arduino-benene. Så pas på ikke at tilslutte strømforsyning, der har mere end 24V udgangsspænding.
Modstanden R7 er den aktuelle belastningsmodstand her. Det er en 5 Watt,.1 Ohm modstand. I henhold til strømloven understøtter den maksimalt 7A (P = I 2 R), men for den sikre side er det klogere at begrænse belastningsstrømmen maksimalt 5A. Derfor kan maksimalt 24V, 5A belastning på nuværende tidspunkt indstilles af denne dummybelastning.
Et andet afsnit af forstærkeren er konfigureret som en forstærker. Det giver 6x forstærkning. Under strømstrømmen vises et spændingsfald. For eksempel, når 5A strøm strømmer gennem modstanden, vil spændingsfaldet være 0,5V over 0,1 Ohms shuntmodstand (V = I x R) ifølge ohmsloven. Den ikke-inverterende forstærker forstærker den til x6, derfor vil 3V være udgangen fra anden del af forstærkeren. Denne output vil blive registreret af Arduino nano analog input pin og strømmen beregnes.
Den første del af forstærkeren er konfigureret som et spændingsfølgerkredsløb, som styrer MOSFET i henhold til indgangsspændingen og får den ønskede feedback-spænding på grund af belastningsstrømmen, der strømmer gennem shuntmodstanden.
MCP4921 er den digitale til analoge konverter. DAC bruger SPI-kommunikationsprotokollen til at hente de digitale data fra enhver mikrokontrollerenhed og levere analog spændingsudgang afhængigt af den. Denne spænding er indgangen til op-amp. Vi har tidligere også lært, hvordan man bruger denne MCP4921 DAC med PIC.
På den anden side er der en Arduino Nano, der leverer de digitale data til DAC via SPI-protokol og styrer belastningen, og viser også dataene i displayet på 16x2 tegn. Der bruges yderligere to ting, det vil sige reducering og forøgelse. I stedet for at oprette forbindelse til en digital pin er den tilsluttet i de analoge ben. Derfor kan man ændre det til en anden type kontakter såsom skyderen eller den analoge indkoder. Ved at ændre koden kan man også levere rå analoge data til at kontrollere belastningen. Dette undgår også problemet med switchafbrydelse.
Endelig, ved at øge belastningen, leverer Arduino nano belastningsdataene til DAC i digitalt format, DAC leverer analoge data til operationsforstærkeren, og operationsforstærkeren styrer MOSFET i henhold til indgangsspændingen på operationsforstærkeren. Endelig, afhængigt af belastningsstrømmen gennem shuntmodstanden, vises et spændingsfald, som yderligere forstærkes af den anden kanal i LM358 og kommer af Arduino nano. Dette vises på tegnvisningen. Det samme vil ske, når brugeren trykker på faldsknappen.
PCB Design og Gerber File
Da dette kredsløb har en høj strømsti, er det et klogere valg at bruge korrekt PCB-designtaktik til at fjerne uønskede fejlsager. Således er et printkort designet til denne jævnstrømsbelastning. Jeg har brugt Eagle PCB Design Software til at designe min PCB. Du kan vælge en hvilken som helst PCB Cad-software. Det endelige designede printkort i CAD-softwaren vises i nedenstående billede,
En vigtig faktor, der skal bemærkes under designet af dette printkort, er at bruge et tykt strømplan til korrekt strømgennemstrømning over hele kredsløbet. Der er også stiksøm VIAS (tilfældige vias i jordplanet), der bruges til korrekt jordstrøm i begge lag til toppen og bunden.
Du kan også downloade Gerber-filen på dette printkort fra nedenstående link og bruge den til fabrikation.
- Download Justerbar Elektronisk DC Load Gerber-fil
Bestilling af dit printkort fra AllPCB
Når du er klar med din Gerber-fil, kan du bruge den til at få din PCB fabrikeret. Når vi taler om det, kommer sponsor til denne artikel ALLPCB op, der er kendt for deres højkvalitets PCB'er og ultrahurtig forsendelse. Bortset fra PCB-fremstilling leverer AllPCB ogsåPCB-samling og sourcing af komponenter.
Besøg for at få din PCB-ordre fra dem allpcb.com og tilmelding. Indtast derefter målene på dit printkort og den krævede mængde på startsiden som vist nedenfor. Klik derefter på Citat nu.
Nu kan du ændre de andre parametre på din PCB som antallet af lag, maskefarve, tykkelse osv. På højre side kan du vælge dit land og den foretrukne forsendelsesmulighed. Dette viser dig leveringstiden og det samlede beløb, der skal betales. Jeg har valgt DHL, og mit samlede beløb er $ 26, men hvis du er første gang kunde, sænkes priserne i kassen. Klik derefter på Tilføj til indkøbskurv, og klik derefter på check ud nu.
Nu kan du klikke på upload din Gerber-fil ved at klikke på "Upload Gerber" og derefter klikke på køb.
På den næste side kan du indtaste din leveringsadresse og kontrollere den endelige pris, du skal betale for dit printkort. Du kan derefter gennemgå din ordre og derefter klikke på send for at foretage betalingen.
Når din ordre er bekræftet, kan du læne dig tilbage og videresende til dit printkort ankommer lige uden for døren. Jeg modtog min ordre efter et par dage, og derefter var emballagen pæn som vist nedenfor.
Kvaliteten af printkortet var som altid godt, som du selv kan se på nedenstående billeder. Over- og undersiden af tavlen er vist nedenfor.
Når du har fået dit bord, kan du fortsætte med at samle alle komponenterne. Mit færdige bord ser ud som dette vist nedenfor.
Dernæst kan du uploade koden og tænde for modulet for at kontrollere, hvordan det fungerer. Den komplette kode for dette projekt findes nederst på denne side. Forklaringen på koden er som følger.
Arduino-kode til justerbar DC-belastning
Koden er ret enkel. Først inkluderede vi SPI- og LCD-headerfiler samt indstillede den maksimale logiske spænding, chipvalgstifter osv.
#omfatte
Dette afsnit består af krævede programflowrelaterede erklæringer om heltal og variabler. Vi indstiller også de tilknyttede perifere enheder med Arduino Nano.
const int slaveSelectPin = 10; // Chip vælg pin int nummer = 0; int stigning = A2; // Forøg pin int-fald = A3; // mindske pin int current_sense = A0; // nuværende følelse pin int voltage_sense = A1; // spændingsfølsom pin int-tilstand1 = 0; int-tilstand2 = 0; int Set = 0; float volt = 0; float load_current = 0.0; float load_voltage = 0.0; flydestrøm = 0,0; flydespænding = 0,0; LiquidCrystal lcd (7, 6, 5, 4, 3, 2); // LCD-stifter
Dette bruges til opsætning af LCD og SPI. Også pin-retningerne er angivet her.
ugyldig opsætning () { pinMode (slaveSelectPin, OUTPUT); pinMode (stigning, INPUT); pinMode (fald, INPUT); pinMode (current_sense, INPUT); pinMode (voltage_sense, INPUT); // initialiser SPI: SPI.begin (); // opsæt LCD's antal kolonner og rækker: lcd.begin (16, 2); // Udskriv en besked til LCD'et. lcd.print ("Digital belastning"); lcd.setCursor (0, 1); lcd.print ("Circuit Digest"); forsinkelse (2000); }
Det bruges til konvertering af DAC-værdien.
ugyldig convert_DAC (usigneret int-værdi) { / * Trinstørrelse = 2 ^ n, Derfor 12bit 2 ^ 12 = 4096 For 5V-reference vil trinnet være 5/4095 = 0,0012210012210012V eller 1mV (ca.) * / usigneret int-container; usigneret int MSB; usigneret int LSB; / * Trin: 1, lagret 12 bit data i beholderen Antag at data er 4095, i binær 1111 1111 1111 * / container = værdi; / * Trin: 2 Oprettelse af dummy 8 bit. Så ved at dividere 256 fanges de øvre 4 bits i LSB LSB = 0000 1111 * / LSB = container / 256; / * Trin: 3 Afsendelse af konfigurationen med stansning af 4-bit data. LSB = 0011 0000 ELLER 0000 1111. Resultatet er 0011 1111 * / LSB = (0x30) - LSB; / * Trin: 4 Beholder har stadig 21bit-værdien. Udpakning af de nederste 8 bits. 1111 1111 OG 1111 1111 1111. Resultatet er 1111 1111, som er MSB * / MSB = 0xFF & container; / * Trin: 4 Afsendelse af 16bits-data ved at opdele i to byte. * / digitalWrite (slaveSelectPin, LOW); forsinkelse (100); SPI.transfer (LSB); SPI.transfer (MSB); forsinkelse (100); // tag SS-stiften højt for at fravælge chippen: digitalWrite (slaveSelectPin, HIGH); }
Dette afsnit bruges til aktuelle sensing-relaterede operationer.
float read_current (void) { load_current = 0; for (int a = 0; a <gennemsnit; a ++) { load_current = load_current + analogRead (current_sense); } load_current = load_current / gennemsnit; load_current = (load_current * MAX_VOLT) / 1024; load_current = (load_current / opamp_gain) / load_resistor; return load_current; }
Dette bruges til aflæsning af belastningsspændingen.
flyde read_voltage (ugyldig) { load_voltage = 0; for (int a = 0; a <gennemsnit; a ++) { load_voltage = load_voltage + analogRead (voltage_sense); } load_voltage = load_voltage / gennemsnit; load_voltage = ((load_voltage * MAX_VOLT) /1024.0) * 6; return load_voltage; }
Dette er selve sløjfen. Her måles skiftetrin, og dataene sendes til DAC. Efter transmission af data måles den aktuelle strømning og belastningsspændingen. Begge værdier er også endelig udskrevet på LCD'et.
ugyldig sløjfe () { state1 = analogRead (stigning); hvis (tilstand1> 500) { forsinkelse (50); state1 = analogRead (stigning); hvis (tilstand1> 500) { volt = volt + 0,02; } } tilstand2 = analogRead (formindskelse); hvis (tilstand2> 500) { forsinkelse (50); state2 = analogRead (formindskelse); hvis (tilstand2> 500) { hvis (volt == 0) { volt = 0; } andet { volt = volt-0,02; } } } antal = volt / 0,0012210012210012; convert_DAC (antal); spænding = read_voltage (); nuværende = read_current (); lcd.setCursor (0, 0); lcd.print ("Set Value"); lcd.print ("="); Set = (volt / 2) * 10000; lcd.print (sæt); lcd.print ("mA"); lcd.setCursor (0, 1); lcd.print ("I"); lcd.print ("="); lcd.print (nuværende); lcd.print ("A"); lcd.print ("V"); lcd.print ("="); lcd.print (spænding); lcd.print ("V"); // lcd.print (load_voltage); //lcd.print("mA "); // forsinkelse (1000); //lcd.clear (); }
Test af vores justerbare DC-belastning
Det digitale belastningskredsløb loddes og tændes ved hjælp af en 12V strømkilde. Jeg brugte mit 7,4 V Lithium-batteri på strømkildesiden og tilsluttede en klemmemåler for at kontrollere, hvordan det fungerer. Som du kan se, når den indstillede strøm er 300mA, trækker kredsløbet 300mA fra batteriet, som også måles med klemmemåler som 310mA.
Den komplette bearbejdning af kredsløbet kan findes i videoen, der er linket nedenfor. Håber du forstod projektet og nød at bygge noget nyttigt. Hvis du har spørgsmål, skal du lade dem være i kommentarsektionen eller bruge forummet.