CENTRAL DE ATENDIMENTO
De segunda à sexta das 8:00 às 17:30
(11) 3522-7626 / vendas@robocore.net
Retornar
ao topo

Controlando motores: Motor de passo



Este tutorial tem como objetivo explicar algumas características importantes para a utilização de um motor de passo, além de disponibilizar os esquemáticos de ligação dos motores e alguns códigos básicos.

Lista de Materiais

Observação: a lista acima contém os itens dos dois projetos dessa página.

O que é ?

É um tipo de motor voltado para projetos que demandam precisão, como CNCs, impressoras 3D, etc. Sua principal diferença dentre os motores é a quantidade de pólos que o motor possui, que por sua vez define o número de passos por revolução, ou seja, quantos passos o motor deslocará para realizar uma volta.

Atualmente existem 3 tipos de motores de passo: relutância variável, ímã permanente e híbridos. A diferença é a forma que os motores são construídos, sendo que os motores híbridos são os mais comuns e com melhores características. Isso ocorre porque este tipo reúne as vantagens dos demais modelos, como a quantidade de pólos de um motor de relutância variável e a utilização de um ímã permanente, característica dos motores de ímã permanente.

A imagem abaixo mostra todas as peças de um motor de passo hibrido. Veja que o motor é composto basicamente por um rotor (peça central) e um estator (peça à direita).

Peças de um motor de passo hibrido

Quando olhamos para o estator, observamos vários enrolamentos de fio de cobre, mais conhecidadas como bobinas, que por sua vez compõem fases, responsáveis por gerar um campo magnético que movimenta o rotor. A movimentação é definida pela forma que controlamos a ordem de acionamento das fases e o sentido da corrente. O controle das fases é classificado em três formas:
  • "Full-Step", como o próprio nome indica, é o tipo de acionamento que movimenta o motor com passos completos, podendo ocorrer de duas formas: acionando uma ou duas fases por ciclo.

    1. Uma fase (one phase on), é a forma mais simples de acionar um motor de passo, visto que em cada ciclo é acionada apenas uma bobina. Este é o acionamento que obtém o menor torque do motor.

    2. Fonte: https://www.rs-online.com/designspark/stepper-motors-and-drives-what-is-full-step-half-step-and-microstepping

    3. Duas fases, semelhante ao método de uma fase, porém cada passo é feito com o acionamento de duas fases simultaneamente, o que confere ao motor um aumento no torque.

    4. Fonte: https://www.rs-online.com/designspark/stepper-motors-and-drives-what-is-full-step-half-step-and-microstepping


  • "Half Step" une os dois métodos anteriores, sendo possível dobrar o número de passos e consequentemente melhorar a resolução. Porém, quando se comparado o torque com o acionamento Full-Step com duas bobinas, o torque é menor.

  • Fonte: https://www.rs-online.com/designspark/stepper-motors-and-drives-what-is-full-step-half-step-and-microstepping

  • "Microstep", controla a ordem do acionamento das bobinas e a intensidade do campo magnético, permitindo que se obtenha movimentações fluidas e resoluções maiores do que o modo Half Step. Um exemplo é o driver AKDMP16-4.2A, que pode dividir uma volta em 25600 partes, ou seja, uma resolução de 0,014° para motores com 200 passos por revolução. Lembrando que esta resolução pode ser limitada pela mecânica do motor.

Ligações

Quando ligamos um motor de passo, a primeira coisa que observamos é a quantidade de cabos do motor. Esta característica é importante, pois ela indica se há a possibilidade de ligar o motor de forma bipolar ou unipolar. A diferença básica entre as duas ligações é o uso do centro das fases, que obviamente influencia em alguns parâmetros do motor, como por exemplo o torque, que é maior para ligações bipolares. Outra questão importante e vantajosa (agora para as ligações unipolares) é a complexidade do circuito empregado neste tipo de acionamento. Um exemplo é o motor 28BYJ-48, que por possibilitar ligações unipolares, pode ser acionado por um circuito menos complexo, como com a placa ULN 2003, que se trata de um conjunto de transistores. Lembrando que mesmo sendo circuitos mais simples, motores maiores com acionamento unipolar precisam de circuitos mais robustos.

Como dito anteriormente, as ligações unipolares e bipolares se diferenciam pelo uso do centro das fases, sendo unipolar as ligações com uso do centro da fase e bipolar sem. Com isso podemos determinar as possibilidades de cada motor e como ligá-los. Por exemplo, motores de 4 fios tem duas fases e nenhuma derivação, isso indica que o motor pode ser ligado apenas em configuração bipolar. Motores com 6 fios possibilitam tanto a ligação unipolar como bipolar, visto que, se quisermos usá-lo com ligação bipolar usamos apenas os cabos das extremidades de cada fase, isolando os cabos intermediários. Para usá-lo com ligação unipolar usamos os cabos das extremidades para o acionamento, o centro das fases ligadas ao GND ou ao Vcc da fonte de alimentação.

Veja a imagem abaixo para entender como são as ligações internas dos motores com 4, 5, 6 e 8 fios.

Fonte: https://learn.adafruit.com/all-about-stepper-motors/types-of-steppers

Torque x Passo

Depois de entender do que se trata um motor de passo, notamos que muitas variáveis podem influenciar seu torque, como o modo em que as fases são acionadas, o tipo de ligação e o circuito utilizado. Porém outro fator que devemos nos preocupar é a rotação, dada em PPS (passos por segundo).
Fonte: http://www.linengineering.com/wp-content/uploads/2015/10/Unipolar_Vs_Bipolar.jpg

Como é possível observar no gráfico acima, quanto maior é o PPS, menor é o torque do motor independente do tipo da ligação. Em termos práticos, isso ocorre devido à inercia do rotor, que limita o seu tempo de resposta, comparado com o campo magnético gerado pelo estator. É por isso que os motores de passo não são recomendados para velocidades elevadas.

O torque é um detalhe importante no dimensionamento do motor de passo. Quando o eixo de um motor com escova, por exemplo, é travado, a corrente aumenta consideravelmente e é possível detectar a imobilidade. No caso do motor de passo, se o eixo for travado, o acionamento continua igual, mas o rotor "pula" passos. Isso significa que o torque do motor de passo deve ser sempre superior ao esforço necessário, senão ele deixa de ser preciso e requer algum tipo de sensoriamento, como um encoder.

Vantagens e desvantagens

Até o momento pudemos verificar que os motores de passo tem muitas vantagens como:
  • Precisão de posicionamento
  • Excelente repetibilidade
  • Ótimo controle de velocidade, visto que a velocidade do motor está diretamente relacionada com a frequência de acionamento das fases
  • Permite que o sistema de controle seja aberto, pois na maioria dos casos dispensa realimentação
  • Pode manter-se imóvel sem causar danos
  • Elevado torque de retenção e para rotações baixas
Mas nada é perfeito e por isso não podemos esquecer que este tipo de motor também tem suas desvantagens:
  • O torque diminui rapidamente com o aumento da rotação
  • Ocorrência de ressonância se o controle do motor for inadequado
  • Baixa efficiência
  • Pode perder passos se não for bem dimensionado

Drivers para motor de passo


Como a placa microcontrolada não fornece corrente suficiente para o acionamento de qualquer motor, é necessário usar um driver ou algum tipo de circuito intermediário. Este circuito é a unidade controladora do motor (driver). Alguns exemplos que inclusive se encontram na loja da Robocore são o ULN 2003, AKDMP5-2.2A e Driver A4988. O modelo ULN 2003, como dito anteriormente, é um circuito mais simples, que é um conjunto de transistores. Nesse caso o controle do acionamento das bobinas é feito totalmente através do Arduino, ou seja, o desenvolvedor deverá se preocupar com o desenvolvimento do código responsável pela ordem de acionamento dos pólos, a velocidade, sentido, etc. Já os modelos AKDMP5-2.2A e A4988, como se tratam de drivers específicos para motores de passo, são capazes de fazer o controle da corrente e ordem de acionamento das bobinas, possibilitando um controle mais simples.

Exemplo de acionamento de motor de passo usando ULN 2003.

Com este código o motor de passo é acionado usando o método "one phase on", onde as bobinas do motor são acionadas sequencialmente. Veja que existem dois laços "for" dentro do código, responsáveis pelo acionamento do motor no sentido horário e anti-horário. Repare também que a ordem é feita pelo código.
Outros métodos, como Half Step e Full Step com duas fases, devem ser desenvolvidas em código.

Código:

Esquemático:



Exemplo de acionamento de motor de passo usando driver A4988 ou AKDMP5-2.2A.

Agora iremos utilizar drivers específicos para motores de passo, e com isso você verá que o código fica ligeiramente mais simples pois não é necessário configurar a ordem de acionamento das bobinas, basta enviar um pulso para cada passo (STEP) e um sinal que define o sentido de rotação (DIR). Esses modelos possibilitam o acionamento dos motores com melhores resoluções, pois possuem o modo de operação em microstepping. A mudança de resolução, ou passos por resolução, nos modelos AKDMP é feita pelas micro chaves do driver. Por exemplo, para o modelo AKDMP5-2.2A a alteração é feita nas chaves k4,k5 e k6, lembrando que esta nomenclatura pode mudar de modelo para modelo, por isso é importante consultar o datasheet de cada driver. Já o driver A4988 tem a configuração dos passos feita pelos pinos digitais MS1, MS2 e MS3, permitindo que um passo seja dividido em até 16 partes.

Código:


Esquemático:

OBS: Mesmo que os modelos de drivers A4988 e AKDMP não se pareçam externamente, quando é observado a pinagem de ambos em seus respectivos datasheets é possível concluir que as ligações dos mesmos são similares, por essa razão este tutorial se reservou em apresentar apenas as ligações com do driver A4988.


Conclusão

Vimos neste tutorial como identificar alguns modelos de motores de passo, seu funcionamento e alguns exemplos de controle com as placas Blackboard/Arduino Uno. Esses exemplos podem ser tomados como base para o desenvolvimento de projetos que utilizem estes motores.

Motores de passo são uma ótima alternativa para quando se quer um movimento preciso, pois o controle é simples e não necessitam de um sensor de realimentação, como um encoder. No entanto, isso é limitado para velocidades baixas. Além disso, motores de passo são ótimas alternativas quando se faz necessário um torque relativamente alto em uma carcaça robusta, com uma operação confiável.



Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


djjulioreis
date Enviado: 2020-08-09 21:35:45
Preciso controlar independentemente 16 motores de passo cheguei  a ver alguns kits como  Cnc Shield V3 mas suporta ate 4 motores gostaria de saber se usar 4 destes no arduino consigo fazer tal controle

Giovanni5
date Enviado: 2020-08-10 09:43:00
djjulioreis
Você até pode acoplar 4 Shields em uma placa, um sobre o outro, porém isso não deve funcionar corretamente, até porque os motores seriam controlados paralelamente pelo uso dos mesmos pinos na placa. O ideal para o seu projeto é desenvolver uma placa externa que permita o controle independente de 16 drivers, e você pode desenvolver esta placa em formato de Shield para placas Arduino, se quiser. Mas vale lembrar que, provavelmente você terá que usar uma placa da plataforma Arduino Mega (https://www.robocore.net/loja/arduino/blackboard-mega - por exemplo), para controlar todos esses drivers.

Leinat
date Enviado: 2020-08-04 15:35:09
Boa tarde! Uma vez que o drive controla a corrente no motor, há alguma vantagem ou desvantagem em utilizar 12, 24 ou 36V? (torque, velocidade.....) Abraço!

Giovanni5
date Enviado: 2020-08-04 16:11:51
Leinat
O ideal é sempre alimentar o motor com sua tensão nominal, ou seja, se o motor é de 24 V, a alimentação também deve ser de 24 V, por exemplo. Utilizar uma tensão abaixo da nominal do motor causará uma perda de eficiência, em outras palavras, menos velocidade e menos torque. Embora a alimentação com uma tensão superior à nominal do motor  acabe gerando um aumento de velocidade e torque, isso pode acabar fazendo com que ele se danifique durante o uso, portanto não é recomendado.

Giovanni5
date Enviado: 2020-08-05 11:33:39
Leinat
Apenas um complemento ao comentário anterior. O uso da tensão nominal como alimentação é recomendado para drivers mais simples, como o ULN2003, para drivers mais sofisticados, como o A4988, por exemplo, o recomendado é utilizar uma tensão um pouco superior à tensão nominal do motor, para que haja um controle melhor. As duas formas de alimentação são válidas, porém a escolha de tensão de alimentação do conjunto irá depender muito do driver utilizado para controle.

FaustinoCarvalh
date Enviado: 2020-06-14 07:58:47
Bom dia! Tenho um motor unipolar de 6 fios (NEMA 23 de 2A e 9 Kgf/cm - Wotiom), se eu usar os fios da extremidade para o acionamento usando o meu drive (WD-42 de 4.2 A - Wotiom) e ao invés de isolar os fios centrais das fases eu uni-los e conectá-los ao GND do drive, neste caso esta a configuração seria classificada como unipolar ou bipolar? Esta configuração de ligação do motor apresenta algum risco ou melhora a performance do mesmo de alguma forma? Muito obrigado pela atenção, pessoal! Um abraço

Giovanni5
date Enviado: 2020-06-15 10:03:34
FaustinoCarvalh
A principio emendar os fios da extremidade do motor iriam apenas fazer com que ele operasse na configuração unipolar, porém infelizmente nunca trabalhamos com a marca Wotion para confirmar se isto seria prejudicial ao motor, se esta conversão é vantajosa, ou se é compatível com o driver mencionado. Portanto recomendamos que você entre em contato direto com o seu fornecedor, para verificar estas informações.

GregNomura
date Enviado: 2020-06-07 16:28:30
Desculpa as perguntas repetidas, kkkkk foi sem querer

GregNomura
date Enviado: 2020-06-07 15:00:43
Alguém pode me ajudar nessa questão , por favor.
Desenho o diagrama elétrica básico para o controle de um motor de passo com CLP. Indique também como devem ser configurados os DIPs do Drive, considerando a corrente do motor, função "Corrente de Repouso" ativa e 1000 pulsos/revolução.

Giovanni5
date Enviado: 2020-06-08 10:23:13
GregNomura
O esquema elétrico vai depender muito do modelo de CLP usado, assim como a configuração do DIP switch vai depender do modelo de driver selecionado. O ideal é analisar a documentação de ambos os dispositivos, para entender corretamente qual as portas que devem ser usadas no CLP, e como configurar o DIP do driver.

vitorfms
date Enviado: 2020-05-11 21:05:41
Boa noite, me ajudem com essa questão:
Dado um motor de passo com 200 passos por volta, calcule o número de pulsos para passo completo e também micro passo, que deverão ser injetados no driver para que o eixo tenha um deslocamento angular de exatos 45º.
 
A	100 e 200.
 
B	200 e 350.
 
C	250 e 500.
 
D	25 e 50.

Giovanni5
date Enviado: 2020-05-12 11:30:14
vitorfms
A resposta certa é a alternativa "D", já que para este motor de passo, 200 passos é equivalente à 360° (um giro completo de seu eixo).  Como 45° é 1/8 de 360°, basta dividir o número de passos (200) por oito, chegando à resposta de 25 passos. Em relação aos micro passos, já que, para termos um passo, é necessário realizar dois micro passos, basta multiplicar o valor de passos obtidos por dois, chegando à resposta de 50 micro passos.

lopesjv63
date Enviado: 2020-04-09 11:00:12
Tem como ao invés de usar potenciômetro , programar rampa de aceleração e desaceleração com arduino controlando um drive de motor de passo ?

Giovanni5
date Enviado: 2020-04-09 11:25:31
lopesjv63
Sim, é possível criar uma rampa de aceleração e desaceleração para motores de passo, para isso você pode criar uma repetição "for", para ir aumentando gradativamente o tempo de delay do código, por exemplo, deste modo você faz uma rampa de desaceleração do motor. E então para implementar a aceleração, basta inverter a lógica da repetição.

vameza
date Enviado: 2019-12-17 17:52:12
Prezados boa tarde. A biblioteca Stepper.h funciona com o driver A4988???? Saudações a todos!

vameza
date Enviado: 2019-12-17 18:58:06
vameza
Por favor, outra dúvida. No caso de motores de passo que precisam de 12 V, o melhor é usar uma fonte externa, pois o próprio Arduino não dá conta, é correto isto??? Valeu e no aguardo!!

Giovanni5
date Enviado: 2019-12-18 08:07:45
vameza
Sim, é possível controlar o driver A4988 com a biblioteca "Stepper", desde que você utilize o comando correto para trabalhar com os dois pinos do driver (https://www.arduino.cc/en/Reference/StepperConstructor). Já em relação à alimentação do conjunto, é necessária a alimentação externa de 12 V, por exemplo, por conta da tensão do motor, já que as placas Arduino operam em 5 V, com baixa corrente. Note que neste tutorial, usamos o pino Vin da placa para alimentar o motor, que está diretamente conectado à alimentação externa, vinda da fonte conectada.

Bheloisobarra
date Enviado: 2019-12-15 16:05:36
Mas nesse não . Não funciona com botão , mas sem o botão funciona.
void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH)
  stepper1.moveTo(-50);
  while (stepper2.currentPosition() != -50)
  stepper1.run();
  stepper1.stop();
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW)
   {  
  stepper1.stop();
  stepper1.runToPosition();
  }
}

Giovanni5
date Enviado: 2019-12-16 08:06:42
Bheloisobarra
Dentro da condição "if" deste trecho de código, há a condição "while" para manter o motor rodando enquanto o mesmo não alcançar uma determinada posição. Entretanto, perceba que neste trecho de código, juntamente com o comando "stepper1.run()", em sequência vem o comando "stepper1.stop()", que deve estar travando o seu código em um laço infinito, já que o motor não se move, devido a execução dos dois comandos conjuntos e, consequentemente, não sai do laço "while".

Bheloisobarra
date Enviado: 2019-12-15 15:58:40
Fala galera . Problemas com o botão .
Nesse primeiro o botao funciona : 
#include <AccelStepper.h>
AccelStepper stepper1(AccelStepper::DRIVER, 2, 5);
int buttonPin = 40;
int buttonState;

void setup()
{
stepper1.setMaxSpeed(2000);
stepper1.setAcceleration(200);
//stepper1.setMinPulseWidth(100);
pinMode(buttonPin, INPUT);
}
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
stepper1. move (20);
stepper1. run ();

buttonState = digitalRead(buttonPin);
if (buttonState == LOW)
{
stepper1.stop();
stepper1.runToPosition();
}
}