Arduino - Stuurt 28BYJ-48 Stappenmotor aan met ULN2003 Driver

In deze tutorial gaan we leren:

Arduino ULN2003 28BYJ-48 stepper motor

Stappenmotoren zijn uitstekende motoren voor positiebesturing. De stappenmotoren verdelen een volledige omwenteling in een aantal gelijke “stappen”. Ze worden gebruikt in veel apparaten zoals printers, 3D-printers, CNC-machines en in industriële automatisering.

Een van de voordelige manieren om te leren over stappenmotoren is het gebruik van 28BYJ-48 stappenmotoren. Deze worden meestal geleverd met een ULN2003-gebaseerde driverprint, waardoor ze heel eenvoudig te gebruiken zijn.

Benodigde Hardware

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×28BYJ-48 stappenmotor + ULN2003 Driver Module
1×5V Voedingsadapter
1×DC Voedingsconnector
1×Jumper wires (verbindingsdraden)
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 de 28BYJ-48 Stappenmotor

Volgens het datasheet, wanneer de 28BYJ-48 motor in full-step modus draait, correspondeert elke stap met een rotatie van 11,25°. Dat betekent dat er 32 stappen per omwenteling zijn (360°/11,25° = 32).

Daarnaast heeft de motor een 1/64 overbrengingsverhouding via een tandwielreductie. Dat betekent dat het daadwerkelijke aantal stappen 32 x 64 = 2048 stappen is. Elke stap komt overeen met 360°/2048 = 0,1758°.

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

Pinout

De 28BYJ-48 stappenmotor heeft 5 pinnen. U hoeft niet in detail op deze pinnen te letten; sluit deze gewoon aan op de connector van de ULN2003 motor driver.

28BYJ-48 stepper motor

Over de ULN2003 Stappenmotor Driver Module

De ULN2003 is een van de meest gebruikte motor driver modules voor stappenmotoren.

  • De module heeft vier LEDs die de activiteit van vier controle-ingangen weergeven (om de stapstatus aan te geven). Ze geven een fraai visueel effect tijdens het stappen.
  • De module heeft ook een ON/OFF jumper om de voeding van de stappenmotor te isoleren.

ULN2003 Pinout

ULN2003 Stepper Motor Driver Pinout

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

  • IN1 pin: wordt gebruikt om de motor aan te sturen. Verbind deze met een output pin op de Arduino.
  • IN2 pin: wordt gebruikt om de motor aan te sturen. Verbind deze met een output pin op de Arduino.
  • IN3 pin: wordt gebruikt om de motor aan te sturen. Verbind deze met een output pin op de Arduino.
  • IN4 pin: wordt gebruikt om de motor aan te sturen. Verbind deze met een output pin op de Arduino.
  • GND pin: gemeenschappelijke massa pin. MOET verbonden zijn met zowel de GND van de Arduino als die van de externe voeding.
  • VDD pin: levert stroom aan de motor. Verbind deze met de externe voeding.
  • Motor Connector: hier sluit u de motor op aan.

※ Notiz:

  • De spanning van de externe voeding moet gelijk zijn aan de spanning van de stappenmotor. Bijvoorbeeld, als een stappenmotor werkt op 12V DC, gebruikt u een 12V voeding. In het geval van de 28BYJ-48 stappenmotor werkt deze op 5V DC, dus gebruiken we een 5V voeding.
  • Ook als een stappenmotor 5V voeding vereist, verbind de VDD pin NIET met de 5V pin van de Arduino. Verbind deze altijd met een externe 5V voeding, omdat de stappenmotor teveel stroom kan trekken.

Bedradingsschema

Arduino stepper motor ULN2003 driver Wiring Diagram

This image is created using Fritzing. Click to enlarge image

Let op dat de draadkleuren van de stappenmotor niet uitmaken. U hoeft alleen de male connector van de 28BYJ-48 stappenmotor aan te sluiten op de female connector van de ULN2003 driver.

Hoe programmeer ik een stappenmotor aan te sturen

Er zijn drie methoden om een stappenmotor aan te sturen:

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

Voor eenvoudige toepassingen kunt u de full-step methode gebruiken. De details van de drie methodes worden aan het einde van deze tutorial uitgelegd. Het programmeren van deze methoden kan complex zijn, maar gelukkig zijn er veel bibliotheken die dit voor u doen. U hoeft alleen maar de juiste bibliotheek te gebruiken.

De Arduino IDE heeft een ingebouwde Stepper bibliotheek. Echter, wij raden aan deze niet te gebruiken omdat:

  • De bibliotheek blokkerend werkt, wat betekent dat Arduino geen andere taken kan uitvoeren tijdens het aansturen van de stappenmotor.
  • De bibliotheek niet over voldoende functionaliteiten beschikt.

In plaats daarvan raden wij aan de AccelStepper bibliotheek te gebruiken. Deze bibliotheek ondersteunt:

  • Versnelling (acceleration)
  • Vertraging (deceleration)
  • Full-step en half-step aansturing
  • Meerdere gelijktijdige stappenmotoren met onafhankelijke en gelijktijdige stappen per motor
  • Nadeel: ondersteunt GEEN micro-step aansturing

Arduino Code

/* * 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-controls-28byj-48-stepper-motor-using-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, 11, 9, 10, 8); 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()); }

Snelle Stappen

  • Navigeer naar het Libraries icoon in de linker balk van de Arduino IDE.
  • Zoek naar “AccelStepper” en selecteer de AccelStepper bibliotheek van Mike McCauley.
  • Klik op de Installeren knop om de AccelStepper bibliotheek te installeren.
Arduino AccelStepper library
  • Kopieer de bovenstaande code en open deze met Arduino IDE.
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino te uploaden.
  • Bekijk de motor draaien. De motor zou:
    • één omwenteling met de klok mee moeten draaien, daarna
    • Twee omwentelingen tegen de klok in, gevolgd door
    • Twee omwentelingen met de klok mee.

    Dit proces wordt oneindig herhaald.

    • Bekijk het resultaat in de Serial Monitor
    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Hoe meerdere 28BYJ-48 stappenmotoren aan te sturen

Laten we leren hoe u twee stappenmotoren onafhankelijk en tegelijk kunt aansturen.

Bedradingsschema voor twee 28BYJ-48 stappenmotoren

Arduino two stepper motor ULN2003 driver Wiring Diagram

This image is created using Fritzing. Click to enlarge image

Arduino Code voor twee 28BYJ-48 stappenmotoren

/* * 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-controls-28byj-48-stepper-motor-using-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, 11, 9, 10, 8); AccelStepper stepper_2(FULLSTEP, 7, 5, 6, 4); 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()); }

Aanvullende Kennis

1. Stappenmotor trilt tijdens beweging

Maak u geen zorgen als de stappenmotor trilt tijdens het bewegen. Dit is een eigenschap van de stappenmotor. De trilling kan verminderd worden door gebruik te maken van micro-stepping aansturing.

Ook door deze eigenschap kan de stappenmotor, wanneer correct aangestuurd, muzikale geluiden produceren alsof het een muziekinstrument is. Zie dit project op Arduino Project Hub.

2. Methoden om stappenmotoren aan te sturen

  • Full-step: De bewegingsstap is één volledige stap, overeenkomend met de waarde in graden opgegeven in het datasheet of de handleiding van de stappenmotor.
  • Half-step: verdeelt iedere volledige stap in twee kleinere stappen. De bewegingsstap is de helft van een full-step, waardoor de motor met dubbele resolutie kan bewegen.
  • Micro-step: verdeelt iedere volledige stap in vele kleinere stappen. De bewegingsstap is een fractie van de volledige stap, bijvoorbeeld 1/4, 1/8, 1/16, 1/32 of nog kleiner. Hierdoor beweegt de motor met hogere resolutie en soepeler bij lage snelheden. Hoe groter het aantal microstappen, hoe hoger de resolutie en hoe vloeiender de beweging.

Bijvoorbeeld, als het datasheet een motorstap van 1,8 graden vermeldt:

  • Full-step: de motor beweegt met 1,8 graden per stap <⇒ 200 stappen per omwenteling
  • Half-step: de motor beweegt met 0,9 graden per stap <⇒ 400 stappen per omwenteling
  • Micro-step: de motor kan bewegen met 0,45, 0,225, 0,1125, 0,05625 graden per stap <⇒ 800, 1600, 3200, 6400 ... stappen per omwenteling

De bovenstaande code gebruikt de full-step aansturingsmethode.

3. Resonantie probleem

Dit is een geavanceerde eigenschap. Beginners hoeven hier in eerste instantie geen rekening mee te houden. Resonantie treedt op bij een snelheid waarbij de stapfrequentie gelijk is aan de natuurlijke resonantiefrequentie van de motor. Dit kan leiden tot hoorbare veranderingen in geluid en toegenomen trillingen. In echte toepassingen moet de ontwikkelaar hier rekening mee houden.

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.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt het proces beter te begrijpen.

Opmerkingen

WARNING

Let op: deze tutorial is nog niet compleet. We zullen een bericht plaatsen op onze Facebook-pagina wanneer de tutorial compleet is. Like de pagina om op de hoogte te blijven.

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