Programação: Parte 1

Ensaios da programação do acionamento ...

Uma máquina CNC, costuma ter 3 motores, pelo menos 2, alguns casos tem 4 e até 5, trabalhando simultâneamente. Portanto o acionamento desses motores é crucial para a operação da máquina.

No nosso caso, a máquina terá 3 motores controlados, e 1 somente com o comando liga/desliga.

Os motores controlados serão motores de passo, com sua sequência de ligação controladas pelo Arduino, através de drives de potência.

Existem, básicamente, dois tipos de drives para motores de passo:

  • Os drives de potência onde a pinagem de entrada é a mesma de saída para o motore de passo, nesse caso só é fornecida potência maior para o acionamento dos motores, sem exceder a corrente máxima dos sinais digitais do Arduino.
  • Os drives que controlam a sequência de ligação das bobinas, a partir de sinais enviados pelo Arduino, nesse caso a pinagem de entrada é diferente, e quase sempre menor que a se saída para os motores.
No segundo caso, há uma economia substâncial de sinais digitais, bastando 3 sinais para controle completo de um motor, independente de quantas bobinas tenha.
A imagem acima é de um drive do segundo tipo, onde com apenas dois sinais do Arduino, um para rodar e com que velocidade, outro para indicar o sentido. Temos o acionamento preciso de um motor de passo.

A escolha natural seria o drive do segundo tipo, mas ele além de ser mais caro, tem a programação um pouco mais sofisticada e trabalhosa.

Como só vamos usar um máximo de 3 motores, vamos usar os drives de potência, do primeiro tipo, onde é mais fácil definir as pinagens.

Os drives de potência usam, habitualmente, os CIs com múltiplos transistores, ULN 2003, com 7 transistores, ou ULN 2803, com 8 transistores.
Esses CIs permitem uma tensão de base de até 50 V, e podem sustentar uma corrente em cada saída de 500 mA (os 2803). O que é muito superior a capacidade das saidas digitais do Arduino.

Como os drives de potência acionando motores bipolares usam 4 pinos digitais, teremos uma capacidade máxima no Arduino de 3 motores bipolares. O suficiente para acionar uma CNC básica.
A imagem acima mostra um motor bipolar, e o respectivo drive, nesse caso um ULN 2003, nesse caso a tensão máxima é de 12 V.



O básico da programação de acionamento dos motores.

Primeiro é necessário entender o que são motores de passo ...

Recomendo a página http://www.rogercom.com/pparalela/IntroMotorPasso.htm

Lembra das experiências no ensino básico e secundário, onde eram construídos motores com imãs e bobinas enroladas. Que eram acionadas alternadamente.

Nestes motores e nos motores reais as bobinas são alternadas através de coletores e escovas, ou através da própria corrente alternada.

Nos motores de passo as bobinas são alternadas através de circuitos externos, uma a uma, controlando com precisão a velocidade e o ângulo de rotação.

Os motores de passo são chamados unipolar, quando suas bobinas tem um ponto central em comum, são os mais fáceis de acionar.

No nosso programa básico, vamos ligar uma saída digital do arduino, a um led, e vamos repetir isso 4 vezes, fazendo com que os leds acendam na sequência de funcionamento do motor. Posteriormente vamos ligar as bobinas do motor nesses leds e faze-lo girar com controle.

Vamos às etapas do programa

- Declarações globais -

/*
Acendendo leds em sequencia ao toque de um botao.
Pratica para contrele de motor de passo.
*/

//Declaraçao das constantes
const int led1 = 8; //Definir quais leds estarao associados aos
const int led2 = 9; // pinos digitais do Arduino
const int led3 = 10;
const int led4 = 11;
int T = 100; // Define a variavel de tempo a ser usada no passo

const int botaoE = 4; //Define os botoes

int estbotaoE = 0; //Define estado inicial do botao E


Nesta etapa, as saídas digitais que serão usadas são atribuídas e recebem um nome. O botão de acionamento é atribuido a uma entrada digital, e também recebe um nome.

- Ajustes iniciais -

//Setup: ajustes iniciais do Arduino, executado 1 vez
void setup() {
  pinMode(led1,OUTPUT); //Define as saidas para os leds
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(botaoE,INPUT); //Define as entradas para os botoes
}


São definidas as funções das saídas digitais, São designadas como saída ou entrada.

- Rotina do programa -

// Rotina a ser executada em loop
void loop() {
  estbotaoE = digitalRead(botaoE);
  // Verificando o estado do botaoE
  // e acendendo o led correspondente
  if (estbotaoE == HIGH) {
    digitalWrite(led1,HIGH);
    digitalWrite(led2,LOW);
    digitalWrite(led3,LOW);
    digitalWrite(led4,LOW);
    delay(T);
  } else {
    digitalWrite(led1,LOW);
    digitalWrite(led2,LOW);
    digitalWrite(led3,LOW);
    digitalWrite(led4,LOW);
  }
  if (estbotaoE == HIGH) {
    digitalWrite(led1,LOW);
    digitalWrite(led2,HIGH);
    digitalWrite(led3,LOW);
    digitalWrite(led4,LOW);
    delay(T);
  } else {
    digitalWrite(led1,LOW);
    digitalWrite(led2,LOW);
    digitalWrite(led3,LOW);
    digitalWrite(led4,LOW);
  }
  if (estbotaoE == HIGH) {
    digitalWrite(led1,LOW);
    digitalWrite(led2,LOW);
    digitalWrite(led3,HIGH);
    digitalWrite(led4,LOW);
    delay(T);
  } else {
    digitalWrite(led1,LOW);
    digitalWrite(led2,LOW);
    digitalWrite(l ....


Essa rotina é executada indefinidamente, verifica se o botão foi pressionado, e executa 4 passos energizando cada lâmpada led de uma vez e em sequência.

Posteriormente o motor será ligado com suas bobinas em paralelo com cada lâmpada e teremos, com certeza, a rotação do motor.

A velocidade de acendimento das lâmpadas é controlada pela variável de tempo T, nas declarações globais, e em uma evolução do programa, poderá ser modificada através de uma variável analógica, como um potenciômetro por exemplo.


Motor de passo com o Arduíno - Muito básico I from Edu Bambu on Vimeo.

Para acionar o motor de passo, basta ligar os terminais do drive de potência na sequência dos LEDs,


Motor de passo com o Arduíno - Muito básico II from Edu Bambu on Vimeo.

Nenhum comentário:

Postar um comentário