Arduino Nano - 28BYJ-48 Stappenmotor ULN2003 Driver

Deze tutorial laat u zien hoe u een Arduino Nano gebruikt om een 28BYJ-48 stappenmotor aan te sturen via de ULN2003 Driver. We leren in detail:

Arduino Nano ULN2003 28BYJ-48 stepper motor

Hardware Benodigd

1×Official Arduino Nano
1×Alternatief: DIYables ATMEGA328P Nano Development Board
1×USB A naar Mini-B USB kabel
1×28BYJ-48 stappenmotor + ULN2003 Driver Module
1×5V Voedingsadapter
1×DC-Stroomaansluiting
1×Jumper Draden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Breakout Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Stromsplitter voor Arduino Nano

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

Stappenmotoren zijn uitstekend geschikt voor positieregeling. Ze verdelen een volledige omwenteling in een aantal gelijke "stappen". Deze motoren worden veel gebruikt in apparaten zoals printers, 3D-printers, CNC-machines en industriële automatisering.

Een betaalbare manier om kennis te maken met stappenmotoren is het gebruik van de 28BYJ-48 stappenmotor. Deze wordt meestal geleverd met een driverboard gebaseerd op de ULN2003, wat het gebruik eenvoudig maakt.

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

Daarnaast is de motor uitgerust met een 1/64 reductieratel. Dit betekent 32 x 64 = 2048 stappen per volledige omwenteling. Elke stap is daarmee gelijk aan 360°/2048 = 0,1758°.

Conclusie: In full-step modus heeft de motor 2048 stappen nodig om één volledige omwenteling te maken.

De 28BYJ-48 Stappenmotor met ULN2003 Driver Pinout

De 28BYJ-48 stappenmotor heeft 5 pinnen. U hoeft zich niet druk te maken over de details van deze pinnen; ze hoeven alleen correct aangesloten te worden op de ULN2003 motor driver connector.

28BYJ-48 stepper motor

Over de ULN2003 Stappenmotor Driver

De ULN2003 is een veelgebruikte motor driver module voor stappenmotoren.

  • Hij bevat vier LED’s die aangeven welke van de vier stuuringsingangen actief zijn, wat een visueel effect geeft tijdens het stappen van de motor.
  • Daarnaast beschikt hij over een ON/OFF jumper om de voeding van de stappenmotor aan of uit te schakelen.

ULN2003 Pinout

ULN2003 Stepper Motor Driver pinout

De ULN2003 module heeft 6 pinnen en een vrouwelijke connector:

  • IN1 pin: wordt gebruikt om de motor aan te sturen. Deze moet verbonden worden met een uitvoerpin op de Arduino Nano.
  • IN2 pin: gebruikt om de motor aan te sturen. Verbinden met een Arduino Nano uitvoerpin.
  • IN3 pin: gebruikt om de motor aan te sturen. Verbinden met een Arduino Nano uitvoerpin.
  • IN4 pin: gebruikt om de motor aan te sturen. Verbinden met een Arduino Nano uitvoerpin.
  • GND pin: is de gemeenschappelijke massa. Moet verbonden worden met de GND van zowel de Arduino Nano als de externe voeding.
  • VDD pin: levert voeding voor de motor. Wordt aangesloten op de externe voeding.
  • Motor Connector: hier wordt de motor op aangesloten.

※ Notiz:

  • De spanning van de externe voeding moet gelijk zijn aan de spanning van de stappenmotor. Bijvoorbeeld, als een stappenmotor werkt op 12V DC, gebruiken we een 12V voeding. Voor de 28BYJ-48 stappenmotor is dat 5V DC, dus gebruiken we een 5V voeding.
  • Sluit ondanks het feit dat de stappenmotor 5V gebruikt de VDD pin NIET aan op de 5V pin van de Arduino Nano. Sluit deze altijd aan op een externe 5V voeding, omdat de motor anders te veel stroom trekt via de Arduino.

Bedradingsschema

Arduino Nano stepper motor ULN2003 driver wiring diagram

This image is created using Fritzing. Click to enlarge image

Het is niet nodig om op de kleur van de draden van de stappenmotor te letten. Het enige dat telt is dat de mannelijke connector van de 28BYJ-48 stappenmotor correct wordt aangesloten op de vrouwelijke connector van de ULN2003 driver.

Hoe programmeert u het aansturen van een stappenmotor

Er zijn drie manieren om een stappenmotor te regelen:

  • Full-step (volle stap)
  • Half-step (halve stap)
  • Micro-step (microstap)

Voor basis toepassingen kunt u de full-step methode gebruiken. De details van deze drie methoden worden in de laatste sectie van deze handleiding besproken. Het programmeren van deze technieken kan ingewikkeld zijn. Gelukkig zijn er veel bibliotheken die het werk al voor u doen, dus hoeft u die alleen te gebruiken.

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

  • Het een blocking library is, wat betekent dat de Arduino Nano geen andere taken kan uitvoeren tijdens het aansturen van de stappenmotor.
  • Het niet genoeg functies biedt.

In plaats daarvan raden we de AccelStepper bibliotheek aan. Deze biedt:

  • Acceleratie
  • Deceleratie
  • Full-step en half-step aansturing
  • Meerdere gelijktijdige stappenmotoren, met onafhankelijke gelijktijdige stapuitvoering per motor
  • Nadeel: Geen ondersteuning voor micro-step aansturing

Arduino Nano Code

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-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, 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

  • Klik op het Libraries icoon in de linker balk van de Arduino IDE.
  • Zoek naar “AccelStepper” en zoek de AccelStepper bibliotheek gemaakt door Mike McCauley.
  • Klik op de Installeren knop om de AccelStepper bibliotheek toe te voegen.
Arduino Nano AccelStepper library
  • Kopieer de bovenstaande code en open deze met de Arduino IDE.
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino Nano te uploaden.
  • U zult zien dat de motor gaat draaien. Eerst maakt hij één omwenteling met de klok mee, dan twee omwentelingen tegen de klok in en daarna twee omwentelingen met de klok mee.

Deze procedure wordt continu herhaald.

  • Controleer de uitvoer in de Seriële Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Hoe meerdere 28BYJ-48 stappenmotoren aan te sturen

Laten we ontdekken hoe u twee stappenmotoren afzonderlijk maar tegelijkertijd kunt aansturen.

Bedradingsschema voor twee 28BYJ-48 stappenmotoren

Arduino Nano two stepper motor ULN2003 driver wiring diagram

This image is created using Fritzing. Click to enlarge image

Arduino Nano Code voor twee 28BYJ-48 stappenmotoren

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-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, 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 u merkt dat de stappenmotor trilt tijdens het draaien. Dit is een karakteristiek van een stappenmotor. U kunt de trillingen verminderen door gebruik te maken van microstepping aansturing.

Daarnaast kan een goed aangestuurde stappenmotor door de trillingen geluiden produceren, bijna als een muziekinstrument. Een voorbeeld hiervan vindt u hier op Hackster.io.

2. Methoden om stappenmotoren aan te sturen

  • Full-step: De bewegingseenheid is één stap, gelijk aan de graadwaarde genoemd in het datasheet of handboek van de stappenmotor.
  • Half-step: Verdeelt elke volledige stap in twee kleinere stappen. De bewegingseenheid is de helft van een volledige stap. Dit zorgt voor dubbele resolutie.
  • Micro-step: Verdeelt elke volledige stap nog verder in veel kleinere stappen. De bewegingseenheid is een fractie van een volledige stap, bijvoorbeeld 1/4, 1/8, 1/16, 1/32 etc. Dit zorgt voor een hogere resolutie en maakt de motor soepeler bij lage snelheden. Hoe groter de deler, hoe hoger de resolutie en hoe soepeler de beweging.

Als het datasheet bijvoorbeeld 1,8 graden per stap aangeeft:

  • Full-step: de motor draait in stappen van 1,8 graden, dus 200 stappen per omwenteling.
  • Half-step: de motor draait in stappen van 0,9 graden, dus 400 stappen per omwenteling.
  • Micro-step: de stappen worden bijvoorbeeld 0,45, 0,225, 0,1125, 0,05625 graden, wat resulteert in 800, 1600, 3200, 6400... stappen per omwenteling.

De code in deze tutorial gebruikt de full-step methode.

3. Resonantieprobleem

Dit is voor gevorderde gebruikers. Beginners hoeven zich hier niet druk over te maken. Het kan optreden bij bepaalde snelheden wanneer de stapfrequentie gelijk is aan de natuurlijke resonantiefrequentie van de motor. Dit kan een hoorbare verandering in het geluid van de motor geven en een toename van trilling. Ontwikkelaars moeten hier rekening mee houden in praktische toepassingen.

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!