Nous allons voir dans ce tutoriel, l’utilisation du CNC Shield V3 pour Arduino. Pour pouvoir gérer une machine comme une CNC ou une imprimante 3D avec plusieurs moteurs pas-à-pas, il est intéressant d’avoir une carte qui facilite la connexion des différents éléments de la machine. C’est le rôle du shield CNC.
Matériel
- Arduino UNO
- CNC Shield V3
- Stepper driver A4988 ou DRV8825 ou SilentStepStick
- Câble USBA mâle vers USB B mâle
Principe de fonctionnement
Le CNC Shield V3 est une carte d’extension pour Arduino UNO ou Mega permettant de s’interfacer facilement à des contrôleurs de moteur pas-à-pas, type A4988. Il permet aussi de piloter et gérer les éléments nécessaires au fonctionnement d’une fraiseuse numérique (CNC). C’est-à-dire, des fins de course (end stops), ventilateur, etc,
Schéma
Le Shield se place sur le microcontrôleur Arduino et les moteurs se branchent directement sur les broches de sorties des drivers. Vous pouvez choisir les drivers que vous souhaitez en fonction de la puissance de vos moteurs et de votre applications (A4988, DRV8825, SilentStepStick ,TMC ).
Des borniers sont disponibles en dessous de chaque driver pour sélectionner la résolution des pas. Ces bornier sont reliées aux broche MS0, MS1 et MS2 des contrôleurs.
Avant de brancher les moteurs, veillez à régler le limiteur de courant de chaque contrôleur en fonction du moteur qu’il pilote.
Code
Pour piloter un moteur pas-à-pas à l’aide CNC Shield V3, nous nous reportons au brochage du shield ce qui nous donne accès aux broches à appeler pour envoyer les commandes au contrôleur de moteur (DRV8825, A4988 ou SilentStepStick).
const int enPin=8; const int stepXPin = 2; //X.STEP const int dirXPin = 5; // X.DIR const int stepYPin = 3; //Y.STEP const int dirYPin = 6; // Y.DIR const int stepZPin = 4; //Z.STEP const int dirZPin = 7; // Z.DIR int stepPin=stepYPin; int dirPin=dirYPin; const int stepsPerRev=200; int pulseWidthMicros = 100; // microseconds int millisBtwnSteps = 1000; void setup() { Serial.begin(9600); pinMode(enPin, OUTPUT); digitalWrite(enPin, LOW); pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); Serial.println(F("CNC Shield Initialized")); } void loop() { Serial.println(F("Running clockwise")); digitalWrite(dirPin, HIGH); // Enables the motor to move in a particular direction // Makes 200 pulses for making one full cycle rotation for (int i = 0; i < stepsPerRev; i++) { digitalWrite(stepPin, HIGH); delayMicroseconds(pulseWidthMicros); digitalWrite(stepPin, LOW); delayMicroseconds(millisBtwnSteps); } delay(1000); // One second delay Serial.println(F("Running counter-clockwise")); digitalWrite(dirPin, LOW); //Changes the rotations direction // Makes 400 pulses for making two full cycle rotation for (int i = 0; i < 2*stepsPerRev; i++) { digitalWrite(stepPin, HIGH); delayMicroseconds(pulseWidthMicros); digitalWrite(stepPin, LOW); delayMicroseconds(millisBtwnSteps); } delay(1000); }
Pour tester le fonctionnement du Shield et des moteurs, nous n’utilisons pas de libraire particulière. Notez toutefois, que si vous souhaitez utiliser des fonctionnalités plus poussées vous pouvez utiliser la librairie AccelStepper ou encore le firmware GRBL V0.9.
Résultat
Une fois le code téléversé et le système branché, vous devriez voir le moteur branché sur le driver Y tourner d’un tour dans le sens horaire et de deux tours dans le sens anti-horaire. Si ce n’est pas le cas, vous avez certainement un problème de branchement.
Il se peut aussi que le fusible présent sur la carte soit endommagé. Vous pouvez le remplacer par un fil conducteur.
Applications
- Fabriquer votre propre CNC ou graveuse laser
- Fabriquer un découpeur/dénudeur de fils
- Piloter jusqu’à trois moteur pas-à-pas indépendamment
Bonjour, voir code fonctionne à merveille, par contre je n’arrive pas à inclure la librairie accelstepper.h ,
Lorsque je le fait mes moteurs tournent , mais tremblent et saccadent. Pourriez vous me donner un exemple de code avec accelstepper inclus?
J’utilise un shield v3 avec des drivers a4988 .
Help me !
Bonjour, il faut vous rapprocher de la documentation de AccelStepper et du shield CNC
il est possible que des pins soient inversées
Bonjour, pour ma part cela ne fonctionne pas, je pense que c’est mon branchement qui doit être mauvais, pourriez vous me montrer le votre s’il vous plait ?
Bonjour, le branchement du moteur se fait comme sur le schéma (en partant du haut N/V/R/B)
quel moteur utilisez-vous?
Bonjour,
Dans le croquis Arduino contenant l’include de grbl.h, peut-on exécuter des commandes GRBL ?
Par exemple, si un signal logique arrive sur une entrée de l’Arduino, je voudrais faire tourner des moteurs via un shield CNC. GRBL n’est peut-être pas la solution la plus simple mais cela m’intéresserait de procéder ainsi.
Merci
c’est possible je pense, il faudrait regarder la librairie GRBL.h et appeler les bonnes fonctions
Où connecter l’extrudeuse sur Shield v3?
Bonjour,
Il n’y a pas de broches prévues pour la connexion d’une extrudeuse (heater, thermistor, fan).
Il est possible de rajouter le matériel nécessaire comme Mosfet et utiliser les broches SpinEnable(11), SpinDir(13), CoolEn(A3).
La carte Ramps avec une Arduino Mega est peut-être mieux adaptée à la réalisation d’une imprimante 3D.
Bonjour, je cherche à diriger 2 moteurs en même temps. Cependant en utilisant votre code je n’arrive pas à les faire tourner en même temps, auriez vous une idée des lignes de codes à ajouter ?
Merci beaucoup!
Bonjour,
il faut modifier la structure. Vous pouvez utiliser les librairies AccelStepper (et MultiStepper) ou modifier le code pour imbriquer les boucle for pour envoyer les pulses aux deux moteurs en même temps
Hello,
i am wondering about how does the timing of stepPin – T_high and T_low affect the speed of the motor? If I set T_high=T_low=550 ms, the period and frequency are still the same as yours, as far as I find out then the motor speed will also be the same? Please help me answer.
Bonjour,
Je pense qu’il y a une erreur dans la photo présentant les pins de l’Arduino et leur connexion aux pins du shield. En effet, le pin pour le contrôle de la butée de l’axe Z n’est pas le 12, mais bien le 11 (dans la continuité des pins 9 et 10 pour les axes X et Y).
Bonne journée.
merci!