Manual
do
Maker
.
com
Controlar um motor de passo é bastante simples, já escrevi alguns artigos a respeito, como esse, que é um modo mais direto, mas exige um bocado de jumpers ou solda. Atualmente tenho preferido utilizar drivers porque é muito prático, principalmente para prototipagem e procurando por um controlador, acabei encontrando o EasyDriver que, apesar do nome, não é tão "Easy" assim se for utilizar todos seus recursos. O básico sim, bastante direto, então começaremos por esse modo, porque estou trabalhando em um longo e interessante artigo e uma das etapas é justamente controlar alguns motores. Aí entra a questão; Como utilizar o EasyDriver adequadamente?
Primeira coisa a fazer, identificar o pinout. Na imagem de destaque está claro.
Em detalhes, da esquerda para a direita:
LED informativo da alimentação 5V.
Por padrão, 5V. Se você quiser trabalhar com nível lógico 3V3 nos pinos, faça a solda nesse ponto para habilitar o divisor de tensão.
B1 e B2 são as respectivas bobinas do motor de passo.
Se desejar sair com 5v usando até 50mA, utilize esses pinos. Para tal, você deverá soldar o jumping ao lado direito dele. Se mantê-lo aberto, você pode utilizá-lo como entrada de tensão para alimentar o circuito.
Nas especificações técnicas parece um bocado complicado, mas não precisaremos utilizá-lo, por sorte.
Reset.
Você pode deixar o EasyDriver dormindo até que seja necessárioe certamente será. Quando você coloca o EasyDriver em sleep, nem a controladora e nem o motor de passo esquentam. No projeto atual que estou desenvolvendo, fiz justamente isso, acompanhe os próximos artigos.
Inicialmente, esse pino está no nível lógico baixo. Se colocar em HIGH, desabilitará todas as saídas de frenagem do motor. Por padrão não será necessário fazer wiring nesse pino, mas adiante eu descrevo sua utiização.
Esses pinos controlam o modo micro passo. As configurações possíveis para esses pinos são full step (0,0), half step (1,0), 1/4 step (0,1), and 1/8 step (1,1 : default):
Micro Step 1 | Micro Step 2 | Resolução |
LOW | LOW | Passo completo |
HIGH | LOW | Meio passo |
LOW | HIGH | 1/4 de passo |
HIGH | HIGH | 1/8 de passo (padrão) |
Você deve entrar com uma tensão mínima de 7V e máxima de 30V. O driver trabalha fornecendo correntes entre 150mA e 750mA, então não use uma fonte ordinária,ainda mais se precisar de torque.
O GND deverá ser comum à controladora. Um pino para controlar os passos e o outro para controlar a direção. Mostrarei detalhes mais adiante.
O controle de corrente é ajustável entre 150mA e 750mA por fase. Eu vou utilizar o EasyDriver com um motor de passo 12V e vou utilizar uma fonte chaveada 12V@30A, porque é a que tenho mais próximo.
Para identificar as bobinas do motor bipolar, use um multímetro e procure a resistência mais baixa para identifcar um par. Os dois fios restantes só poderão ser o outro par.
No modo de operação básica, os fios GND, passo e direção (do canto inferior direito) devem ser conectados. Os pares de cada bobina devem ser ligados em qualquer ordem, mas ambos os pares devem ser ligados com a mesma lógica. Meu motor tem os fios vermelho, verde, amarelo e azul. Eu conectei azul com amarelo e vermelho com verde.
Alimentação (externa) | Motor | Arduino | EasyDriver |
pino 7 | direção | ||
pino 8 | passo | ||
bobina 1 fio 1 | B1 1 | ||
bobina 1 fio 2 | B1 2 | ||
bobina 2 fio 1 | B1 1 | ||
bobina 2 fio 2 | B2 2 | ||
GND | GND ao lado do passo | ||
7V até 30V | Power IN, pino da esquerda | ||
negativo | Power IN, pino da direita |
No modo básico, tudo o que você precisa fazer é definir os pinos para direção e passo. No caso dos passos é bastante simples de entender, bastando selecionar o número de passos desejado para o loop.
A direção é selecionada pelo estado do respectivo pino, sendo 0 ou 1. O número de passos do motor de estou utilizando é 200 por volta, dando algo em tornode 1.8 graus por passo. Um código básico de exemplo para um teste inicial, fazendo o motor girar em ambas as direções, seria:
int pin_direction = 7;
int pin_step = 8;
int direction = 0;
int steps = 1600;
void setup(){
pinMode(pin_direction,OUTPUT);
pinMode(pin_step,OUTPUT);
}
void loop(){
direction = direction > 0 ? 0 : 1;
digitalWrite(pin_direction,direction);
for (int i=0;i<steps;i++){
digitalWrite(pin_step,HIGH);
delay(5);
digitalWrite(pin_step,LOW);
}
delay(1000);
}
Não tem nada de mais nesse código, apenas adicionaremos 2 outros jumpers no wiring e conforme a tabela supracitada, faremos o controle de todas as maneiras disponíveis para ver como o motor reage a cada configuração. Ao código, devemos adicionar os controles de MS1 e MS2. Utilizei os pinos 4 e 5 para MS1 e MS2, respectivamente.
int pin_direction = 7;
int pin_step = 8;
int pin_ms1 = 4;
int pin_ms2 = 5;
int direction = 0;
int steps = 1600;
int microSteps[4][2] = {
{LOW,LOW},
{HIGH,LOW},
{LOW,HIGH},
{HIGH,HIGH}
};
void setup(){
pinMode(pin_direction,OUTPUT);
pinMode(pin_step,OUTPUT);
pinMode(pin_ms1,OUTPUT);
pinMode(pin_ms2,OUTPUT);
}
void loop(){
for (int j=0;j<4;j++){
digitalWrite(pin_ms1,microSteps[j][0]);
digitalWrite(pin_ms2,microSteps[j][1]);
direction = direction > 0 ? 0 : 1;
digitalWrite(pin_direction,direction);
for (int i=0;i<steps;i++){
digitalWrite(pin_step,HIGH);
delay(5);
digitalWrite(pin_step,LOW);
}
delay(1000);
}
}
Mais acima citei a utilização do pino Enablepara frenagem do motor de passo. isso significa que quando o estiver utilizando em uma CNC, provavelmente querará que o motor não se desloque enquanto aguarda em uma posição. O comportamento padrão do EasyDriver é mantê-lo travado em sua posição e quando nesse estado, é comum o motor aquecer bastante, podendo chegar aos 70 graus ou mais, dependendo do controle de corrente. E é por isso que o EasyDriver é um dos melhores drivers para controle de motores de passo, já que ele fornece o controle de corrente do motor, e assim você consegue diminuir a temperatura dos componentes em operação.
Você pode pensar: "O motor de passo da impressora não esquenta". Verdade, e isso se dá ao fato de que a impressora possui um encoder para fazer o alinhamento da cabeça de impressão, portanto o motor retorna ao seu ponto de descanso e encerra sua tarefa, já que sua memória de posicionamento se baseia no encoder. Para trabalhar desse modo, basta modificar o comportamento do EasyDriver através do pino Enable. Na configuração, utilizei o pino 3 do Arduino no pino Enable do EasyDriver, daí compilei o seguinte sketch:
int pin_direction = 7;
int pin_step = 8;
int pin_ms1 = 4;
int pin_ms2 = 5;
int pin_enable = 3;
int direction = 0;
int steps = 1600;
int microSteps[4][2] = {
{LOW,LOW},
{HIGH,LOW},
{LOW,HIGH},
{HIGH,HIGH}
};
void setup(){
pinMode(pin_direction,OUTPUT);
pinMode(pin_step,OUTPUT);
pinMode(pin_ms1,OUTPUT);
pinMode(pin_ms2,OUTPUT);
pinMode(pin_enable,OUTPUT);
digitalWrite(pin_enable,LOW);
}
void loop(){
for (int j=0;j<4;j++){
digitalWrite(pin_ms1,microSteps[j][0]);
digitalWrite(pin_ms2,microSteps[j][1]);
direction = direction > 0 ? 0 : 1;
digitalWrite(pin_direction,direction);
for (int i=0;i<steps;i++){
digitalWrite(pin_step,HIGH);
delay(5);
digitalWrite(pin_step,LOW);
}
digitalWrite(pin_enable,HIGH);
delay(1000);
digitalWrite(pin_enable,LOW);
}
}
Se você precisar de torque, deverá aumentar a corrente. Faça-o gradativamente e veja o ponto ideal para evitar superaquecimento do motor, ainda mais se estiver utilizando-o no modo de frenagem do eixo.
E se quiser utilizar algo mais simples, sugiro esse outro artigo relacionado a esse motor de passo, utilizando uma ponte H L293D.
Se você tem um desses motores de passo baratinhos unipolar, o artigo relacionado a ele pode ser encontrado nesse link, onde faço uma introdução.
No artigo sobre o robô seguidor de linha, utilizei esse motor unipolar para movimentar a polia. O robô foi todo feito com palitos de sorvete, por isso acredito que seja no mínimo uma leitura interessante.
Esse módulo adquiri com um parceiro de longa data, Fulltronic, através desse link. A lista de produtos dele é sempre bem atrativa.
Esse video não tem absolutamente nada, apenas a demonstração do funcionamento do motor com 1 passo, 1/2 passo, 1/4 de passo e 1/8 de passo utilizando todos os recursos descritos anteriormente. Testei ele com modo de frenagem e 150mA e ele esquenta de maneira assustadora. Para o video, utilizei o modo livre, que praticamente não chegou a ficar morno. Alías, se eu não soubesse que o motor é gelado, não teria percebido que ele esquentou um pouco.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.