L298N Stepper Motor Driver Controller Board for Arduino









http://www.dealextreme.com/p/l298n-stepper-motor-driver-controller-board-for-arduino-120542

AKA Keyes L298

Montage
ENA : Commande PWM du moteur A IN1 : Entrée de commande de sens du pont A IN2 : Entrée de commande de sens du pont A IN3 : Entrée de commande de sens du pont B IN4 : Entrée de commande de sens du pont B ENB : Commande PWM du moteur B GND : Masse +5V : Sortie régulée en 5V

Code de test d'après http://mchobby.be/wiki/index.php?title=Pont-H_L298N // from http://mchobby.be/wiki/index.php?title=Pont-H_L298N

//-- MOTEUR A -- int ENA=5; //Connecté à Arduino pin 5(sortie pwm) int IN1=2; //Connecté à Arduino pin 2 int IN2=3; //Connecté à Arduino pin 3

//-- MOTEUR B -- int ENB=6; //Connecté à Arduino pin 6(Sortie pwm) int IN3=4; //Connecté à Arduino pin 4 int IN4=7; //Connecté à Arduino pin 7

int curDirA=0; // 1=forward, -1=reverse int curSpeedA=0; int curDirB=0; // 1=forward, -1=reverse int curSpeedB=0; int batteryLevel; int batteryNominalLevel=111; // 11.1V with Mystery 11.1V 2200mAh Lithium Polymer Rechargeable Battery (SKU 46058) int MAX_SPEED=200; int curAccelerationStep=32;

void setup { configAB; }

void loop { int i; stopAB; delay(1000); forwardA; reverseB; for(i=0; i<255; i+=32) { speedA(i); speedB(i); delay(500); } delay(5000); for(i=255; i>0; i-=32) { speedA(i); speedB(i); delay(500); } stopAB; delay(1000); forwardB; reverseA; for(i=0; i<255; i+=32) { speedA(i); speedB(i); delay(500); } delay(5000); for(i=255; i>0; i-=32) { speedA(i); speedB(i); delay(500); } }

void configAB { pinMode(ENA,OUTPUT); pinMode(ENB,OUTPUT); pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); }

void stopA { digitalWrite(ENA,LOW);// Moteur A - Ne pas tourner (désactivation moteur) }

void stopB { digitalWrite(ENB,LOW);// Moteur B - Ne pas tourner (désactivation moteur) }

void stopAB { stopA; stopB; //delay(??); }

void forwardA { if(curDirA==1) return; stopA; curDirA=1; digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); }

void reverseA { if(curDirA==-1) return; stopA; curDirA=-1; digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); }

void forwardB { if(curDirB==1) return; stopB; curDirB=1; digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); }

void reverseB { if(curDirB==-1) return; stopB; curDirB=-1; digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); }

void speedA(int speed) { if(curDirA==0) return; curSpeedA=(speed>=MAX_SPEED)?MAX_SPEED:speed; analogWrite(ENA,curSpeedA); }

void speedB(int speed) { if(curDirB==0) return; curSpeedB=(speed>=MAX_SPEED)?MAX_SPEED:speed; analogWrite(ENB,curSpeedB); }

void speedAB(int speed) { speedA(speed); speedB(speed); }

void rotate { forwardA; reverseB; }

void antirotate { forwardB; reverseA; }

Pilotage via le moniteur série de l'IDE Arduino
Liste des commandes sur 1 octet
 * s or S
 * f
 * x
 * l
 * r
 * 1
 * 2
 * 3
 * 4
 * 5

Test

 * High Torque 30RPM 12V DC Geared Motor (SKU 91627) (works fine)
 * Base robot LynxMotion A4WD1 Aluminium (works fine)
 * Wild Thumper (not enough powerful)

Projets @ AIR

 * RobAIR 2013 Configuration 1

Liens

 * Très bonnes explications sur http://mchobby.be/wiki/index.php?title=Pont-H_L298N
 * http://drbitblog.wordpress.com/2012/11/23/controle-de-motor-dc-com-l298/
 * http://www.rkeducation.co.uk/images/Schematics/RKL298schematic.jpg