Étiquettes :

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,

arduino-cnc-shield-overview Utilisation d'un Arduino CNC Shield V3

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 ).

arduino-cnc-shield-v3_bb Utilisation d'un Arduino CNC Shield V3
arduino-cnc-shield-pinout Utilisation d'un Arduino CNC Shield V3

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

Sources