Site icon AranaCorp

Usando um Arduino CNC Shield V3

Neste tutorial, veremos a utilização do Escudo CNC V3 para Arduino. Para poder gerir uma máquina como uma CNC ou uma impressora 3D com vários motores passo a passo, é interessante ter uma placa que facilite a ligação dos diferentes elementos da máquina. Este é o papel do escudo CNC.

Material

Como funciona

O Escudo CNC V3 é uma placa de extensão para Arduino UNO ou Mega que pode ser facilmente interligada a controladores de motores passo-a-passo, como o A4988. Também permite conduzir e gerir os elementos necessários ao funcionamento de uma fresadora digital (CNC). Ou seja, paragens finais, ventiladores, etc,

Esquema

O escudo é colocado no microcontrolador Arduino e os motores são ligados directamente aos pinos de saída dos condutores. Pode escolher os condutores que desejar em função da potência dos seus motores e das suas aplicações (A4988, DRV8825, SilentStepStick, TMC).

Os terminais estão disponíveis abaixo de cada condutor para seleccionar a resolução do passo. Estes terminais são ligados aos pinos MS0, MS1 e MS2 dos controladores.

Antes de ligar os motores, certifique-se de que o limitador de corrente em cada controlador corresponde ao motor que está a conduzir.

Código

Para accionar um motor passo-a-passo com Escudo V3 CNC, referimo-nos ao pinout do escudo, que nos dá acesso aos pinos de chamada para enviar comandos ao controlador do motor (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);
}

Para testar o funcionamento do Shield e dos motores, não utilizamos nenhuma biblioteca em particular. Contudo, se quiser utilizar funcionalidades mais avançadas pode utilizar a biblioteca AccelStepper ou o firmware GRBL V0.9.

Resultado

Assim que o código tiver sido carregado e o sistema ligado, deverá ver o motor ligado ao condutor em Y rodar uma volta no sentido dos ponteiros do relógio e duas voltas no sentido anti-horário. Se não for este o caso, provavelmente tem um problema de ligação.

Também é possível que o rastilho no quadro esteja danificado. Pode substituí-lo por um fio de chumbo.

Aplicações

Fontes

Exit mobile version