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