Mise à jour le 25/02/2021 :
Sommaire :
- Principe de fonctionnement pour le pilotage
- Sélection de la résolution et du réglage du courant sur le driver
- Pilotage sommaire d’un moteur pas à pas avec driver avec l’utilisation de la fonction delay()
- Fonctionnement d’un moteur pas à pas avec Arduino avec la fonction micros
- Principe de pilotage d’un moteur pas à pas avec un Arduino et un driver de type DRI0043
- Matériel utile mais pas nécessaire pour la réalisation de ce tuto
- Schéma électrique
- Tutoriel sur le principe de pilotage d’un moteur pas à pas avec Arduino
- Programme pour le tuto
- Pour tout probléme
- Retour au menu
.
Principe de fonctionnement pour le pilotage avec Arduino |
.
Lorsque la broche EN est à l’état bas sur le driver, le moteur n’est plus sous tension , il est en mode off-line . Dans ce mode, vous pouvez régler manuellement la position de l’arbre moteur
Lorsque la broche EN est à l’État haut on ne peut plus déplacer le moteur librement il est en mode automatique
La broche DIR permet de définir la direction du moteur
La broche PULSE permet de définir la vitesse et le nombre de pas sur le moteur.
.
Retour au sommaire
Sélection de la resolution et du réglage du courant |
.
Réglage du courant
Pour un moteur donné, plus le courant du driver est élevé, plus le couple est élevé, mais cela n’entraîne plus d’échauffement dans le moteur et le driver. Par conséquent, le courant de sortie est en général ajusté de façon à éviter une surchauffe du moteur lors d’une utilisation prolongée. Le raccordement en série ou en parallèle des bobinages modifie de manière significative les inductances et résistance résultantes d’où l’importance d’en tenir compte lors du choix du courant de sortie.
L’intensité communiquée par le fabricant du moteur est importante pour sélectionner le courant, mais il faut également tenir compte du mode de raccordement.
.
Retour au sommaire
Pilotage sommaire d’un moteur pas à pas avec driver avec
|
.
Commentaire sur le programme :
Dans ce programme, nous avons utilisé la fonction delay () car le principe de fonctionnement est relativement simple, mais qui a pour inconvénient de bloquer le programme pendant l’utilisation de celle-ci. Ce qui pose un problème lors d’autres exécutions comme par exemple des systèmes de synchronisation ou des mouvements qui doivent s’opérer en parallèle.
Il est donc plus intéressant dans un code plus élaboré d’utiliser la fonction Millis() ou Micros() qui est une fonction non bloquante
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
// // //*********************************************************** // RedOhm // le 08/01/2021 // // Principe de pilotage d'un moteur pas a pas avec un Arduino et // un driver de type DRI0043 (fonctionnement identique avec le DM860) // // Ce programme est un logiciel libre: vous pouvez le redistribuer // et / ou le modifier // Ce programme est distribué dans l'espoir qu'il vous sera utile, // mais sans aucune garantie de fonctionnement // // Par: Mazelin Herve // IDE Arduino 1.8.12 //********************************************************** // Affectation des sortie de la carte Ardunio pour le pilotage // du driver DRI0043 int PUL=12; //define Pulse pin int DIR=10; //define Direction pin int ENA=11; //define Enable Pin // Rappel sur les variables // Les variables déclarées en tête de programme sont des variables globales // et peuvent être utilisées partout dans le programme. int basse_de_temps ; //-------------------------------------------------------------------- // Un programme Arduino doit impérativement contenir cette fonction // Elle ne sera exécutée qu'une seule fois au démarrage du microcontroleur // Elle sert à configurer globalement les entrées sorties //-------------------------------------------------------------------- void setup() { pinMode (PUL, OUTPUT); pinMode (DIR, OUTPUT); pinMode (ENA, OUTPUT); basse_de_temps = 4550; } // ---------------------------------------------------------------------- // Le programme principal s’exécute par une boucle infinie appelée Loop () // ---------------------------------------------------------------------- void loop() { // Marche avant digitalWrite(DIR,LOW); digitalWrite(ENA,HIGH); for (int i=0; i<3200; i++) { digitalWrite(PUL,HIGH); delayMicroseconds(basse_de_temps); digitalWrite(PUL,LOW); delayMicroseconds(basse_de_temps); } delay (1000); digitalWrite(DIR,HIGH); digitalWrite(ENA,HIGH); for (int i=0; i<3200; i++) { digitalWrite(PUL,HIGH); delayMicroseconds(basse_de_temps); digitalWrite(PUL,LOW); delayMicroseconds(basse_de_temps); } delay (1000); } |
.
Retour au sommaire
Fonctionnement d’un moteur pas à pas avec Arduino
|
.
Principe de pilotage d’un moteur pas à pas avec un Arduino et un driver de type DRI0043
- Création d’un générateur d’impulsion pour le déplacement et la vitesse du moteur ( avec la fonction micros() )
- Création de la fonction débrayage du moteur
- Inversion du sens de rotation du moteur
- Création d’un bouton départ cycle
.
Matériel utile mais pas nécessaire pour la réalisation de ce tuto
Shield E/S Mega DFR0165
Shield d’expansion E/S de DFRobot permettant d’accéder à toutes les entrées/sorties d’une carte compatible Arduino Mega® via des connecteurs 3 broches (Vcc, Gnd, Signal). La carte est équipée de 3 connecteurs pour module Xbee ou compatible et d’un port micro-SD. Sélection de la source d’alimentation.
- La carte possède un régulateur de tensions intégrées pour le 3,3V. Un bouton poussoir pour la réinitialisation de la carte et une led intégrée que l’on peut utiliser pour des tests ou pour debugger un programme.
- Un connecteur d’alimentation externe pour servomoteur si vous deviez connecter une large gamme de servomoteur.
- Un support de carte SD qui nous permet d’avoir une mémoire supplémentaire
.
Schéma electrique
.
.
Tutoriel sur le principe de pilotage d’un moteur pas à pas avec Arduino
.
.
Programme pour le tuto .
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
// // //*********************************************************** // RedOhm // le 30/01/2021 // // Principe de pilotage d'un moteur pas a pas avec un Arduino et // un driver de type DRI0043 (fonctionnement identique avec le DM860) // but : // 1 - creation d'un generateur d'impulsion pour le deplacement // et la vitesse du moteur ( avec la fonction micros() ) // 2 - Creation de la fonction debrayage du moteur // 3 - Inversion du sens de rotation du moteur // 4 - Creation d'un bouton depart cycle // // Ce programme est un logiciel libre: vous pouvez le redistribuer // et / ou le modifier // Ce programme est distribué dans l'espoir qu'il vous sera utile, // mais sans aucune garantie de fonctionnement // // Par: Mazelin Herve // IDE Arduino 1.8.12 //********************************************************** // Declaration des variables demarrage // unsigned long-> déclare une variable de type long non signé // pour la base de temps il y a 1 000 microsecondes dans une milliseconde // et // 1 000 000 microsecondes dans une seconde. unsigned long demarrage = micros(); // Declaration des variables // int -> declare une variable du type int (pour integer, entier en anglais) // elles peuvent stocker des valeurs de - 32 768 à 32 767 int base_de_temps1 = 1 ; // Affectation des sorties de la carte Ardunio pour le pilotage // du driver DRI0043 // une impulsion montante ou descendante sur cette entrée fait // avancer le moteur d’un pas. La tension de l’impulsion doit // être de 4,5 à 5 V pour un état HAUT et 0 à 0,5 V pour un état BAS. // La largeur d’impulsion doit être de minimum 2,5 μs pour un // fonctionnement correct. int PUL=12; // Definit le sens de rotation en fonction de l'etat bas ou haut int DIR=10; // ce signal est utilisé pour permettre ou interdire l’utilisation du // driver. Le moteur est hors tension int ENA=11; // déclaration de l'entrée du bouton branché sur la broche 14 // de votre carte Arduino pour le bouton depart cycle avec la fonction // telerupteur int bouton14 = 14; // variable du type int pour stocker les valeurs de passage du bouton14 int bouton14v; // creation d'une memoire_2 et forçage a 0 de la variable // etat du telerupteur int memoire_2=0; // etat precedent du bouton et forçage a 0 de la variable int etat_bouton14v=0 ; // déclaration de l'entrée du bouton branché sur la broche 15 // pour le debrayage du moteur int bouton_debrayage = 15; int bouton_debrayage_v; // déclaration de l'entrée du bouton branché sur la broche 16 // de votre carte Arduino pour le bouton marche avant ou arriere int bp_avant_arriere = 16; // variable du type int pour stocker les valeurs de passage du bouton // bp_avant-arriere int bp_avant_arrierev; // creation d'une memoire_avant_arriere et forçage a 0 de la variable // etat du telerupteur int memoire_avant_arriere=0; // etat precedent du bouton et forçage a 0 de la variable int etat_avant_arriere=0 ; // Declaration de pin pour le voyant depart cycle int voyant_depart_cycle = 8; // Declaration de pin pour le voyant marche avant vert int voyant_vert_mar = 20; // Declaration de pin pour le voyant marche arriere rouge int voyant_rouge_arr = 21; /* * Un programme Arduino doit impérativement contenir cette fonction * Elle ne sera exécutee une seule fois au démarrage du microcontroleur * Elle sert à configurer globalement les entrées sorties * */ void setup() { // Configure la broche spécifiée pour qu'elle se comporte soit en entrée, // soit en sortie. // Configuration des broches pour le driver pinMode (PUL, OUTPUT); pinMode (DIR, OUTPUT); pinMode (ENA, OUTPUT); // Configuration des broches pour les boutons et le voyants pinMode(bouton14,INPUT); pinMode(bouton_debrayage,INPUT); pinMode(bp_avant_arriere,INPUT); pinMode(voyant_depart_cycle,OUTPUT); pinMode(voyant_vert_mar,OUTPUT); pinMode(voyant_rouge_arr,OUTPUT); } // Le programme principal s’exécute par une boucle infinie appelée Loop () void loop() { // ******************************************* // Demande de depart cycle // ******************************************* bouton14v = digitalRead(bouton14); // Creation un telerupteur // Compare la variable à gauche avec la valeur ou la variable // à droite . Renvoie l'information vraie lorsque les deux // variables ne sont pas égales. if (bouton14v!=etat_bouton14v) { if (!bouton14v) { //Inversion de la valeur de la variable memoire memoire_2=!memoire_2; } //Inversion de la valeur de la variable memoire memoire_2=!memoire_2; } // operation consitant a memoriser l'anciennne valeur de la // variable etat_bouton14v=bouton14v; if ( memoire_2 == 1) { digitalWrite(voyant_depart_cycle,HIGH); //appel de la fonction de deplacement moteur deplacement(); } else if ( memoire_2 == 0) { digitalWrite(voyant_depart_cycle,LOW); } // **** Fin de demande de depart cycle ******* // ******************************************* // Demande de debrayage du moteur // ******************************************* // debrayage du moteur de son driver bouton_debrayage_v = digitalRead(bouton_debrayage); if ( bouton_debrayage_v == 1 ) { digitalWrite(ENA,LOW); } // ******* Fin de demande debrayage ********** // ******************************************* // Selection du sens de deplacement // de l'actionneur // ******************************************* // selection du sens de deplacement du moteur bp_avant_arrierev = digitalRead(bp_avant_arriere); // Creation un telerupteur // Compare la variable à gauche avec la valeur ou la variable // à droite . Renvoie l'information vraie lorsque les deux // variables ne sont pas égales. if (bp_avant_arrierev!=etat_avant_arriere) { if (!bp_avant_arrierev) { //Inversion de la valeur de la variable memoire memoire_avant_arriere=!memoire_avant_arriere; } //Inversion de la valeur de la variable memoire memoire_avant_arriere=!memoire_avant_arriere; } // operation consitant a memoriser l'anciennne valeur de la // variable etat_avant_arriere = bp_avant_arrierev; if ( memoire_avant_arriere == 1 ) { digitalWrite(voyant_rouge_arr,LOW); digitalWrite(voyant_vert_mar,HIGH); // Marche avant digitalWrite(DIR,LOW); digitalWrite(ENA,HIGH); } else if (memoire_avant_arriere == 0) { digitalWrite(voyant_vert_mar,LOW); digitalWrite(voyant_rouge_arr,HIGH); // Marche arriere digitalWrite(DIR,HIGH); digitalWrite(ENA,HIGH); } // **** Fin de la selection avant arriere **** } //============================================== //Fonction de deplacement du moteur //============================================== void deplacement() { // la ligne if effectue la difference entre le temps actuel et le // temps de debut de boucle . if (micros()-demarrage>350) { //Inversion de la valeur de la variable memoire et envoie l'information //a la broche digitalWrite(PUL,base_de_temps1=!base_de_temps1); // on reinitialise la variable demarrage avec le contenu de micros() demarrage=micros(); } } |
.
Retour au sommaire
Pour tout probléme |
.
Pour tout problème de téléchargement ou pour nous suivre sur les réseaux sociaux voici les plateformes sur lesquelles nous éditons.
Cliquez sur celle qui vous intéresse .
.