Arduino L298P Motor Shield type-2
Release status: Documentation
Description | Arduino L298P Motor Shield type-2
|
License | |
Author | |
Contributors | |
Based-on | [[]]
|
Categories | |
CAD Models | |
External Link |
Introductie
Het L293D Motor driver shield is een van de beste manieren om gelijkstroom-, servo- en stappenmotoren te besturen, vooral als u Arduino UNO of MEGA gebruikt in projecten zoals robotica en CNC. Een andere veel voorkomende driver is de L298N-motordriver, maar in tegenstelling tot de L293D-driver bestuurt deze voornamelijk DC-motoren.
Voordat u naar het L93D-motorstuurprogramma-schild kijkt, moet u eerst leren hoe de L293D-motorstuurprogramma werkt en hoe deze wordt gebruikt om gelijkstroom- en stappenmotoren aan te sturen. Ik heb dit stuurprogramma in detail bekeken in een andere zelfstudie waarnaar kan worden verwezen via deze link. Tutorial
Opbouw
Dit shield is gebaseerd op de L293D IC en kan 4 bidirectionele gelijkstroommotoren, 2 stappenmotoren en 2 servomotoren aansturen. Het is voornamelijk compatibel met de Arduino UNO- en MEGA-kaarten.
Houd er rekening mee dat elk kanaal van deze module de maximale stroom van 1,2A heeft en niet werkt als de spanning meer dan 25v of minder dan 4,5v is.
De L293D is een tweekanaals H-Bridge-motordriver die een paar DC-motoren of een enkele stappenmotor kan aandrijven. Dit schild biedt in totaal vier H-bruggen en elke H-brug kan tot 0,6 A aan de motor leveren.
Het schild wordt ook geleverd met een 74HC595-schuifregister dat 4 digitale pinnen van de Arduino uitbreidt naar de 8 richtingsbesturingspinnen van twee L293D-chips.
Voedingsoverwegingen
Als u een enkele voeding gebruikt voor zowel Arduino als motoren, sluit u deze eenvoudig aan op de DC-aansluiting van het Arduino-bord of gebruikt u het EXT_PWR-blok op het schild. Zorg ervoor dat de voedingsjumper op het motorschild op zijn plaats zit. Deze methode is het beste als de voedingsspanning van de motor lager is dan 12V.
U kunt ook twee afzonderlijke voedingen gebruiken voor Arduino en motoren. U kunt bijvoorbeeld de Arduino van stroom voorzien via de USB en de motor uitschakelen via een gelijkstroomvoeding of u kunt twee afzonderlijke gelijkstroomvoedingen gebruiken voor de Arduino en motoren. Zorg er in dit geval voor dat de jumper van het motorschild verwijderd is.
Motoren aansturen met behulp van een Arduino
Voordat we het L293D-motorbesturingsschild met Arduino IDE kunnen gebruiken, moeten we de AFMotor.h-bibliotheek installeren. Hierin staan de commando's om gelijkstroom-, stappen- en servomotoren aan te sturen.
Gelijkstroommotoren
Dit motorschild kan gelijkstroommotoren aandrijven met spanningen tussen 4,5 en 25V. We gebruiken DC-motoren die geschikt zijn voor 9V. We zullen dus een externe 9V-voeding aansluiten op de EXT_PWR-terminal.
De motor is aangesloten op een van de M1-, M2-, M3- of M4-motorklemmen. In dit geval zijn Arduino pin11 voor M1, pin3 voor M2, pin5 voor M3, pin6 voor M4 en pins 4, 7, 8 en 12 allemaal in gebruik.
Stappenmotoren
Als u 28BYJ-48 unipolaire stepper gebruikt, hebben die motoren een nominaal vermogen van 5V en bieden ze 48 stappen per omwenteling. Sluit dus een externe 5V-voeding aan op de EXT_PWR-aansluiting. Vergeet niet de PWR-jumper te verwijderen.
De motor kan worden aangesloten op een van de vier klemmen M1-M2(poort1) en M3-M4(poort2). In dit experiment verbinden we het met poort 2.
Servomotoren
Servo's aansturen met L293D-motorschild is heel eenvoudig. Sluit gewoon de drie pinnen van de motor aan op de servoklemmen van het schild.
In dit geval zijn Arduino-pinnen 9, 10, 2 in gebruik en komt de stroom voor de servo's van de ingebouwde 5V-regelaar van de Arduino, dus je hebt geen externe voeding nodig op de EXT_PWR-terminal.
Voorbeeld code
Gelijkstroom motoren
#include <AFMotor.h>
AF_DCMotor motor(4);
void setup()
{
//Set initial speed of the motor & stop
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop()
{
uint8_t i;
// Turn on motor
motor.run(FORWARD);
// Accelerate from zero to maximum speed
for (i=0; i<255; i++)
{
motor.setSpeed(i);
delay(10);
}
// Decelerate from maximum speed to zero
for (i=255; i!=0; i--)
{
motor.setSpeed(i);
delay(10);
}
// Now change motor direction
motor.run(BACKWARD);
// Accelerate from zero to maximum speed
for (i=0; i<255; i++)
{
motor.setSpeed(i);
delay(10);
}
// Decelerate from maximum speed to zero
for (i=255; i!=0; i--)
{
motor.setSpeed(i);
delay(10);
}
// Now turn off motor
motor.run(RELEASE);
delay(1000);
}
Stappenmotoren
#include <AFMotor.h>
// Number of steps per output rotation
// Change this as per your motor's specification
const int stepsPerRevolution = 48;
// connect motor to port #2 (M3 and M4)
AF_Stepper motor(stepsPerRevolution, 2);
void setup() {
Serial.begin(9600);
Serial.println("Stepper test!");
motor.setSpeed(10); // 10 rpm
}
void loop() {
Serial.println("Single coil steps");
motor.step(100, FORWARD, SINGLE);
motor.step(100, BACKWARD, SINGLE);
Serial.println("Double coil steps");
motor.step(100, FORWARD, DOUBLE);
motor.step(100, BACKWARD, DOUBLE);
Serial.println("Interleave coil steps");
motor.step(100, FORWARD, INTERLEAVE);
motor.step(100, BACKWARD, INTERLEAVE);
Serial.println("Micrsostep steps");
motor.step(100, FORWARD, MICROSTEP);
motor.step(100, BACKWARD, MICROSTEP);
}
Servo's
Het motorschild breekt eigenlijk Arduino's 16bit PWM-uitgangspinnen 9 en 10 uit naar de rand van het schild met twee 3-pins headers en aangezien we de ingebouwde PWM-pinnen gebruiken, gebruikt de schets de ingebouwde Servo-bibliotheek van IDE.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
void setup()
{
// attaches the servo on pin 10 to the servo object
myservo.attach(10);
}
void loop()
{
// sweeps from 0 degrees to 180 degrees
for(pos = 0; pos <= 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
// sweeps from 180 degrees to 0 degrees
for(pos = 180; pos>=0; pos-=1)
{
myservo.write(pos);
delay(15);
}
}