//Mon_Stepper250218 //Pour Moteurpas à pas 28BYJ48, 5V //3 modes possibles de fonctionnement: WAVE,FULL-STEP,HALF-STEP, voir loop() //1 pas = 11°25, 32 pas par tour puis reduction mecanique de 64 //La fréquence d’excitation maximale théorique est 100Hz, soit tActivation = 10ms. //Pour un tour de moteur (Wave, Full Step) il faut donc au minimum 10ms*32 = 320ms, //soit une vitesse maximale de 1/0.32 = 3.12 t/s ou 187 t/mn. //Après reduction mécanique de 64, l’arbre de sortie a donc une vitesse maxi de 187/64 = 2.9t/mn //Dans la pratique, j’ai pu pousser la fréquence d’excitation à 500 Hz (voir 900Hz ! ) , //ce qui donne 15 t/mn en sortie, sans garantie sur la durée de l’expérience... //**************Paramètre ajustable*************** int tActivation = 5;//Durée d'un pas en ms,10ms mini theorique, tolère 2 à 3 en pratique //********************************************** #define SetAN digitalWrite(AN,1)//Excite la 1/2 bobine AN du stator qui génère un pole Nord #define ResetAN digitalWrite(AN,0) //Desexcite AN #define SetBS digitalWrite(BS,1) #define ResetBS digitalWrite(BS,0) #define SetAS digitalWrite(AS,1) #define ResetAS digitalWrite(AS,0) #define SetBN digitalWrite(BN,1) #define ResetBN digitalWrite(BN,0) int AN = 8; // Fil orange int BS = 9; // Fil jaune int AS = 10; // Fil rose int BN = 11; // Fil bleu // Fil rouge, point milieu des bobines A et B, à la masse void Full_Step()//acti = 1ms pour 1t en 4s, c'est le mini absolu { ResetBN; SetBS; delay(tActivation); //40ms 1t en 80s et I maxi à 330mABeaucoup de bruit au scope ResetAN; SetAS; delay(tActivation); ResetBS; SetBN; delay(tActivation); ResetAS; SetAN; delay(tActivation); } void HalfStep() //acti = 2 ms, 1t =8s,Supporte 1ms 1t=3s { ResetBN; delay(tActivation);//AN actif, 0ms 1 t en 40s, Ialim= 270mA //20ms 1t en 80s 280mA, 40ms très très lent et plafonne à 280mA SetBS; delay(tActivation); //+AN actif ResetAN; delay(tActivation);//BS actif SetAS; delay(tActivation);// + BS actif ResetBS; delay(tActivation);//AS actif SetBN; delay(tActivation);//+AS actif ResetAS; delay(tActivation);//BN actif SetAN; delay(tActivation);//+BN actif } void Wave()//WAVE: tActivation = 10ms pour 1 tour en 20s //Avec la seule bobine AN, et AS, sans B, ça tourne (mais USB seul pas d'alim sinon stop) 10ms, 1 tour= 10s //BN et BN seuls ne tourne pas!! Pourquoi? { SetAN; delay(tActivation); ResetAN;//40ms 1t en 80s,I maxi =210mA SetBS; delay(tActivation); ResetBS;//300cycles de10ms, 12s SetAS; delay(tActivation); ResetAS; SetBN; delay(tActivation); ResetBN; } void setup() { pinMode(AN, OUTPUT); pinMode(BS, OUTPUT); pinMode(AS, OUTPUT); pinMode(BN, OUTPUT); } void loop() { Wave(); //Un mode à choisir // Full_Step(); //HalfStep(); }