Arduino - Stappenmotor Besturen met L298N Driver

In deze tutorial leert u:

De tutorial is toepasbaar op elk type bipolaire stappenmotor (4 draden). Als voorbeeld wordt de NEMA 17 stappenmotor gebruikt.

Arduino Stappenmotor L298N Driver

Benodigdheden

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×Stappenmotor Nema 17
1×L298N Motordriver Module
1×12V Voeding Adapter
1×DC-Stroomaansluiting
1×Jumper Draden
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over Stappenmotor

Er zijn twee veelgebruikte soorten stappenmotoren:

  • bipolair: dit type motor heeft 4 draden
  • unipolair: dit type motor heeft 5 of 6 draden.

Voor een 6-draads unipolaire stappenmotor kunnen we vier van de zes draden gebruiken en deze als bipolaire stappenmotor aansturen.

Voor een 5-draads unipolaire stappenmotor, zie Arduino - besturing 28BYJ-48 stappenmotor met ULN2003 driver

Deze tutorial richt zich uitsluitend op de bipolaire stappenmotor.

Bipolaire Stappenmotor pinout

De bipolaire stappenmotor heeft 4 aansluitpinnen. Afhankelijk van de fabrikant verschillen de namen van de motorpinnen. In onderstaande tabel staan enkele veelgebruikte benamingen:

PIN NO Naam 1 Naam 2 Naam 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
Bipolaire Stappenmotor pinout

De volgorde van de pinnen, draadbenaming en draadkleuren kunnen per fabrikant verschillen. Raadpleeg daarom altijd de datasheet of handleiding om de relatie tussen draadkleur en pinnummer te achterhalen. De bovenstaande afbeelding toont ook de specificaties van twee verschillende motoren met verschillende draadbenamingen en kleuren.

Stappen per Omwenteling

De specificatie van de motor geeft het aantal graden per stap (DEG_PER_STEP). Afhankelijk van de aansturingsmethode wordt het aantal stappen per omwenteling (STEP_PER_REVOLUTION) als volgt berekend:

Aansturingsmethode Stappen per Omwenteling Werkelijke graden per stap
Volledige stap (Full-step) STEP_PER_REVOLUTION = 360 / DEG_PER_STEP DEG_PER_STEP
Halve stap (Half-step) STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 DEG_PER_STEP / 2
Micro-step (1/n) STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n DEG_PER_STEP / n

Bijvoorbeeld, als de datasheet 1,8 graden per stap vermeldt:

Aansturingsmethode Stappen per Omwenteling Werkelijke graden per stap
Volledige stap (Full-step) 200 stappen/omwenteling 1,8°
Halve stap (Half-step) 400 stappen/omwenteling 0,9°
Micro-step (1/n) (200 * n) stappen/omwenteling (1,8 / n)°

Hoe een stappenmotor besturen met Arduino

Arduino kan signalen genereren om de stappenmotor aan te sturen. De signalen vanuit Arduino bieden echter niet voldoende spanning en/of stroom om de motor te laten draaien. Daarom is een hardware driver nodig tussen Arduino en de motor die twee functies vervult:

  • Het versterken van de stuursignalen van Arduino (stroom en spanning)
  • Het beschermen van Arduino tegen hoge stroom en spanning die nodig zijn voor de motor.

Er zijn diverse hardware drivers beschikbaar voor het besturen van stappenmotoren. De L298N driver is een van de meest gebruikte drivers voor dit doel.

Over L298N Driver

Een enkele L298N driver kan twee DC motoren of één stappenmotor aansturen. In deze tutorial leert u hoe u deze driver gebruikt voor een stappenmotor.

L298N Driver Pinout

L298N Driver Pinout

De L298N driver heeft 11 pinnen en drie jumpers:

  • VCC pin: levert spanning voor de motor, tussen 5 en 35V
  • GND pin: common ground, te verbinden met GND (0V)
  • 5V pin: voeding voor de L298N module, kan van Arduino 5V komen
  • IN1, IN2, IN3, IN4 pins: verbonden met Arduino om stuursignalen te ontvangen
  • OUT1, OUT2, OUT3, OUT4 pins: verbonden met de stappenmotor
  • ENA, ENB jumpers: schakelen de stappenmotor in, deze dienen beide geplaatst te zijn
  • 5V-EN jumper: als geplaatst, krijgt de module voeding van VCC en hoeft de 5V pin niet te worden aangesloten; wanneer verwijderd, moet 5V via de 5V pin worden aangesloten

L298N heeft dus twee voedingscircuits:

  • Voor de stappenmotor (VCC en GND): 5 tot 35V
  • Voor interne werking van de L298N module (5V en GND): 5 tot 7V. Als 5V-EN jumper is geplaatst, hoeft deze voeding niet apart te worden aangesloten.

Aansluitschema

Arduino Stappenmotor L298N Driver Aansluitschema

This image is created using Fritzing. Click to enlarge image

※ Notiz:

  • Zorg dat alle drie de jumpers op de L298N module geplaatst blijven (mits voedingsspanning motor ≤ 12V)
  • De volgorde van draden op de stappenmotor kan per fabrikant verschillen, raadpleeg onderstaande tabel voor correcte aansluiting

Aansluitlijst tussen Arduino en L298N Driver

Arduino pins L298N pins
7 IN1
6 IN2
5 IN3
4 IN4

Aansluitlijst tussen L298N Driver en Stappenmotor

Belangrijk: Let niet op de draadvolgorde in de bovenstaande afbeelding; die is slechts een voorbeeld. De volgorde verschilt vaak per fabrikant. Gebruik de onderstaande tabel voor correcte aansluiting.

L298N pins Stappenmotor pins Of Of
OUT1 A+ A A
OUT2 A- A C
OUT3 B+ B B
OUT4 B- B D

Controleer voor aankoop de datasheet of handleiding van uw stappenmotor voor de pin kleur- en naamtoewijzing. Bijvoorbeeld, deze stappenmotor gebruikt de volgende toewijzing:

Stappenmotor spoel kleurmapping

Met deze mapping wordt de aansluitlijst:

L298N pins stappenmotor pins draadkleur
OUT1 A zwarte draad
OUT2 C groene draad
OUT3 B rode draad
OUT4 D blauwe draad

※ Notiz:

In alle bovenstaande aansluitlijsten tussen L298N en stappenmotor kunnen OUT1 met OUT2 en OUT3 met OUT4 worden verwisseld. Dit resulteert in meerdere manieren van bekabeling. Houd er wel rekening mee dat bij het wisselen de draairichting van de motor omkeert (kloksgewijs wordt tegenkloksgewijs, en andersom).

Hoe een stappenmotor aansturen met een L298N driver

Het besturen van een stappenmotor is geen eenvoudige taak, vooral niet als u hem niet-blokkerend wilt aansturen. Gelukkig maakt de AccelStepper bibliotheek dit erg eenvoudig.

De Arduino IDE bevat ook een ingebouwde Stepper bibliotheek, maar deze raden wij niet aan omdat:

  • De bibliotheek werkt met blocking functies: Arduino kan niets anders doen zolang de motor wordt aangestuurd
  • De bibliotheek heeft onvoldoende functies

Daarom adviseren wij de AccelStepper bibliotheek te gebruiken. Deze ondersteunt:

  • Acceleratie
  • Deceleratie
  • Volledige en halve stappen aansturing
  • Meerdere gelijktijdige stappenmotoren, elk onafhankelijk aansturend
  • Nadeel: ondersteunt geen microstepping

Positiecontrole van de stappenmotor via L298N Driver

We kunnen de stappenmotor naar een gewenste positie bewegen met:

stepper.moveTo(desiredPosition); // beweeg motor één omwenteling

※ Notiz:

De functie stepper.moveTo() is niet-blokkerend. Dit is een groot voordeel van deze bibliotheek. Toch moet u dit in acht nemen:

  • Roep stepper.run() zo vaak mogelijk aan, het hoort in de void loop() functie te staan
  • Gebruik geen delay() tijdens het bewegen van de motor
  • Gebruik geen Serial.print() en Serial.println() functies tijdens beweging, dit vertraagt de stappenmotor

Snelheidsregeling van de stappenmotor via L298N Driver

U kunt niet alleen snelheid regelen maar ook acceleratie en deceleratie via eenvoudige functies:

stepper.setAcceleration(50.0); // stel acceleratie/deceleratie in stepper.setSpeed(200); // stel gewenste snelheid in

Richtingscontrole van de stappenmotor via L298N Driver

Met bovenstaande bekabeling zal de motor draaien:

  • Kloksgewijs: als de positie wordt verhoogd (positie omhoog)
  • Tegenkloksgewijs: als de positie wordt verlaagd (positie omlaag)

Bijvoorbeeld:

  • Huidige positie is 100 en we sturen naar 200, de motor draait kloksgewijs
  • Huidige positie is -200 en we sturen naar -100, de motor draait kloksgewijs
  • Huidige positie is 200 en we sturen naar 100, de motor draait tegenkloksgewijs
  • Huidige positie is -100 en we sturen naar -200, de motor draait tegenkloksgewijs

※ Notiz:

Zoals eerder genoemd: als u OUT1 met OUT2 of OUT3 met OUT4 verwisselt, kunnen incrementen en decrementen van positie een omgekeerde draairichting krijgen.

Stoppen van de stappenmotor

  • De stappenmotor stopt automatisch na het bereiken van de gewenste positie
  • U kunt de motor ook direct stoppen met stepper.stop() functie

Arduino Code - Stappenmotor voorbeeldcode

De volgende code:

  • Laat de motor één omwenteling kloksgewijs draaien
  • Stopt 5 seconden
  • Draait één omwenteling tegenkloksgewijs terug
  • Stopt 5 seconden
  • Herhaalt dit proces continu
/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, 7, 6, 5, 4); long moveToPosition = STEP_PER_REVOLUTION; void setup() { Serial.begin(9600); stepper.setAcceleration(200.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position to 0 stepper.moveTo(STEP_PER_REVOLUTION); // move motor one revolution, in clockwise direction Serial.println("Motor moving in clockwise direction"); } void loop() { if (stepper.distanceToGo() == 0) { Serial.println("Motor is stopped"); delay(5000); // stop 5 seconds stepper.setCurrentPosition(0); // reset position to 0 moveToPosition = -1 * moveToPosition; // reverse direction stepper.moveTo(moveToPosition); // move motor one revolution if (stepper.distanceToGo() > 0) Serial.println("Motor moving in clockwise direction"); else if (stepper.distanceToGo() < 0) Serial.println("Motor moving in anticlockwise direction"); } // Serial.print(F("position: ")); // Serial.println(stepper.currentPosition()); stepper.run(); // MUST be called as frequently as possible }

Snel starten

  • Navigeer in de Arduino IDE naar het Libraries icoon in de linkerzijbalk
  • Zoek op “AccelStepper” en selecteer de bibliotheek van Mike McCauley
  • Klik op de Installeren knop om de AccelStepper bibliotheek te installeren
Arduino AccelStepper library
  • Kopieer bovenstaande code en open in Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code naar Arduino te uploaden
  • U ziet dan:
    • De stappenmotor draait één omwenteling kloksgewijs
    • De motor stopt 5 seconden
    • De stappenmotor draait één omwenteling tegenkloksgewijs
    • De motor stopt 5 seconden
    • Dit proces wordt continu herhaald
  • Bekijk het resultaat in de Serial Monitor
COM6
Send
Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code Uitleg

Lees de regel-voor-regel uitleg in de commentaarregels van de broncode!

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!