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.

Een A4988-dragerbord van boven getekend met aan elke kant acht vergulde contactvlakken. De linker kolom contacten leest ENABLE, MS1, MS2, MS3, RESET, SLEEP, STEP en DIR, waarbij STEP en DIR zijn uitgelicht. De rechter kolom leest VMOT, GND, 2B, 2A, 1A, 1B, VDD en GND, waarbij VMOT in rood is uitgelicht. Een trimmerpotentiaometer bovenaan is gelabeld als de VREF-trimpot om met een meter op te meten, en een geribbelde koelplaat bedekt de driverchip. Twee kleine meetweerstanden onderaan het bord worden aangeduid als R100 is gelijk aan 0,1 ohm of R050 is gelijk aan 0,05 ohm, met de waarschuwing om de jouwe te lezen voordat je iets berekent.
Zestien contacten, één trimmer en twee minuscule weerstanden die de rekenkunde veranderen. STEP en DIR zijn de enige twee pinnen die je sketch tijdens gebruik aanraakt; al het andere is configuratie. SVG downloaden

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:

  1. 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.
  2. Zoek de nominale fasestroom van de motor op. Een gangbare NEMA 17 is 1,5 A of 1,7 A.
  3. 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.
  4. Bereken Vref uit de formule en uit de meetweerstand die je werkelijk hebt.
  5. 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

Bronnen