Articles

hvordan styre en stepper motor Med a4988 driver Og Arduino

denne artikkelen inneholder alt Du trenger å vite om å kontrollere en stepper motor Med a4988 stepper motor driver Og Arduino. Jeg har tatt med et koblingsskjema, en tutorial på hvordan du angir gjeldende grense og mange eksempelkoder.Selv om du kan bruke denne driveren uten Et arduino-bibliotek, anbefaler jeg at du også tar en titt på eksempelkoden For AccelStepper-biblioteket på slutten av denne opplæringen. Dette biblioteket er ganske enkelt å bruke og kan forbedre ytelsen til maskinvaren.Etter hvert eksempel bryter jeg ned og forklarer hvordan koden fungerer, så du bør ikke ha problemer med å endre den etter dine behov.

hvis du ønsker å lære mer om andre stepper motor drivere, så artiklene nedenfor kan være nyttig:

  • How to control a stepper motor with DRV8825 driver and Arduino
  • 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino Tutorial
  • How to control a Stepper Motor with Arduino Motor Shield Rev3
  • TB6600 Stepper Motor Driver with Arduino Tutorial

Supplies

Hardware components

A4988 stepper motor driver × 1 Amazon
AliExpress
NEMA 17 stepper motor × 1 Amazon
Arduino Uno Rev3 × 1 Amazon
Power supply (8-35 V) × 1 Amazon
AliExpress
Breadboard × 1 Amazon
Capacitor (100 µF) × 1 Amazon
Jumper wires ~ 10 Amazon
AliExpress
USB cable type A/B × 1 Amazon

jeg liker å bruke denne driveren i kombinasjon MED ET CNC-skjold eller utvidelseskort. Et slikt skjold inneholder allerede kondensatorer og gir en enkel måte å velge microstepping oppløsning på. Det gjør kabling mye enklere og er et flott alternativ hvis du trenger en mer permanent løsning enn en brødfjel.

Tools

Small screwdriver Amazon
Multimeter Amazon
Alligator test leads (optional) Amazon

Software

Arduino IDE

Makerguides.com Er deltaker I Amazon Services LLC Associates Program, et tilknyttet annonseringsprogram designet for å gi et middel for nettsteder å tjene reklameavgifter ved å annonsere og koble til produkter på Amazon.com.

om sjåføren

i hjertet Av a4988-driveren finner du en chip laget Av Allegro MicroSystems: A4988 DMOS Microstepping Driver Med Oversetter og Overstrømsbeskyttelse. Denne integrerte motordriveren gjør grensesnitt med en mikrokontroller super enkelt, da du bare trenger to pinner for å kontrollere både hastigheten og retningen til steppermotoren.

føreren har en maksimal effektkapasitet på 35 V og ± 2 a som er flott for å kjøre små til mellomstore steppermotorer som EN nema 17 bipolar steppermotor.

Hvis du trenger å kontrollere større stepper motorer SOM NEMA 23, ta en titt PÅ tb6600 stepper motor driver. Denne driveren kan brukes med samme kode Som A4988 og har en nåværende vurdering på 3,5 A.

  • TB6600 Stepper Motor Driver Med Arduino Tutorial

a4988 driver chip har flere sikkerhetsfunksjoner innebygd som overstrøm, kortslutning, under spenning lockout, og over-temperatur beskyttelse. Du finner flere spesifikasjoner i tabellen nedenfor.

A4988 Specifications

Minimum operating voltage 8 V
Maximum operating voltage 35 V
Continuous current per phase 1 A
Maximum current per phase 2 A
Minimum logic voltage 3 V
Maximum logic voltage 5.5 V
Microstep resolution full, 1/2, 1/4, 1/8 and 1/16
Reverse voltage protection?
dimensjoner 15,5 × 20,5 mm (0,6″ × 0,8″)
Kostnad Sjekk pris

for mer informasjon kan du sjekke ut databladet her.

Forskjeller Mellom A4988 OG DRV8825

DRV8825 er ganske lik A4988, men det er noen viktige forskjeller:

  • DRV8825 tilbyr 1/32 microstepping, Mens A4988 bare går ned til 1/16-trinn. Høyere mikrostepping resulterer i jevnere, roligere drift, men er ikke alltid nødvendig.
  • gjeldende grensepotensiometer er på et annet sted
  • forholdet mellom referansespenningen og gjeldende grense er forskjellig.
  • DRV8825 krever en MINIMUM TRINNPULSVARIGHET på 1,9 µ; A4988 krever minimum 1µ.
  • DRV8825 kan brukes med en motor med høyere spenning (45 v vs 35 V). Dette betyr at det er mindre utsatt for skade FRA LC spenningstopper.
  • DRV8825 kan levere litt mer strøm enn A4988 uten ytterligere kjøling.

Merk at pinout AV DRV8825 er nøyaktig den samme som For A4988, så den kan brukes som en drop-in erstatning!

A4899 (venstre) vs DRV8825 (høyre)

Mikrosteginnstillinger

trinnmotorer har typisk en trinnstørrelse på 1,8° eller 200 trinn per omdreining, dette refererer til fulle trinn. En microstepping driver som A4988 tillater høyere oppløsninger ved å tillate mellomliggende trinn steder. Dette oppnås ved å aktivere spolene med mellomliggende strømnivåer.for eksempel vil kjøring av en motor i kvartstegsmodus gi 200-trinns per revolusjonsmotor 800 mikrotrinn per revolusjon ved å bruke fire forskjellige strømnivåer.

A4988 pinout

valgpinnene for oppløsning (trinnstørrelse) (MS1, MS2 og MS3) tillater deg for å velge en av de fem trinn oppløsninger i henhold til tabellen nedenfor.

MS1 MS2 MS3 Microstep resolution
Low Low Low Full step
High Low Low 1/2 step
Low High Low 1/4 step
High High Low 1/8 step
High High High 1/16 step

Alle tre innganger har interne 100 kΩ nedtrekksmotstander, slik at de tre microstep-utvalgspinnene kobles fra, resulterer i full-trinns modus.

JEG bruker OFTE ET CNC-skjold eller utvidelseskort i kombinasjon med disse driverne. Utvidelseskortet har 3 dip-brytere for Å sette MS1-MS3 høyt eller lavt, OG PÅ CNC-skjoldet kan du installere hoppere. Hvis du bruker driveren med en brødfjel, kan du bare bruke jumper ledninger for å koble velgeren pinnene til 5 V(dvs. gjøre DEM HØYE).

Kabling – Kobler A4988 Til Arduino og stepper motor

Koblingsskjema / skjematisk for a4988 stepper motor driver Med Arduino og stepper motor.

koblingsskjemaet / skjematisk ovenfor viser hvordan du kobler a4899-driveren til en stepper motor og Arduino.

tilkoblingene er også gitt i følgende tabell:

A4988 Connections

A4988 Connection
VMOT 8-35V
GND Motor ground
SLP RESET
RST SLP
VDD 5V
GND Logic ground
STP Pin 3
DIR Pin 2
1A, 1B, 2A, 2B Stepper motor
  • motorens strømforsyning er koblet TIL GND og VMOT (øverst til høyre).
  • de to spolene på trinnmotoren er koblet TIL 1A, 1B OG 2A, 2B (se nedenfor).
  • GND-pinnen (nederst til høyre) er koblet til mikrokontrollerens jordpinne og VDD er koblet TIL 5V.
  • stp-pinnen (trinn) og DIR-pinnen (retning) er koblet til henholdsvis digital pin 3 og 2. Du kan velge en annen digital pin hvis du vil, men disse er de jeg brukte til denne opplæringen og eksempelkoden.
  • SLP-pin er en aktiv lav inngang. Betydning, å trekke denne pinnen lavt setter sjåføren i hvilemodus, minimerer strømforbruket. RST er ogsa en aktiv lav inngang. Når du trekker lavt, ignoreres ALLE TRINNINNGANGER til du trekker den høyt. Hvis du ikke bruker pin, kan du koble den til den tilstøtende SLP / SLEEP pin for å få den høy og aktivere driveren.
  • EN (enable) pin kan kobles fra, den er trukket lavt som standard. Når denne pin-koden er satt høyt, er driveren deaktivert.

i resten av denne opplæringen har JEG forlatt MS1, MS2 OG MS3 frakoblet, slik at sjåføren opererer i full-trinns modus. Dette gjør det litt enklere å forklare koden. Normalt ville jeg bruke 1/8 eller 1/16 microstepping og koble de riktige pinnene TIL 5V (se tabellen i introduksjonen).

Advarsel

a4988 bærerkortet bruker keramiske kondensatorer med LAV ESR, noe som gjør den utsatt for destruktive LC-spenningstopper, spesielt når du bruker strømledninger lenger enn noen få tommer.

for å beskytte driveren kan du koble en elektrolytisk kondensator mellom VMOT OG GND. Pololu foreslår en kondensator på 47 µ eller mer(jeg brukte en 100 µ kondensator). Jeg liker disse utvalgsboksene Fra Amazon, på denne måten har jeg alltid noen kondensatorer av riktig størrelse på hånden.

hvordan bestemme riktig stepper motor ledninger?

hvis du ikke finner databladet til trinnmotoren din, kan det være vanskelig å finne ut hvordan du kobler motoren riktig. Jeg bruker følgende triks for å finne ut hvordan du kobler 4 wire bipolar stepper motorer:

Det eneste du trenger å identifisere er de to par ledninger som er koblet til de to spoler av motoren. Ledningene fra en spole blir koblet TIL 1A OG 1B og den andre TIL 2A OG 2B, polariteten spiller ingen rolle.

for å finne de to ledningene fra en spole, gjør følgende med motoren frakoblet:

  1. Prøv å spinne akselen til steppermotoren for hånd og legg merke til hvor vanskelig det er å snu.
  2. velg nå et tilfeldig par ledninger fra motoren og berør de bare endene sammen.
  3. Prøv Deretter å spinne akselen på steppermotoren igjen.

hvis du føler mye motstand, har du funnet et par ledninger fra samme spole. Hvis du kan spinne akselen fritt, prøv et annet par ledninger. Koble nå de to spolene til pinnene som er vist i ledningsdiagrammet ovenfor.

(hvis det fortsatt er uklart, vennligst legg igjen en kommentar nedenfor, mer info kan også bli funnet på RepRap.org wiki)

hvordan sette gjeldende grense?

Før Du begynner å programmere Arduino og begynne å bruke driveren, er det en veldig viktig ting du må gjøre som mange mennesker glemmer: sett gjeldende grense!

dette trinnet er ikke veldig komplisert, men absolutt nødvendig for å beskytte stepper motor og driver. Hvis du ikke angir en passende strømgrense, kan motoren trekke mer strøm enn den eller sjåføren kan håndtere, dette vil trolig skade en eller begge av dem.

for å angi gjeldende grense må du måle en referansespenning og justere det innebygde potensiometeret tilsvarende. Du trenger en liten skrutrekker, et multimeter for å måle referansespenningen, og alligator testledninger (valgfritt, men veldig praktisk).

gjeldende grense koblingsskjema For a4988 driver.

for å måle referansespenningen må føreren være drevet. A4988 trenger bare strøm via VDD (5V) , og DU må koble RST og SLP sammen, ellers vil sjåføren ikke slå på. Det er best å koble fra stepper motoren mens du gjør dette.

hvis du allerede har koblet opp driveren, kan du la alt, men stepper motor koblet. Du kan bruke strøm via USB-porten På Arduino.

A4988 Connection
VDD 5V
RST SLP
SLP RESET
GND Ground
Required connections to set the current limit

Current limit formula

The next step is to calculate the current limit with the following formel:

Nåværende Grense = Vref ÷ (8 × Rcs)

Rcs er den nåværende sansemotstanden. Hvis Du kjøpte En a4988-sjåfør fra Pololu før januar 2017, vil Rcs være 0.050 Ω. Drivere solgt etter det har 0.068 Ω nåværende sense motstander.

så dette betyr at For en nåværende grense PÅ 1A for et brett med 0,068 Ω nåværende sense motstander, Bør Vref være 540 mV.

nåværende sense motstand steder. Bilde: www.pololu.com

for å velge riktig nåværende grense, ta en titt på databladet til trinnmotoren din. Hvis du ikke finner gjeldende vurdering av motoren din, anbefaler jeg at du starter MED EN nåværende grense PÅ 1A. Du kan alltid øke den senere hvis motoren/driveren mangler trinn.

Bonusinfo: når du bruker driveren i fulltrinnsmodus, er strømmen gjennom hver spole begrenset til omtrent 70% av den angitte strømgrensen. Dette betyr at du må sette gjeldende grense 40% høyere eller 1.4 A i full-trinns modus. Ved bruk av microstepping gjelder formelen ovenfor.

Merk at du må kalibrere gjeldende grense hvis du endrer motorens strømforsyningsspenning. Hvis motoren din gjør mye støy, prøv å senke gjeldende grense. Det er best å sette den nåværende grensen akkurat høyt nok slik at motoren ikke går glipp av trinn.

Måling Vref

nå må du måle referansespenningen (Vref) mellom de to punktene som er merket på bildet nedenfor (GND og potensiometeret) og justere det til verdien du beregnet.

vref probe poeng (GND og potensiometer).

jeg anbefaler å bruke alligator testledninger festet til skrutrekkeren for å sette gjeldende grense. Dette gjør at du kan justere potensiometeret og måle referansespenningen samtidig.

Merk: det er en annen måte å måle gjeldende grense på, og det er å måle nåværende trekk av stepper motoren direkte. Personlig finner jeg metoden ovenfor mye enklere.

Pololu nevner følgende på deres hjemmeside:

Merk: spolestrømmen kan være svært forskjellig fra strømforsyningsstrømmen, så du bør ikke bruke strømmen målt på strømforsyningen for å angi gjeldende grense. Det riktige stedet å sette din nåværende meter er i serie med en av dine stepper motorspoler.

Pololu

Gjeldende grense FAQ

må jeg ha stepper motor tilkoblet eller ikke?
Nei, du trenger ikke å koble stepper motor til driveren når du setter gjeldende grense. For å være på den sikre siden, koble fra motoren din, det forstyrrer noen ganger måling Av vref-spenningen.

må jeg slå motoren ved Å kjøre Arduino motor sketch?
Nei, se spørsmålet ovenfor.

Må jeg vri potensiometeret klokken-eller mot klokken for å heve Vref?
dette avhenger av produsenten av driveren. Hvis DU har en ekte Polulu avslapnings styret I DRV8825 Eller A4988 du slår potensiometeret med klokken for å heve Vref og mot klokken for å senke den.

Kjøling av driveren

a4988-driveren IC har en maksimal strømstyrke på 2 A per spole, men uten kjøleribbe kan den bare levere ca 1 A per spole før den begynner å overopphetes.

sjåføren kommer vanligvis med en liten lim-støttet kjøleribbe, som jeg anbefaler deg å installere med en gang. Du kan også kjøpe en haug med små kjøleribber Fra Amazon for virkelig billig.

Grunnleggende arduino eksempelkode for å styre en stepper motor

Nå som du har koblet opp driveren og sette gjeldende grense, er Det på tide å koble Arduino til datamaskinen og laste opp noen kode. Du kan laste opp følgende eksempelkode Til Arduino ved Hjelp Av Arduino IDE. For dette spesifikke eksemplet trenger du ikke å installere noen biblioteker.

denne skissen styrer både hastigheten, antall omdreininger og spinnretningen til trinnmotoren.

du kan kopiere koden ved å klikke på knappen øverst til høyre i kodefeltet.

slik fungerer koden:

skissen starter med å definere trinn-og retningspinnene. Jeg koblet Dem til Arduino pin 3 og 2.

setningen#define brukes til å gi et navn til en konstant verdi. Kompilatoren vil erstatte eventuelle referanser til denne konstanten med den definerte verdien når programmet er kompilert. Så overalt du nevner dirPin, vil kompilatoren erstatte den med verdien 2 når programmet er kompilert.

jeg definerte også enstepsPerRevolution konstant. Fordi jeg satte driveren til full trinnmodus, satte jeg den til 200 trinn per revolusjon. Endre denne verdien hvis oppsettet ditt er annerledes.

// Define stepper motor connections and steps per revolution:#define dirPin 2#define stepPin 3#define stepsPerRevolution 200

i setup() – delen av koden deklareres alle motorstyringspinnene som digital UTGANG med funksjonen pinMode().

void setup() { // Declare pins as output: pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT);}

i loop() – delen av koden lar vi motoren spinne en revolusjon sakte i CW-retningen og en revolusjon raskt i CCW-retningen. Deretter lar vi motoren spinne 5 omdreininger i hver retning med høy hastighet. Så hvordan styrer du hastigheten, spinnretningen og antall omdreininger?

Kontroll spinning retning:

for å styre spinning retning av stepper motor vi sette DIR (retning) pin ENTEN HØY eller LAV. For dette bruker vi funksjonen digitalWrite(). Avhengig av hvordan du koblet stepper motor, sette dir pin høy vil la motoren slå CW eller CCW.

Kontroll antall trinn eller omdreininger:

i dette eksempelet skisse, for sløyfer styre antall trinn stepper motor vil ta. Koden i for loop resulterer i 1 trinn av stepper motor. Fordi koden i løkken utføres 200 ganger (trinnperrevolusjon), resulterer dette i 1 revolusjon. I de to siste løkkene utføres koden i for-sløyfen 1000 ganger, noe som resulterer i 1000 trinn eller 5 omdreininger.

Merk at du kan endre den andre termen i for-løkken til det antall trinn du vil ha. for(int i = 0; i < 100; i++) ville resultere i 100 trinn, eller en halv revolusjon.

Kontrollhastighet:

hastigheten til steppermotoren bestemmes av frekvensen av pulser vi sender til TRINNPINNEN. Jo høyere frekvensen er, desto raskere går motoren. Du kan kontrollere frekvensen av pulser ved å endre delayMicroseconds() i koden. Jo kortere forsinkelsen er, desto høyere frekvens, desto raskere går motoren.

AccelStepper library tutorial

Den AccelStepper bibliotek skrevet Av Mike McCauley er en kjempeflott bibliotek å bruke for prosjektet. En av fordelene er at den støtter akselerasjon og retardasjon, men den har også mange andre fine funksjoner.

du kan laste ned den nyeste versjonen av dette biblioteket her eller klikke på knappen nedenfor.

du kan installere biblioteket ved Å Gå Til Sketch> Inkluder Bibliotek> Legg til .ZIP Bibliotek… I Arduino IDE.Et annet alternativ er å navigere Til Verktøy > Administrer Biblioteker… eller skriv Ctrl + Shift + I På Windows. Bibliotekadministratoren åpner og oppdaterer listen over installerte biblioteker.

du kan søke etter ‘accelstepper’ og se etter biblioteket Av Mike McCauley. Velg den nyeste versjonen, og klikk Deretter Installer.

kontinuerlig rotasjonseksempelkode

følgende skisse kan brukes til å kjøre en eller flere trinnmotorer kontinuerlig med konstant hastighet. (Ingen akselerasjon eller retardasjon brukes).

hvordan koden fungerer:

det første trinnet er å inkludere biblioteket med #include <AccelStepper.h>.

// Include the AccelStepper library:#include <AccelStepper.h>

det neste trinnet er å definere a4988 til Arduino-tilkoblinger og motorgrensesnittypen. Motorgrensesnitttypen må settes til 1 ved bruk av en trinn-og retningsdriver. Du finner de andre grensesnittypene her.

setningen#define brukes til å gi et navn til en konstant verdi. Kompilatoren vil erstatte eventuelle referanser til denne konstanten med den definerte verdien når programmet er kompilert. Så overalt du nevner dirPin, vil kompilatoren erstatte den med verdien 2 når programmet er kompilert.

// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:#define dirPin 2#define stepPin 3#define motorInterfaceType 1

Deretter må du opprette en ny forekomst Av AccelStepper-klassen med riktig motorgrensesnitttype og tilkoblinger.

I dette tilfellet ringte jeg steppermotoren ‘stepper’, men du kan også bruke andre navn, som ‘z_motor ‘ eller’ liftmotor ‘ etc. AccelStepper liftmotor = AccelStepper(motorInterfaceType, stepPin, dirPin);. Navnet du gir til stepper motor vil bli brukt senere for å angi hastighet, posisjon og akselerasjon for den aktuelle motoren. Du kan opprette flere forekomster Av AccelStepper-klassen med forskjellige navn og pins. Dette gjør at du enkelt kan styre 2 eller flere trinnmotorer samtidig.

// Create a new instance of the AccelStepper class:AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

i setup() delen av koden definerer vi maksimal hastighet i trinn / sekund. Hastigheter på mer enn 1000 trinn per sekund kan være upålitelige, så jeg satte dette som maksimum. Merk at jeg angir navnet på stepper motor (‘stepper’), som jeg ønsker å definere maksimal hastighet. Hvis du har flere trinnmotorer tilkoblet, kan du angi en annen hastighet for hver motor:

void setup() { // Set the maximum speed in steps per second: stepper.setMaxSpeed(1000); stepper2.setMaxSpeed(500);}

Iloop() vi setter først hastigheten som vi vil at motoren skal kjøre på. For dette bruker vi funksjonen setSpeed(). (du kan ogsa plassere dette i oppsettdelen av koden).

stepper.runSpeed() avstemmer motoren, og når et trinn skal utføres, utføres 1 trinn. Dette avhenger av innstilt hastighet og tiden siden siste trinn. Hvis du vil endre retningen til motoren, kan du angi en negativ hastighet: stepper.setSpeed(-400); snur motoren den andre veien.

Eksempelkode for å kontrollere antall trinn eller omdreininger

for å la motoren rotere et bestemt antall trinn foretrekker jeg å bruke en while loop i kombinasjon med stepper.currentPosition(). Du kan bruke følgende eksempelkode for å la motoren gå frem og tilbake.

Kodeforklaring:

den første delen av koden opp til sløyfen () – delen er nøyaktig den samme som i forrige eksempel.

i sløyfen bruker jeg en stund i kombinasjon med currentPosition() – funksjonen. Først setter jeg den nåværende posisjonen til steppermotoren til null med stepper.setCurrentPosition(0).

 // Set the current position to 0: stepper.setCurrentPosition(0);

Neste gjør vi bruk av mens sløyfen. En stund loop vil sløyfe kontinuerlig, og uendelig, til uttrykket inne i parentesen, () blir falsk. Så, i dette tilfellet sjekker jeg om den nåværende posisjonen til steppermotoren ikke er lik 400 trinn (!= betyr: er ikke lik). Selv om dette ikke er tilfelle, kjører vi steppermotoren med konstant hastighet som angitt av setSpeed().

i resten av løkken gjør vi akkurat det samme, bare med en annen hastighet og målposisjon.

Akselerasjon og retardasjon eksempelkode

med følgende skisse kan du legge til akselerasjon og retardasjon til bevegelsene til steppermotoren uten komplisert koding. I det følgende eksemplet vil motoren løpe frem og tilbake med en hastighet på 200 trinn per sekund og en akselerasjon på 30 trinn per sekund per sekund.

Kodeforklaring:

i oppsettet (), i tillegg til maksimal hastighet, må vi definere akselerasjon / retardasjon. For dette bruker vi funksjonen setAcceleration().

void setup() { // Set the maximum speed and acceleration: stepper.setMaxSpeed(200); stepper.setAcceleration(30);}

i sløyfeseksjonen av koden brukte jeg en annen måte å la motoren rotere et forhåndsdefinert antall trinn. Funksjonen stepper.moveTo() brukes til å angi målposisjonen. Funksjonen stepper.runToPostion() flytter motoren (med akselerasjon / retardasjon) til målposisjonen og blokkerer til den er i målposisjonen. Fordi denne funksjonen blokkerer, bør du ikke bruke dette når du trenger å kontrollere andre ting samtidig.

Konklusjon

i denne artikkelen har jeg vist deg hvordan du styrer en stepper motor Med a4988 stepper motor driver Og Arduino. Jeg håper du fant det nyttig og informativt. Hvis du gjorde det, kan du dele den med en venn som også liker elektronikk og gjør ting!jeg har personlig brukt denne driveren mye FOR EN haug MED 3D-skrivere og ANDRE CNC-relaterte prosjekter, men jeg vil gjerne vite hvilke prosjekter du planlegger å bygge (eller allerede har bygget) med denne driveren. Hvis du har spørsmål, forslag, eller hvis du tror at ting mangler i denne opplæringen, kan du legge igjen en kommentar nedenfor.