Etape 4: Deuxième round du code pour moteur pas à pas alternatif et pilote
J’ai utilisé le EasyDriver de SparkFun ainsi que d’un moteur pas à pas de NEME17 lors de mes premiers essais.
J’ai un damier de moteur et le pilote de mon vieux RepStrap, (NEM23 stepper avec RepRap stepper motor driver v1.2 par Zach Hoeken). L’utilisation cela nécessite deux adujstemnts mineures au code.
1 - les broches enable sont opposées.
EasyDriver : Faible = Enable
Steper pilote v1.2 : High = Enable
2 - je n’arrive pas à conduire les NEM23 aussi vite que le NEM17. Les deux cartes permettent de basculer entre le plein et la demi-étape. Je suis probablement moitié marcher la NEM23 et complète exécution pas à pas le NEM17. Au lieu de comprendre la différence réelle, j’ai juste ajusté le délai entre les étapes décrites dans le code.
Voici le code. J’ai ajouté des NOTES au code pour montrer où j’ai apporté des modifications.
//////////////////// ARDUINO CODE /////////////////////////////////////
joystickj avec 2 POTS pour contrôler un moteur pas à pas et la vitesse du moteur DC et la direction *** / /
NOTE : modifié pour exécuter pas à pas NEM23 avec Stepper Motor Driver v1.2 de RepRap
déclarer des épingles pour moteurs pas à pas
int potPin_X = 1 ;
int Step_X = 13 ;
int Dir_X = 12 ;
int Enable_X = 8 ;
déclarer les valeurs pour moteurs pas à pas
int Speed_X = 0 ; Vitesse de l’étape (délai entre les étapes)
int val_X = 0 ;
int h = 0 ;
déclarer les épingles pour moteur DC A
int potPin_A = 2 ; Sélectionnez l’entrée pin pour le potentiomètre
int val_A = 0 ; variable pour stocker la valeur provenant de la sonde
Déclarer des variables pour DC A
int j = 0 ;
int Dir_A = 4 ;
int Speed_A = 5 ;
void setup() {}
Configuration des broches de stepper
pinMode (Step_X, sortie) ;
pinMode (Dir_X, sortie) ;
pinMode (Enable_X, sortie) ;
Configuration des broches moteur A DC
pinMode (Dir_A, sortie) ;
pinMode (Speed_A, sortie) ;
Serial.Begin(9600) ; Notez que serial comm peut être utilisé pour déboguer
mais il ralentit le code et ralentir le moteur pas à pas beaucoup (et être source de confusion pour moi)
}
void loop() {}
LECTURE DE STEPPER ET CONTROLL / / /
lire la position du levier de commande et calculer les valeurs pour moteur pas à pas
val_X = analogRead(potPin_X) ; lire la valeur de la sonde
h = val_X - 517 ; 517 est positions centrales - Comment loin du centre ?
h = abs(h) ; valeur absolue
Speed_X = 70000/h ; Ce math inverse la valeur et échelles que nécessaire (valeur trouvée par essais et erreurs)
Le délai entre les étapes permettra de déterminer la vitesse du moteur
Ainsi, retarder jusqu'à = vitesse vers le bas
Remarque : Speed_X = 70000/h a bien fonctionné pour cette combinaison : EasyDriver -> stepper NEM17
Speed_X = 160000/h ; NOTE : Calcul de la vitesse pour Stepper Motor Driver V1-2 (RepRap) -> pas à pas NEM23
commande du moteur pas à pas / /
REMARQUE :
pour EasyDriver : HIGH = disable
pour RepReap Stepper pilote v1.2 : faible = Disable
Si (val_X > = 530) {}
digitalWrite(Enable_X,HIGH) ; Enable
digitalWrite (Dir_X, élevé) ; Jeu de direction
digitalWrite(Step_X,HIGH) ;
delayMicroseconds(2) ;
digitalWrite(Step_X,LOW) ;
delayMicroseconds(Speed_X) ;
}
Si (val_X < = 500) {}
digitalWrite(Enable_X,HIGH); / / activer
digitalWrite (Dir_X, basse) ; Autre sens
digitalWrite(Step_X,HIGH) ;
delayMicroseconds(2) ;
digitalWrite(Step_X,LOW) ;
delayMicroseconds(Speed_X) ;
}
Si (val_X < = 530 & & val_X > = 500) {}
digitalWrite(Enable_X,LOW) ; désactiver le moteur pas à pas si le joystic est situé dans le centre
pour EasyStepper : HIGH = disable
pour RepReap Stepper pilote v1.2 : faible = Disable
}
A MOTEUR DC - LIRE ET CONTRÔLER / / /
Lire l’emplacement du joystick et de calculer la distance et du centre
val_A = analogRead(potPin_A) ; lire la valeur de la sonde
j = val_A - 517 ; 517 est positions centrales - Comment loin du centre
j = abs(j) ; valeur absolue
mettre quelques limites sur j pour garder les valeurs PWM utile
inférieur à 100, le moteur ne se déplacent et PWM maximum est de 255
Si (j > = 510) {}
j = 510 ; le plus la goupille PWM peut faire est de 255
}
Si (j < = 200 & & j > = 10) {}
j = 200 ; au-dessous de 100 PWM, le moteur fait un pich élevé son et ne bouge pas
}
Si (j < = 10) {}
j = 0 ; inférieur à 10, le joystick est très proche de centre
}
Exécuter le moteur de C.C A basé sur les entrées analogiques de la manette de jeu
Si (val_A > = 530) {}
digitalWrite (Dir_A, élevé) ; autre sens
analogWrite (Speed_A, j/2) ; PWM à (diviser par 2 parce que max est de 255)
}
Si (val_A < = 500) {}
digitalWrite (Dir_A, basse) ; //
analogWrite (Speed_A, j/2) ; //
}
Si (val_A < = 530 & & val_A > = 500) {}
analogWrite (Speed_A, 0) ; Mettez hors tension si le joystick se trouve dans le centre
}
imprimer les valeurs pour le débogage
Serial.Print(val_A) ; Envoyer des numéros à PC, ainsi vous pouvez voir ce que ça va
Serial.Print(",") ;
Serial.println(j) ;
}