Progamação: Parte 3

Vamos avançar um pouco mais na programação para acionamento de motores de passo.

Limitação dos pinos digitais: Como supera-la

Até agora vimos como acionar motores usando 4 saídas digitais para cada motor unipolar. Isso traz um problema, que é o número de saídas digitais limitadas do Arduino Uno.

Usando 4 saídas digitais para controle de cada motor, e mais duas entradas digitais para indicar a direção. Temos 6 pinos digitais por motor, e o Arduino tem 14 pinos digitais, que podem ser configurados como saída, e mais 6 pinos analógicos, que também podem ser configurados como saída digital, totalizando assim; 20 pinos digitais.

Como uma fresadora CNC tem pelo menos 3 motores, os eixos X, Y, Z e pode ter eventualmente um quarto motor para girar a peça obra. Só a configuração mínima consumiria 18 pinos digitais. Teoricamente ainda sobrariam 2 para outras funções eventuais de uma CNC; como ligar a ferramenta, ou a refrigeração.

Mas isso é na teoria, na prática é mais difícil, pois parâmetros da CNC tem que ser exibidos em algum lugar, e para isso é necessário usar o comando: Serial.print(valor,formato). E quando esse comando é usado os pinos digitais 0 e 1 não podem ser usados como entrada e saída de dados. Então na prática temos só 18 pinos digitais, ou seja  3 motores unipolares e olhe lá.

O jeito é usar uma técnica de lógica digital, chamada; - decodificador. Construiremos um decodificador que transformará dois sinais digitais combinados em 4 sinais digitais em uma ordem pré-determinada.

Por exemplo;

Pino 8 (Low) e Pino 9 (High) => Decodificador => Saída 1(High), Saída 2(Low), Saída 3(Low) e Saída 4(Low)

Pino 8 (High) e Pino 9 (High) => Decodificador => Saída 1(Low), Saída 2(High), Saída 3(Low) e Saída 4(Low)

Pino 8 (High) e Pino 9 (Low) => Decodificador => Saída 1(Low), Saída 2(Low), Saída 3(High) e Saída 4(Low)

Pino 8 (Low) e Pino 9 (Low) => Decodificador => Saída 1(Low), Saída 2(Low), Saída 3(Low) e Saída 4(High

Decodificador; vamos a ele.

O decodificador consiste na combinação de portas [E] (And) e portas [Não] (Not), de maneira tal que um circuito integrado com 6 portas [E], o 74HC08 tenha as saídas de pelo menos 4 portas, como a tabela mostrada acima.

As entradas em cada porta [E] serão ajustadas por portas [Não] constantes de um circuito integrado 74HC04, afim de produzir entradas adequadas a cada porta [E] usada.

Daqui para a frente é melhor ver o circuito para cada passo do motor.

 O primeiro passo de nossa sequência é produzido por entradas altas  nos pinos 1 e 2,  do ci 74HC08 e uma saída alta no pino 3 do 74HC08. A saída no pino 3 das portas [E]  entra no pino 1 do ULN2803 que é chaveado com a tensão de alimentação do ULN2803 e saí no pino 18 conectado ao motor de passo.

Observe que os sinais altos enviados pelo Arduino chegam a 4 portas [E] do 74HC08, sendo que alguns são tratados pelas portas [Não] do 74HC04, produzindo a sequência adequada de saídas para o ULN2803 acionar o motor de passo.




A montagem no protoboard, com os botões para escolha do sentido de giro e o potenciômetro para ajuste da velocidade é como segue abaixo.


Nesta montagem os LEDs vermelhos mostram as bobinas, e consequentemente, os passos acionados, indicam a velocidade do motor, e o sentido de rotação. Os LEDs verdes indicam o sentido comandado pelos botões. Naturalmente, esses LEDs são dispensáveis para o funcionamento do motor, só servem para indicação.

Observe que foram usados para acionamento e controle do motor apenas 4 sinais digitais, dois de entrada e dois de saída, e um sinal analógico para controle de velocidade. Neste caso o sinal analógico foi provido por um potenciômetro de 10 KOhm.

Para ligar outros motores basta montar o mesmo circuito usando outras portas digitais e analógica.

 

Nenhum comentário:

Postar um comentário