ESP32 - Stappenmotor

In deze handleiding gaan we leren hoe u met de ESP32 een stappenmotor bestuurt:

Deze handleiding is toepasbaar op elk type bipolaire stappenmotor (4 draden). We gebruiken de NEMA 17 stappenmotor als voorbeeld.

ESP32 Stappenmotor

Benodigdheden Hardware

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×USB-kabel Type-C
1×Stappenmotor Nema 17
1×L298N Motordriver Module
1×12V Voeding Adapter
1×DC-Stroomaansluiting
1×Jumperdraden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

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 de Stappenmotor

Er zijn twee veelvoorkomende typen stappenmotoren:

  • Bipolair: Deze motoren hebben 4 draden.
  • Unipolair: Unipolaire motoren kunnen 5 of 6 draden hebben. Bij een 6-draads unipolaire stappenmotor kunt u er effectief vier van de zes draden gebruiken alsof het een bipolaire stappenmotor is.

Als u specifiek geïnteresseerd bent in een 5- draadige unipolaire stappenmotor, kunt u de tutorial ESP32 - Stuur 28BYJ-48 Stappenmotor aan met ULN2003 Driver raadplegen.

Deze handleiding richt zich echter exclusief op bipolaire stappenmotoren.

Bipolaire Stappenmotor pinout

Een bipolaire stappenmotor heeft vier pinnen, en deze pinnen kunnen per fabrikant verschillende namen hebben. Hieronder vindt u een tabel met enkele veelvoorkomende pinbenamingen:

PIN NR 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, de namen van de draden en de draadspecificaties kunnen per fabrikant verschillen. Raadpleeg daarom altijd de datasheet of handleiding om te weten welke draadkleur correspondeert met welke pinnaam. De afbeelding hierboven toont de specificaties van twee verschillende motoren, elk met hun eigen draadnaam- en kleurcodes.

Stappen per Omwenteling

In de specificatie van de motor wordt de hoek per stap opgegeven (we noemen deze DEG_PER_STEP). Afhankelijk van de aansturingsmethode wordt het aantal stappen per omwenteling (STEP_PER_REVOLUTION) als volgt berekend:

Aansturingsmethode Stappen per omwenteling Werkelijke graad 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

Als voorbeeld, als de datasheet 1,8 graden per stap aangeeft:

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

Hoe een stappenmotor aansturen met ESP32

De ESP32 kan signalen produceren om de stappenmotor aan te sturen, maar deze signalen bieden mogelijk niet de benodigde spanning en stroomsterkte die de motor vraagt. Daarom is een tussenliggende hardware driver nodig die het verschil tussen de ESP32 en de stappenmotor overbrugt. Deze driver vervult twee belangrijke functies:

  • Versterken van besturingssignalen: Hij verhoogt de stroom en spanning van de signalen afkomstig van de ESP32, zodat deze voldoen aan de eisen van de motor.
  • Bescherming van de ESP32: Tegelijkertijd beschermt hij de ESP32 tegen de hogere stroom en spanning die nodig is om de motor te voeden, waardoor schade wordt voorkomen.

Er zijn verschillende hardware drivers beschikbaar voor het aansturen van stappenmotoren. Een veelgebruikte optie is de L298N driver.

Over de L298N Driver

Een enkele L298N driver kan twee gelijkstroommotoren of een stappenmotor aansturen. In deze handleiding leren we hoe u deze gebruikt voor de stappenmotor.

L298N Driver Pinout

L298N Driver Pinout

De L298N driver heeft 11 pinnen en drie jumper aansluitingen:

  • VCC pin: levert stroom voor de motor. Dit kan tussen 5 en 35V liggen.
  • GND pin: is de gemeenschappelijke massa, moet aangesloten worden op GND (0V).
  • 5V pin: levert stroom voor de L298N module zelf. Kan worden gevoed door 5V van de ESP32.
  • IN1, IN2, IN3, IN4 pinnen: zijn verbonden met de ESP32 om besturingssignalen te ontvangen voor de stappenmotor.
  • OUT1, OUT2, OUT3, OUT4 pinnen: zijn verbonden met de stappenmotor.
  • ENA, ENB jumpers: worden gebruikt om de stappenmotor in te schakelen. Beide jumpers moeten geplaatst blijven.
  • 5V-EN jumper: Als deze jumper geplaatst is, wordt de voeding voor de L298N module geleverd via VCC. Dan hoeft de 5V pin niet te worden aangesloten. Als deze jumper verwijderd is, moet de L298N module van spanning worden voorzien via de 5V pin.

Zoals hierboven uitgelegd heeft de L298N driver twee voedingsaansluitingen:

  • Eén voor de stappenmotor (VCC en GND pinnen), tussen 5 en 35V.
  • Eén voor de interne werking van de L298N module (5V en GND pinnen), tussen 5 en 7V. Als de 5V-EN jumper aanwezig is, hoeft deze voeding niet apart te worden aangesloten.

Bedradingsschema

ESP32 Stappenmotor L298N Driver Bedradingsschema

This image is created using Fritzing. Click to enlarge image

※ Notiz:

  • Zorg dat alle drie de jumpers op de L298N module geplaatst blijven (als de voedingsspanning voor de motor ≤ 12V is)
  • De volgorde van de pinnen op stappenmotoren kan per fabrikant verschillen. Controleer onderstaande tabellen voor correcte bedrading.

Bedradingsschema tussen ESP32 en L298N Driver

ESP32 pinnen L298N pinnen
7 IN1
6 IN2
5 IN3
4 IN4

Bedradingsschema tussen L298N Driver en Stappenmotor

Belangrijk!: Let niet op de draadrovolgorde in het bedradingsschema hierboven; dit is slechts een voorbeeld. De pinvolgorde op stappenmotoren kan verschillen per fabrikant. Controleer dat uw bedrading overeenkomt met onderstaande tabel.

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

Voordat u een stappenmotor aanschaft, raden wij aan de datasheet, specificaties of handleiding te controleren. Zorg ervoor dat er een mapping is tussen draadkleuren en pinbenamingen. Bijvoorbeeld, deze stappenmotor geeft de volgende mapping:

Draadkleur Mapping Stappenmotor

Op basis van deze mapping wordt de bedradingstabel:

L298N pinnen stappenmotor pinnen draaddkleur
OUT1 A zwarte draad
OUT2 C groene draad
OUT3 B rode draad
OUT4 D blauwe draad

※ Notiz:

In alle bovenstaande bedradingstabellen tussen de stappenmotor en L298N driver kunnen OUT1 en OUT2 worden verwisseld, en OUT3 en OUT4 ook. Er zijn dus meerdere manieren om de bedrading uit te voeren. Als u ze verwisselt, verandert mogelijk ook de draairichting van de motor (met de klok mee of tegen de klok in).

Hoe een stappenmotor aansturen met een L298N driver

Het aansturen van een stappenmotor is niet eenvoudig, vooral als u dit op een non-blocking manier wilt doen. Gelukkig maakt de AccelStepper bibliotheek dit een stuk eenvoudiger.

Arduino IDE heeft ook een ingebouwde Stepper bibliotheek. Echter raden wij deze niet aan omdat:

  • Deze bibliotheek blokkerende functies gebruikt, waardoor de ESP32 niet andere taken kan uitvoeren tijdens het aansturen van de stappenmotor.
  • Het niet voldoende functies biedt.

Wij raden daarom de AccelStepper bibliotheek aan. Deze ondersteunt:

  • Acceleratie
  • Deceleratie
  • Volledige stappen en half-steps aansturing
  • Meerdere gelijktijdige stappenmotoren, elk onafhankelijk aanstuurbaar
  • Nadeel: Ondersteunt geen micro-stepping

Hoe de positie van de stappenmotor te besturen via L298N driver

We kunnen de stappenmotor naar een gewenste positie laten bewegen met:

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

※ Notiz:

De functie stepper.moveTo() werkt non-blocking. Dit is een groot voordeel van de bibliotheek. Let echter op het volgende bij het gebruik:

  • Roep 'stepper.run()' zo vaak mogelijk aan, idealiter in de void loop() functie.
  • Gebruik de delay() functie niet tijdens het bewegen van de motor.
  • Gebruik geen Serial.print() en Serial.println() functies tijdens het bewegen van de motor, dit vertraagt de motorbeweging.

Hoe de snelheid van de stappenmotor te besturen via L298N driver

We kunnen niet alleen de snelheid, maar ook acceleratie en deceleratie regelen met eenvoudige functies:

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

Hoe de draairichting van de stappenmotor te regelen via L298N driver

Als u de bedrading volgens de bovenstaande instructies maakt, zal de motor draaien:

  • Met de klok mee: wanneer u de motor van een positie naar een hogere positie bestuurt (positie neemt toe)
  • Tegen de klok in: wanneer u de motor van een positie naar een lagere positie bestuurt (positie neemt af)

Voorbeelden:

  • Is de huidige positie 100 en bestuurt u naar 200, dan draait de motor met de klok mee.
  • Is de huidige positie -200 en bestuurt u naar -100, dan draait de motor met de klok mee.
  • Is de huidige positie 200 en bestuurt u naar 100, dan draait de motor tegen de klok in.
  • Is de huidige positie -100 en bestuurt u naar -200, dan draait de motor tegen de klok in.

※ Notiz:

Zoals eerder vermeld, als u OUT1 en OUT2 of OUT3 en OUT4 verwisselt, kunnen de positieve en negatieve positieincrementen de draairichting omkeren.

Hoe een stappenmotor stoppen

  • De stappenmotor stopt automatisch nadat de gewenste positie is bereikt.
  • De motor kan op elk moment geforceerd worden te stoppen met de functie stepper.stop().

ESP32 Code - Stappenmotor Code

De onderstaande code doet het volgende:

  • Laat de motor één volledige omwenteling met de klok mee draaien
  • Stopt de motor gedurende 5 seconden
  • Laat de motor één volledige omwenteling tegen de klok in draaien
  • Stopt de motor gedurende 5 seconden
  • Dit proces wordt herhaald
/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, 19, 18, 17, 16); // ESP32 pin: GPIO19, GPIO18, GPIO17, GPIO16 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 }

Snelle stappen

  • Als u ESP32 voor het eerst gebruikt, bekijk dan hoe u de omgeving instelt voor ESP32 in Arduino IDE.
  • Maak de bedrading volgens het bovenstaande schema.
  • Verbind de ESP32 met uw pc via een micro USB-kabel.
  • Open Arduino IDE op uw pc.
  • Selecteer het juiste ESP32 bord (bijv. ESP32 Dev Module) en de juiste COM-poort.
  • Klik op het Bibliotheken icoon in de linkerbalk van Arduino IDE.
  • Zoek op “AccelStepper”, en selecteer de AccelStepper bibliotheek van Mike McCauley.
  • Klik op de Installeren knop om de AccelStepper bibliotheek te installeren.
ESP32 AccelStepper bibliotheek
  • Kopieer de bovenstaande code en open deze met Arduino IDE.
  • Klik op de Upload knop in Arduino IDE om de code naar de ESP32 te uploaden.
  • U ziet:
    • De stappenmotor draait een omwenteling met de klok mee
    • De stappenmotor stopt 5 seconden
    • De stappenmotor draait een omwenteling tegen de klok in
    • De stappenmotor stopt 5 seconden
    • Dit proces wordt steeds herhaald.
  • Bekijk het resultaat in de Seriële 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 Verklaring

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!