ESP32 - 28BYJ-48 Stappenmotor ULN2003 Driver

In deze handleiding behandelen we de volgende onderwerpen:

ESP32 ULN2003 28BYJ-48 stepsmotor

Stappenmotoren blinken uit in nauwkeurige positiecontrole, doordat ze een volledige omwenteling opdelen in discrete “stappen.” Deze motoren worden veel toegepast in diverse apparaten, zoals printers, 3D-printers, CNC-machines en industriële automatiseringssystemen.

Een betaalbare manier om inzicht te krijgen in stappenmotoren is door te experimenteren met 28BYJ-48 stappenmotoren. Deze motoren worden meestal geleverd met een driverboard gebaseerd op de ULN2003, wat het gebruik sterk vereenvoudigt.

Hardware Benodigd

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×USB Kabel Type-C
1×28BYJ-48 stappenmotor + ULN2003 Driver Module
1×5V Voedingsadapter
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 28BYJ-48 Stappenmotor

Volgens het datasheet beweegt de 28BYJ-48 motor in full-step modus in stappen van 11,25 graden, wat resulteert in 32 stappen per volledige omwenteling (berekend als: 360°/11,25° = 32).

Daarnaast bevat de motor een tandwielreductie van 1/64, waardoor het effectieve aantal stappen wordt verhoogd tot 32 x 64 = 2048 stappen per omwenteling. Elke van deze 2048 stappen komt overeen met een draaiing van 360°/2048, ongeveer 0,1758 graden per stap.

Conclusie: als de motor 2048 stappen zet (in full-step modus), draait de motor één volledige omwenteling.

Pinout

De 28BYJ-48 stappenmotor heeft 5 pinnen. U hoeft geen details over deze pinnen te weten; u hoeft ze alleen maar aan te sluiten op de connector van de ULN2003 motor driver.

28BYJ-48 stappenmotor

Over ULN2003 Stappenmotor Driver Module

De ULN2003 is een veelgebruikte motor driver module voor stappenmotoren. Belangrijke kenmerken van deze module zijn:

  • Vier LEDs die oplichten om de activiteit van de vier besturings-ingangslijnen te tonen, zodat u visueel de huidige stapstatus van de motor kunt volgen. Deze LEDs zijn praktisch, maar geven ook een visuele feedback van het stappenproces.
  • Een ON/OFF jumper op de module waarmee u de voeding van de aangesloten stappenmotor kunt onderbreken. Dit is handig voor het efficiënt beheren van de stroomvoorziening naar de motor.

ULN2003 Pinout

ULN2003 Stappenmotor Driver Pinout

De ULN2003 module heeft 6 pinnen en één vrouwelijke connector:

  • IN1 pin: wordt gebruikt om de motor aan te sturen. Sluit deze aan op een output pin van de ESP32.
  • IN2 pin: wordt gebruikt om de motor aan te sturen. Sluit deze aan op een output pin van de ESP32.
  • IN3 pin: wordt gebruikt om de motor aan te sturen. Sluit deze aan op een output pin van de ESP32.
  • IN4 pin: wordt gebruikt om de motor aan te sturen. Sluit deze aan op een output pin van de ESP32.
  • GND pin: gemeenschappelijke massapin. Deze moet verbonden zijn met zowel de GND van de ESP32 als van de externe voeding.
  • VDD pin: levert stroom aan de motor. Sluit aan op de externe voeding.
  • Motor Connector: hier sluit u de motor op aan.

※ Notiz:

Belangrijk bij het voeden van stappenmotoren:

  • Zorg dat de spanning van de externe voeding overeenkomt met de spanningsvereisten van de stappenmotor. Bijvoorbeeld, werkt uw motor op 12V DC, gebruik dan ook een 12V voeding. Voor de 28BYJ-48 stappenmotor, die op 5V DC werkt, moet u een 5V voeding gebruiken.
  • Let op: zelfs als een stappenmotor ontworpen is voor een 5V voeding, mag u de VDD pin niet aansluiten op de 5V pin van de ESP32. Verbind de VDD pin altijd met een externe 5V voeding. Dit is cruciaal omdat stappenmotoren veel stroom kunnen trekken, wat de ESP32 voeding kan overbelasten en schade kan veroorzaken.

Aansluitschema

ESP32 stappenmotor ULN2003 driver Aansluitschema

This image is created using Fritzing. Click to enlarge image

Let op: de kleur van de draden van de stappenmotor is niet relevant. U hoeft alleen de mannelijke connector (van de 28BYJ-48 stappenmotor) aan te sluiten op de vrouwelijke connector (van de ULN2003 driver).

Hoe programmeert u het aansturen van een stappenmotor

Er zijn drie hoofdmethoden om een stappenmotor aan te sturen:

  • Full-Step (volledige stappen)
  • Half-Step (halve stappen)
  • Micro-Step (microstappen)

Voor basis toepassingen is de full-step methode vaak voldoende. Aan het einde van deze handleiding wordt een gedetailleerde uitleg gegeven van alle drie methoden. Het programmeren van deze methoden kan complex zijn, maar gelukkig zijn er veel bibliotheken die deze complexiteit voor u afhandelen. U hoeft alleen de juiste bibliotheek te gebruiken, zodat het aansturen van stappenmotoren in uw projecten eenvoudiger wordt.

De Arduino IDE bevat een ingebouwde Stepper bibliotheek, maar we raden deze niet aan vanwege de volgende redenen:

  • Blokkerende werking: deze bibliotheek werkt op een blokkerende manier, waardoor de ESP32 geen andere taken kan uitvoeren tijdens het aansturen van de stappenmotor.
  • Beperkte functionaliteit: de ingebouwde Stepper bibliotheek biedt mogelijk niet alle functies die u voor uw project nodig hebt.

Wij bevelen in plaats daarvan de AccelStepper bibliotheek aan. Deze bibliotheek heeft diverse voordelen:

  • Acceleratie en deceleratie: ondersteunt vloeiende snelheidsveranderingen voor preciezere controle.
  • Full-step en half-step aansturing: mogelijkheid om tussen volledige en halve stappen te kiezen.
  • Meerdere gelijktijdige stappenmotoren: u kunt meerdere motoren tegelijk aansturen, waarbij elke motor onafhankelijk en tegelijk beweegt.

Een nadeel van deze bibliotheek is dat micro-step aansturing niet wordt ondersteund.

ESP32 Code

/* * 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-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(FULLSTEP, 19, 18, 17, 16); // ESP32 pin: GPIO19, GPIO18, GPIO17, GPIO16 void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position stepper.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // MUST be called in loop() function Serial.print(F("Current Position: ")); Serial.println(stepper.currentPosition()); }

Snelstart

  • Gebruikt u ESP32 voor het eerst? Bekijk dan hoe u de omgeving instelt voor ESP32 in de Arduino IDE.
  • Voer de bedrading uit zoals in bovenstaande afbeelding.
  • Verbind de ESP32 met uw PC via een micro USB-kabel.
  • Open de Arduino IDE op uw PC.
  • Selecteer het juiste ESP32 board (bijvoorbeeld ESP32 Dev Module) en de juiste COM-poort.
  • Klik op het Bibliotheken-icoon in de linkerzijbalk van de Arduino IDE.
  • Zoek op “AccelStepper” en vind de AccelStepper bibliotheek van Mike McCauley.
  • Klik op Installeren om de AccelStepper bibliotheek te installeren.
ESP32 AccelStepper bibliotheek
  • Kopieer de code hierboven en open deze met de Arduino IDE.
  • Klik op de Uploaden-knop in de Arduino IDE om de code naar de ESP32 te uploaden.
  • Bekijk de motor draaien. Deze zou moeten:
    • één volledige omwenteling met de klok mee draaien, en daarna
    • Twee volledige omwentelingen tegen de klok in draaien, en vervolgens
    • Twee volledige omwentelingen met de klok mee draaien.

    Dit proces wordt oneindig herhaald.

    • Kijk naar het resultaat in de Seriële Monitor.

Hoe meerdere 28BYJ-48 stappenmotoren tegelijk aan te sturen

Laten we leren hoe u twee stappenmotoren onafhankelijk van elkaar tegelijkertijd kunt aansturen.

Aansluitschema voor twee 28BYJ-48 stappenmotoren

ESP32 twee stappenmotoren ULN2003 driver Aansluitschema

This image is created using Fritzing. Click to enlarge image

ESP32 Code voor twee 28BYJ-48 stappenmotoren

/* * 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-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, 23, 22, 21, 19); AccelStepper stepper_2(FULLSTEP, 18, 5, 17, 16); void setup() { Serial.begin(9600); stepper_1.setMaxSpeed(1000.0); // set the maximum speed stepper_1.setAcceleration(50.0); // set acceleration stepper_1.setSpeed(200); // set initial speed stepper_1.setCurrentPosition(0); // set position stepper_1.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution stepper_2.setMaxSpeed(1000.0); // set the maximum speed stepper_2.setAcceleration(50.0); // set acceleration stepper_2.setSpeed(200); // set initial speed stepper_2.setCurrentPosition(0); // set position stepper_2.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper_1.distanceToGo() == 0) stepper_1.moveTo(-stepper_1.currentPosition()); if (stepper_2.distanceToGo() == 0) stepper_2.moveTo(-stepper_2.currentPosition()); stepper_1.run(); // MUST be called in loop() function stepper_2.run(); // MUST be called in loop() function Serial.print(F("stepper_1# current position: ")); Serial.println(stepper_1.currentPosition()); Serial.print(F("stepper_2# current position: ")); Serial.println(stepper_2.currentPosition()); }

※ 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!