- Vereiste materialen
- Arduino DC elektronisch belastingscircuitschema
- PCB-ontwerp en Gerber-bestand
- Uw PCB bestellen bij AllPCB
- Arduino-code voor instelbare DC-belasting
- Testen van onze verstelbare DC-belasting
Als u ooit met batterijen, SMPS-circuits of andere stroomvoorzieningscircuits heeft gewerkt, zou het vaak zijn voorgekomen dat u uw stroombron moest testen door deze te laden om te controleren hoe deze presteert onder verschillende laadomstandigheden. Een apparaat dat vaak wordt gebruikt om dit type test uit te voeren, wordt een constante stroom gelijkstroombelasting genoemd, waarmee we de uitgangsstroom van uw stroombron kunnen aanpassen en deze vervolgens constant kunnen houden totdat deze opnieuw wordt aangepast. In deze tutorial zullen we leren hoe we onze eigen instelbare elektronische belasting kunnen bouwen met Arduino, die een maximale ingangsspanning van 24 V kan aannemen en een afvoerstroom van wel 5 A. Voor dit project hebben we printplaten gebruikt die zijn vervaardigd door AllPCB, een in China gevestigde professionele PCB-fabricage- en assemblagedienstverlener.
In onze vorige tutorial voor spanningsgestuurde stroombronnen hebben we uitgelegd hoe je een operationele versterker met een MOSFET gebruikt en hoe je een spanningsgestuurd stroombroncircuit gebruikt. Maar in deze tutorial zullen we dat circuit toepassen en een digitaal gestuurde stroombron maken. Het is duidelijk dat een digitaal gestuurde stroombron een digitaal circuit nodig heeft en daarvoor wordt een Arduino NANO gebruikt. De Arduino NANO biedt de benodigde bedieningselementen voor de DC-belasting.
Het circuit bestaat uit drie delen. Het eerste deel is de Arduino Nano-sectie, het tweede deel is de digitaal naar analoog-omzetter en het derde deel is een puur analoog circuit waarbij een dubbele operationele versterker in een enkel pakket wordt gebruikt die het belastingsgedeelte regelt. Dit project is geïnspireerd door een bericht op Arduino, maar het circuit is gewijzigd voor minder complexiteit met basisfuncties voor iedereen om het te bouwen.
Onze elektronische belasting is ontworpen met de volgende invoer- en uitvoersecties.
- Twee ingangsschakelaars voor het verhogen en verlagen van de belasting.
- Een LCD die de ingestelde belasting, de werkelijke belasting en de belastingsspanning weergeeft.
- De maximale laadstroom is beperkt tot 5A.
- De maximale ingangsspanning is 24 V voor de belasting.
Vereiste materialen
De componenten die nodig zijn om een elektronische DC-belasting te bouwen, worden hieronder vermeld.
- Arduino nano
- LCD-scherm van 16x2 tekens
- Twee barrel socket
- Mosfet IRF540N
- Mcp4921
- Lm358
- 5 watt shuntweerstand 0,1 ohm
- 1k
- 10k - 6st
- Koellichaam
- .1uF 50v
- 2k - 2 stuks
Arduino DC elektronisch belastingscircuitschema
In het onderstaande schema heeft de operationele versterker twee secties. Een daarvan is om de MOSFET te besturen en de andere is om de gedetecteerde stroom te versterken. Je kunt ook de video onderaan deze pagina bekijken waarin de volledige werking van het circuit wordt uitgelegd. De eerste sectie heeft R12, R13 en MOSFET. R12 wordt gebruikt om het belastingseffect op de feedbacksectie te verminderen en R13 wordt gebruikt als de Mosfet-poortweerstand.
Twee extra weerstanden R8 en R9 worden gebruikt om de voedingsspanning van de voeding te detecteren die door deze schijnbelasting wordt belast. Volgens de regel van de spanningsdeler ondersteunen deze twee weerstanden maximaal 24 V. Meer dan 24 V zal een spanning produceren die niet geschikt is voor de Arduino-pinnen. Pas dus op dat u geen voeding aansluit met een uitgangsspanning van meer dan 24 V.
De weerstand R7 is hier de werkelijke belastingsweerstand. Het is een weerstand van 5 Watt, 0,1 Ohm. Volgens de machtswet ondersteunt het maximaal 7A (P = I 2 R), maar voor de veilige kant is het verstandiger om de laadstroom maximaal 5A te beperken. Daarom kan momenteel een maximale belasting van 24 V, 5 A worden ingesteld door deze dummy-belasting.
Een ander deel van de versterker is geconfigureerd als versterkingsversterker. Het levert 6x winst op. Tijdens de stroom van stroom zal een spanningsval optreden. Als er bijvoorbeeld 5A stroom door de weerstand vloeit, zal de spanningsval 0,5 V zijn over de shuntweerstand van 0,1 Ohm (V = I x R) volgens de wet van ohm. De niet-inverterende versterker zal het versterken tot x6, daarom is 3V de uitvoer van het tweede deel van de versterker. Deze output wordt gedetecteerd door de Arduino nano analoge input-pin en de stroom wordt berekend.
Het eerste deel van de versterker is geconfigureerd als een spanningsvolgcircuit dat de MOSFET bestuurt volgens de ingangsspanning en de gewenste terugkoppelspanning krijgt vanwege de belastingsstroom die door de shuntweerstand vloeit.
MCP4921 is de digitaal naar analoog converter. De DAC gebruikt het SPI-communicatieprotocol om de digitale gegevens van elke microcontrollereenheid te krijgen en afhankelijk daarvan een analoge spanningsoutput te leveren. Deze spanning is de ingang van de op-amp. We hebben eerder ook geleerd hoe je deze MCP4921 DAC met PIC kunt gebruiken.
Aan de andere kant is er een Arduino Nano die de digitale gegevens aan de DAC levert via het SPI-protocol en de belasting bestuurt, en de gegevens ook weergeeft in het display van 16x2 tekens. Er worden twee extra dingen gebruikt, dat is de knop voor verlagen en verhogen. In plaats van verbinding te maken met een digitale pin, wordt deze aangesloten op de analoge pinnen. Daarom kan men het veranderen naar een ander type schakelaars, zoals een schuifregelaar of analoge encoder. Door de code te wijzigen, kan men ook ruwe analoge gegevens leveren om de belasting te regelen. Dit voorkomt ook het probleem van het debouncen van de switch.
Ten slotte zal de Arduino nano, door de belasting te verhogen, de belastingsgegevens in digitaal formaat aan de DAC leveren, de DAC zal analoge gegevens aan de operationele versterker leveren en de operationele versterker zal de MOSFET besturen volgens de ingangsspanning van de operationele versterker.. Ten slotte, afhankelijk van de belastingsstroom die door de shuntweerstand vloeit, zal er een spanningsval optreden die verder zal worden versterkt door het tweede kanaal van LM358 en door de Arduino nano. Dit wordt weergegeven op de karakterweergave. Hetzelfde gebeurt wanneer de gebruiker op de afnametoets drukt.
PCB-ontwerp en Gerber-bestand
Omdat dit circuit een hoog stroompad heeft, is het een verstandiger keuze om de juiste PCB-ontwerptactieken te gebruiken om ongewenste storingsgevallen te verwijderen. Voor deze DC-belasting is dus een printplaat ontworpen. Ik heb Eagle PCB Design Software gebruikt om mijn PCB te ontwerpen. U kunt elke PCB Cad-software kiezen. De uiteindelijk ontworpen PCB in de CAD-software wordt weergegeven in de onderstaande afbeelding,
Een belangrijke factor om op te merken tijdens het ontwerp van deze PCB is het gebruik van een dik voedingsvlak voor een goede stroom door het hele circuit. Er is ook grondstiksel VIAS (willekeurige via's in het grondvlak) die worden gebruikt voor een goede grondstroom in zowel de lagen naar boven als naar beneden.
U kunt ook het Gerber-bestand van deze PCB downloaden via de onderstaande link en gebruiken voor fabricage.
- Download het verstelbare elektronische DC Load Gerber-bestand
Uw PCB bestellen bij AllPCB
Als u klaar bent met uw Gerber-vijl, kunt u deze gebruiken om uw PCB te laten fabriceren. Daarover gesproken, komt de sponsor van dit artikel ALLPCB naar voren, die bekend staat om hun hoogwaardige PCB's en ultrasnelle verzending. Behalve PCB Manufacturing biedt AllPCB ookPCB-assemblage en sourcing van componenten.
Ga naar om uw PCB-bestelling van hen te krijgen allpcb.com en meld u aan. Voer vervolgens op de startpagina de afmetingen van uw printplaat en het benodigde aantal in, zoals hieronder weergegeven. Klik dan op Nu citeren.
Nu kunt u de andere parameters van uw PCB wijzigen, zoals het aantal lagen, maskerkleur, dikte, enz. Aan de rechterkant kunt u uw land en de gewenste verzendoptie kiezen. Dit toont u de doorlooptijd en het totale te betalen bedrag. Ik heb voor DHL gekozen en mijn totaalbedrag is $ 26, maar als je voor het eerst klant bent, gaan de prijzen omlaag bij het afrekenen. Klik vervolgens op Toevoegen aan winkelwagen en vervolgens op Nu afrekenen.
Nu kunt u klikken op uw Gerber-bestand uploaden door op "Gerber uploaden" te klikken en vervolgens op kopen te klikken.
Op de volgende pagina kunt u uw verzendadres invoeren en de uiteindelijke prijs controleren die u voor uw printplaat moet betalen. U kunt vervolgens uw bestelling bekijken en vervolgens op verzenden klikken om de betaling uit te voeren.
Zodra uw bestelling is bevestigd, kunt u achterover leunen en doorgeven dat uw PCB voor de deur staat. Ik ontving mijn bestelling na een paar dagen en toen was de verpakking netjes zoals hieronder weergegeven.
De kwaliteit van de print was zoals altijd goed, zoals u op de onderstaande foto's kunt zien. De bovenzijde en de onderzijde van het bord zijn hieronder weergegeven.
Zodra u uw bord heeft, kunt u doorgaan met het monteren van alle componenten. Mijn voltooide bord ziet er ongeveer zo uit als hieronder.
Vervolgens kunt u de code uploaden en de module inschakelen om te controleren hoe deze werkt. De volledige code voor dit project staat onderaan deze pagina. De uitleg van de code is als volgt.
Arduino-code voor instelbare DC-belasting
De code is vrij eenvoudig. In eerste instantie hebben we SPI- en LCD-headerbestanden opgenomen en de maximale logische spanning, chipselectiepennen, enz.
# omvatten
Deze sectie bestaat uit verplichte declaraties van gehele getallen en variabelen die betrekking hebben op de programmastroom. Ook stellen we de bijbehorende randapparatuurpinnen in met Arduino Nano.
const int slaveSelectPin = 10; // Chip select pin int nummer = 0; int toename = A2; // Verhoog pin int afname = A3; // verlagen pin int current_sense = A0; // current sense pin int voltage_sense = A1; // spanningsdetectie pin int state1 = 0; int state2 = 0; int Set = 0; float volt = 0; zweven load_current = 0.0; vlotter load_voltage = 0,0; vlotterstroom = 0,0; zwevende spanning = 0,0; LiquidCrystal lcd (7, 6, 5, 4, 3, 2); // LCD-pinnen
Dit wordt gebruikt voor het instellen van LCD en SPI. Ook zijn de pinrichtingen hier ingesteld.
void setup () { pinMode (slaveSelectPin, OUTPUT); pinMode (verhogen, INPUT); pinMode (verlagen, INPUT); pinMode (current_sense, INPUT); pinMode (voltage_sense, INPUT); // initialiseer SPI: SPI.begin (); // stel het aantal kolommen en rijen van de LCD in: lcd.begin (16, 2); // Druk een bericht af op het LCD-scherm. lcd.print ("Digital Load"); lcd.setCursor (0, 1); lcd.print ("Circuit Digest"); vertraging (2000); }
Het wordt gebruikt voor het converteren van de DAC-waarde.
void convert_DAC (unsigned int value) { / * Step Size = 2 ^ n, Daarom 12bit 2 ^ 12 = 4096 Voor 5V-referentie is de stap 5/4095 = 0.0012210012210012V of 1mV (ongeveer) * / unsigned int container; unsigned int MSB; unsigned int LSB; / * Stap: 1, de 12-bits gegevens in de container opgeslagen Stel dat de gegevens 4095 zijn, in het binaire bestand 1111 1111 1111 * / container = waarde; / * Stap: 2 Dummy 8 bit maken. Dus door 256 te delen, worden de bovenste 4 bits vastgelegd in LSB LSB = 0000 1111 * / LSB = container / 256; / * Stap: 3 Verzenden van de configuratie met punching van de 4 bit data. LSB = 0011 0000 OF 0000 1111. Het resultaat is 0011 1111 * / LSB = (0x30) - LSB; / * Stap: 4 Container heeft nog steeds de 21-bits waarde. Extraheren van de onderste 8 bits. 1111 1111 EN 1111 1111 1111. Het resultaat is 1111 1111 wat MSB * / MSB = 0xFF & container; / * Stap: 4 Het verzenden van de 16 bits gegevens door deze in twee bytes te verdelen. * / digitalWrite (slaveSelectPin, LOW); vertraging (100); SPI. Overdracht (LSB); SPI.overdracht (MSB); vertraging (100); // neem de SS-pin hoog om de chip te deselecteren : digitalWrite (slaveSelectPin, HIGH); }
Dit gedeelte wordt gebruikt voor bewerkingen met betrekking tot stroomdetectie.
float read_current (void) { load_current = 0; voor (int a = 0; a <gemiddelde; a ++) { load_current = load_current + analogRead (current_sense); } load_current = load_current / gemiddelde; load_current = (load_current * MAX_VOLT) / 1024; load_current = (load_current / opamp_gain) / load_resistor; return load_current; }
Dit wordt gebruikt voor het aflezen van de laadspanning.
float read_voltage (void) { load_voltage = 0; voor (int a = 0; a <gemiddeld; a ++) { load_voltage = load_voltage + analogRead (voltage_sense); } load_voltage = load_voltage / gemiddeld; load_voltage = ((load_voltage * MAX_VOLT) /1024.0) * 6; terugkeer load_voltage; }
Dit is de eigenlijke lus. Hier worden schakelstappen gemeten en worden de gegevens naar de DAC gestuurd. Na het verzenden van de gegevens worden de actuele stroom en de belastingsspanning gemeten. Beide waarden worden uiteindelijk ook op het LCD-scherm afgedrukt.
void loop () { state1 = analogRead (verhogen); if (state1> 500) { delay (50); state1 = analogRead (verhogen); if (state1> 500) { volt = volt + 0,02; } } state2 = analogRead (verlagen); if (state2> 500) { vertraging (50); state2 = analogRead (verlagen); if (state2> 500) { if (volt == 0) { volt = 0; } anders { volt = volt-0,02; } } } getal = volt / 0.0012210012210012; convert_DAC (getal); voltage = read_voltage (); current = read_current (); lcd.setCursor (0, 0); lcd.print ("Set Value"); lcd.print ("="); Set = (volt / 2) * 10000; lcd.print (Set); lcd.print ("mA"); lcd.setCursor (0, 1); lcd.print ("I"); lcd.print ("="); lcd.print (huidig); lcd.print ("A"); lcd.print ("V"); lcd.print ("="); lcd.print (spanning); lcd.print ("V"); // lcd.print (load_voltage); //lcd.print("mA "); // vertraging (1000); //lcd.clear (); }
Testen van onze verstelbare DC-belasting
Het digitale laadcircuit wordt gesoldeerd en gevoed met behulp van een 12V-voedingsbron. Ik heb mijn 7.4V lithiumbatterij aan de stroombronzijde gebruikt en een stroomtang aangesloten om te controleren hoe deze werkt. Zoals u kunt zien wanneer de ingestelde stroom 300mA is, verbruikt het circuit 300mA van de batterij, die ook wordt gemeten door een stroomtang als 310mA.
De volledige werking van het circuit is te vinden in de onderstaande video. Ik hoop dat je het project hebt begrepen en het leuk vond om iets nuttigs te bouwen. Als je vragen hebt, laat ze dan achter in het commentaargedeelte of gebruik de forums.