Tutorial · Beginner · 30 min lezen
A4988-bedrading en Vref: stel de stroomgrens van de motor in
Bedraad een A4988 op een Arduino en NEMA 17 en stel de stroomgrens in met een multimeter. Vref-formule, meetweerstand-valkuil en de prijs van overslaan.
Waar de driver werkelijk voor is
Een A4988 is geen schakelaar. Het is een stroomregelaar die toevallig ook schakelt.
Dat onderscheid telt, want een stappenmotorwikkeling is een laagohmige inductie — 2 tot 4 ohm is gangbaar. Sluit een wikkeling van 2,8 Ω rechtstreeks aan op 24 V en de wet van Ohm zegt 8,6 A, wat de motor in seconden vernietigt. De taak van de driver is de voeding duizenden keren per seconde aan en uit te hakken, zodat de gemiddelde stroom uitkomt op een waarde die jij kiest, en daarna die stroom tussen de twee wikkelingen te laten wisselen in het patroon dat het veld doet draaien.
De driver moet dus één getal te horen krijgen: hoeveel stroom per fase. Dat is de stroomgrens, en die instellen is de enige afstelling op het bord. Al het andere — microstappen, richting, enable — is een pin die je één keer zet.
Bedraden
| A4988-pin | Gaat naar | Opmerking |
|---|---|---|
| VMOT | motorvoeding 8–35 V | Niet de 5 V van de Arduino. Nooit. |
| GND (naast VMOT) | aarde van de motorvoeding | de retour voor hoge stroom |
| VDD | 5 V van de Arduino | logische voeding, een paar milliampère |
| GND (naast VDD) | GND van de Arduino | moet aarde delen met de motorvoeding |
| 1A, 1B | één motorwikkeling | hoe dan ook om — het keert alleen de richting om |
| 2A, 2B | de andere motorwikkeling | de verkeerde koppeling is de dodelijke fout |
| STEP | een willekeurige Arduino-uitgang | één puls, één microstap |
| DIR | een willekeurige Arduino-uitgang | hoog of laag kiest de richting |
| ENABLE | GND, of een Arduino-pin | actief laag: aan aarde hangen om te bekrachten |
| RESET, SLEEP | aan elkaar verbonden | beide moeten hoog zijn; doorbruggen regelt dat |
| MS1, MS2, MS3 | zie de tabel hieronder | zwevend betekent volledige stap |
Twee bedradingsregels dragen vrijwel al het risico:
- Een 100 µF elektrolytcondensator over VMOT en GND, dicht bij het bord. Niet optioneel. De datasheet en de documentatie van elke drager zeggen dat, en de reden is dat de chopper stroom in scherpe bursts trekt; zonder bulkcapaciteit in de buurt verandert de inductie van de voedingsleidingen die bursts in spanningspieken die de 35 V-classificatie van de chip overschrijden. Borden sterven bij het inschakelen, niet tijdens het gebruik, en dat is meestal de reden.
- Haal de motor nooit los terwijl de driver onder spanning staat. Het onderbreken van een bekrachte wikkeling levert een grote inductieve piek die nergens heen kan. Schakel eerst uit, elke keer.
Zijn de vier draden van de motor niet gelabeld, bepaal de paren dan met een multimeter: binnen een wikkeling meet je enkele ohms, tussen wikkelingen meet je een open stroomkring. Koppel ze op basis van continuïteit en verbind vervolgens het ene paar met 1A/1B en het andere met 2A/2B.
De stroomgrens instellen
Op het bord zit een potmeter, en draaien eraan verandert een referentiespanning die de chip vergelijkt met de spanning over zijn meetweerstanden. Die referentie — Vref — meet je tussen de loper van de potmeter en aarde.
De formule op een A4988 is:
Vref = I_phase × R_sense × 8
Dit is de valkuil die mensen motoren kost. R_sense is niet op elk bord hetzelfde. Dragers worden geleverd met meetweerstanden van 0,1 Ω of 0,05 Ω, en het antwoord van de formule verschilt dan met een factor twee:
| Meetweerstand | Markering op het bord | Vref bij 1,0 A | Vref bij 1,2 A | Vref bij 1,5 A |
|---|---|---|---|---|
| 0,1 Ω | R100 |
0,80 V | 0,96 V | 1,20 V |
| 0,05 Ω | R050 |
0,40 V | 0,48 V | 0,60 V |
| 0,068 Ω | R068 |
0,54 V | 0,65 V | 0,82 V |
Lees de markering op de twee zwarte SMD-weerstanden onderaan het bord voordat je iets berekent. Stel je 1,2 V in op een bord met 0,05 Ω-weerstanden, dan heb je net 3 A gevraagd door een motor van 1,7 A.
De procedure:
- Voed het bord van stroom — VMOT aangesloten, motor losgekoppeld. De chip heeft motorvoltage nodig om te regelen, maar je hebt de motor niet nodig om te draaien.
- Zoek de nominale fasestroom van de motor op. Een gangbare NEMA 17 is 1,5 A of 1,7 A.
- Neem daarvan 70–85% als je doel. De nominale stroom gaat uit van de koeling uit de datasheet die je niet hebt, en de laatste 20% van de stroom levert heel weinig koppel op terwijl hij veel warmte produceert.
- Bereken Vref uit de formule en uit de meetweerstand die je werkelijk hebt.
- Zet de zwarte meetpunt op een aardepin en de rode op de metalen schroef van de potmeter. Draai hem langzaam — een kwart slag is al een grote verandering — tot de meter je getal afleest.
Het loont een kleine keramische schroevendraaier te gebruiken. Een metalen die de potmeter naar iets anders overbrugt terwijl het bord onder spanning staat, is een gebruikelijke manier om een driver te vernielen.
Het is de moeite waard het ronduit te zeggen: de stroomgrens is de T_peak in de koppelvergelijking die al het gedrag van een stappenmotor bepaalt. Stel je hem laag, dan loopt de motor bij dezelfde belasting verder achter en verliest hij sneller stappen. Stel je hem hoog, dan draait de motor warm voor koppel dat hij misschien niet nodig heeft. Het is het ene getal waar je bewust over moet nadenken.
Microstap-pins
MS1, MS2 en MS3 hebben interne pull-downs, dus alles wat je zwevend laat leest laag:
| MS1 | MS2 | MS3 | Resolutie | Stappen per omwenteling |
|---|---|---|---|---|
| laag | laag | laag | volledige stap | 200 |
| hoog | laag | laag | halve stap | 400 |
| laag | hoog | laag | kwart stap | 800 |
| hoog | hoog | laag | achtste stap | 1600 |
| hoog | hoog | hoog | zestiende stap | 3200 |
De meeste builds doorverbinden alle drie hoog en laten het zo. De reden is niet nauwkeurigheid — microstappen levert onder belasting geen nauwkeurigheid — maar dat zestien microstappen de motor niet meer aan elke stap hoort nazingen, wat de machine stil maakt en voorkomt dat de rimpeling in het werk zichtbaar wordt. De prijs is dat je microcontroller nu zestien keer zoveel pulsen per millimeter moet geven, wat op een Arduino Uno boven ongeveer 10 000 stappen per seconde een echte beperking is.
Het aansturen
De minimale nuttige sketch. Merk op dat er hier geen bibliotheek is: een stap is een puls, en dat is werkelijk alles wat het is.
const int STEP_PIN = 3;
const int DIR_PIN = 4;
const int EN_PIN = 5; // active LOW
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW); // energise the coils
digitalWrite(DIR_PIN, HIGH);
}
void loop() {
// One revolution at 1/16 stepping = 3200 pulses.
for (int i = 0; i < 3200; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(2); // datasheet minimum is 1 us
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(300); // this delay IS the speed
}
delay(1000);
}
Die code werkt en is tegelijk precies wat je niet zou moeten opleveren, om twee redenen.
De eerste is dat de stapfrequentie meteen van nul naar vol springt. Vraag een frequentie boven de aanloopsgrens van de motor en hij zoemt en komt nergens — met de standaardwaarden in de stappenmotor-simulator kost volle snelheid vanaf stilstand 280 volle stappen op een verplaatsing van 60 mm en blijft de as op 4 mm staan. Dezelfde verplaatsing met een helling komt exact op doel. Dat is het verschil dat een acceleratieprofiel maakt, en het is geen verfijning.
De tweede is dat delayMicroseconds blokkeert. Terwijl de lus aan het stappen is, draait er niets anders op de microcontroller — geen eindstopcontrole, geen seriële uitvoer, geen tweede as. Voor alles wat serieus is, gebruik je het niet-blokkerende timingpatroon of geef je het aan AccelStepper, dat de helling en de planning voor je implementeert:
#include <AccelStepper.h>
AccelStepper axis(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW);
axis.setMaxSpeed(8000); // steps/s -> 100 mm/s at 80 steps/mm
axis.setAcceleration(16000); // steps/s2 -> 200 mm/s2
axis.moveTo(80 * 50); // 50 mm
}
void loop() {
axis.run(); // returns immediately; call it constantly
}
setMaxSpeed en setAcceleration geven je een trapeziumprofiel en niets anders — er is geen optie voor een S-curve. Wil je een jerkbegrensd profiel, dan genereer je de setpoint zelf.
A4988 of één van de alternatieven?
| Driver | Stroom | Microstappen | Ruis | Kies hem wanneer |
|---|---|---|---|---|
| A4988 | 1 A ongekoeld, ~1,5 A gekoeld | tot 1/16 | hoorbaar | goedkoop, overal verkrijgbaar, goed gedocumenteerd |
| DRV8825 | 1,5 A ongekoeld, ~2,2 A gekoeld | tot 1/32 | hoorbaar | je meer stroom of fijnere stappen nodig hebt |
| TMC2208 | ~1,2 A | tot 1/256 | vrijwel stil | ruis ertoe doet; dit is de reden dat printers zijn overgestapt |
| TMC2209 | ~1,7 A | tot 1/256 | vrijwel stil | idem, plus sensorloze homing |
| ULN2003 + 28BYJ-48 | ~0,3 A | halve stap | zoemend | een demonstratie op speelgoedschaal, geen machine |
De DRV8825 is pin-compatibel maar de formule voor Vref is anders — Vref = I × 0.5 — en de potmeter draait de andere kant op. Er zomaar een inwisselen zonder de formule opnieuw te lezen is een klassieke manier om een motor te laten doorbranden.
De TMC-drivers zijn hun geld waard zodra een machine ergens staat waar je het hoort. Ze doen dezelfde taak met een gladdere stroomgolfvorm, en daarom maakt een printer ermee alleen ventilatorruis in plaats van motorruis.
Het gaat mis
| Symptoom | Oorzaak | Oplossing |
|---|---|---|
| Motor trilt maar draait niet | wikkelingparen verkeerd bedraad | bepaal de paren op continuïteit en bedraad opnieuw |
| Er gebeurt helemaal niets | ENABLE zwevend of hoog, of RESET/SLEEP laag | hang ENABLE aan aarde; doorbrug RESET naar SLEEP |
| Driver wordt te heet om aan te raken en schakelt dan uit | stroomgrens te hoog | meet Vref opnieuw; voeg een koellichaam en luchtstroom toe |
| Motor is heet maar de driver is prima | normaal | 60–80 °C op de behuizing is te verwachten |
| Alleen bij snelle verplaatsingen gaan stappen verloren | voedingsspanning te laag voor die snelheid | verhoog VMOT — meer stroom helpt niet |
| Bij harde acceleraties gaan stappen verloren | helling te sterk, of stroom te laag | verlaag de acceleratie, of verhoog Vref richting nominaal |
| Bord stierf op het moment dat het werd ingeschakeld | ontbrekende bulkcondensator op VMOT | 100 µF elektrolyt, dicht bij de pinnen |
| Motor houdt positie maar draait ruw | volledig stappen | doorbrug MS1–MS3 hoog voor 1/16 |
| Weerstand meet open over een “paar” | die twee draden komen uit verschillende wikkelingen | maak de paren opnieuw |
Volgende
Met de driver ingesteld is de resterende vraag hoeveel pulsen een millimeter verplaatsing waard is — en dat hangt volledig af van wat de as aandrijft. Dat is stappen per millimeter, en dat is het getal waarop elk ander deel van de machine gekalibreerd wordt.
Verken de graaf
Onderdeel van deze bouwprojecten
Projecten en leerroutes waarin deze tutorial voorkomt.
Verder lezen