Controlando motores de passo utilizando Arduino e C++ para projetos de robótica

Controlando motores de passo utilizando Arduino e C++ para projetos de robótica

Nos últimos anos, o campo da robótica tem experimentado um crescimento significativo, impulsionado pela combinação de avanços tecnológicos e pela disponibilidade de ferramentas de prototipagem a um custo acessível. Nesse contexto, os motores de passo têm se destacado como componentes fundamentais para o controle preciso da movimentação, estando presentes em projetos como impressoras 3D, máquinas CNC, braços robóticos e muito mais. Ao longo deste artigo, vamos discutir a respeito dos diferentes motores, drivers e como fazer a programação utilizando a placa arduino e a linguagem C++.

O que são motores de passo e como funcionam?

Os motores de passo são dispositivos eletromecânicos que convertem pulsos elétricos discretos em movimentos mecânicos precisos. Ao contrário de outros tipos de motores, como os DC ou AC, os motores de passo não exigem feedback contínuo para controlar sua posição. Em vez disso, eles avançam uma quantidade fixa de passos em resposta a cada pulso elétrico recebido, permitindo um controle altamente preciso da posição angular do motor.

Eles são compostos basicamente por um rotor e bobinas eletromagnéticas geralmente dispostas em pares no estator, dentro do motor. Quando uma corrente elétrica flui pelas bobinas, um campo magnético é gerado, que interage com imãs permanentes ou dentes polares, dependendo do design do motor. Esse arranjo cria forças de atração e repulsão que fazem com que o rotor (ou eixo) do motor gire. No exemplo da imagem acima, temos a representação mais simples que é um eixo com dois polos e quatro bobinas conectadas em pares, onde a cada passo (que é o movimento incremental do eixo de uma posição para outra) ele vira 90 graus. Essa precisão pode ser melhorada aumentando a quantidade de bobinas e polos no rotor.

Tipos de motores de passo

Existem três tipos principais de motores de passo, os unipolares, bipolares e os híbridos. Os motores de passo unipolares possuem duas bobinas em cada fase (que é o conjunto de bobinas responsável por um segmento específico do movimento do motor) e uma delas é comum a ambas as fases. Esse motor é relativamente simples de controlar já que cada bobina pode ser acionada separadamente. Já os bipolares, possuem duas bobinas separadas em cada fase, não compartilhando uma central como nos unipolares. Isso torna o controle deles mais complexo, exigindo o uso de drivers. E os híbridos combinam aspectos dos dois, eles possuem mais de duas bobinas por fase, o que permite serem operados tanto como unipolares ou bipolares.

Os unipolares são adequados para aplicações que não exigem altos torques e velocidades, os bipolares geralmente oferecem mais torque e eficiência sendo adequados para aplicações que necessitam de melhor desempenho, enquanto os híbridos oferecem uma versatilidade maior. Os motores podem ter 4, 5, 6 ou 8 fios. O de 5 fios é unipolar, os outros são bipolares e você pode identificar qual fio pertence a qual bobina medindo a resistência entre dois fios, se não houver resistência, significa que o circuito está aberto e eles não fazem parte da mesma bobina, do contrário, eles pertencem a mesma bobina.

O que são drivers e como usá-los?

Simplesmente conectar os motores a uma fonte de energia, não fará com que eles girem continuamente, sendo necessário enviar pulsos elétricos para as fases em ordem. Por esse motivo é que precisamos de drivers para controlar os motores de passo. Existem diferentes tipos e tamanhos de drivers que correspondem com diferentes tipos e tamanhos de motores. Os mais populares são o A4988, o DRV8825 e TMC2208, que são utilizados para controlar motores como o nema 17, que estão presentes na maior parte das impressoras 3D e máquinas CNC de entrada.

Esses drivers também são chamados de ponte H, essa nomenclatura está relacionada com o seu funcionamento que consegue inverter o lado da rotação do motor. Para fazer esta inversão, só é necessário inverter a polaridade do motor, ou seja, troca o positivo com o negativo. Uma ponte H é composta de 4 interruptores, que são abertos em lados opostos para deixar a corrente fluir através do motor. Para mudar a direção, basta fechar os interruptores abertos e abrir os que estão fechados, conforme demonstrado na ilustração abaixo:

Outra função dos drivers é regular a tensão que chega para o motor. Diferente de outros componentes eletrônicos como LEDs ou sensores que podemos ligar diretamente nos microcontroladores como o arduino, os motores necessitam de uma fonte de energia externa, como baterias ou fontes que convertem a energia que sai da tomada na forma de corrente alternada (AC) em corrente contínua (DC).

Motores de passo comuns como o nema 17, têm 50 pontos de parada (ou passos) no rotor e o estator pode ter várias bobinas organizadas em 2 fases, o que resulta em 4 diferentes campos magnéticos. Multiplicando os 50 passos pelos 4 campos obtemos um total de 200 passos por rotação. Sabendo que uma rotação completa tem 360°, dividindo pelo número de passos chegamos ao resultado de 1.8° por passo. Essa é a precisão que o motor pode atingir por si só. Porém, é possível atingir uma precisão ainda maior através dos drivers, pois eles possuem uma função chamada de micropassos, onde as bobinas são energizadas em níveis de corrente intermediários. Então selecionando por exemplo, o modo 1/16 para um motor que possui 200 passos, obtemos um total de 3200 passos por rotação, ou 0.1125° por passo.

Programando um motor de passo utilizando o Arduino Mega

A programação de como os motores de passo vão atuar é feita utilizando microcontroladores, na imagem abaixo você pode visualizar como são feitas as conexões do motor com o driver (L293D) e do driver com o Arduino Mega. Essa imagem foi feita no software de simulação de circuitos elétricos proteus:

Esse driver utilizado tem como função converter o sinal digital que vem do Arduino em movimento para o motor. Cada driver tem suas particularidades e ajustes que devem ser feitos seguindo o datasheet (que você pode encontrar online procurando pelo nome do componente seguido da palavra datasheet), mas o princípio de funcionamento deles é o mesmo. Vão precisar receber energia de uma fonte externa, que geralmente é de 12 volts, para controlar o motor. Então serão necessários 2 pinos no driver para a fonte, um é o positivo (VCC) e o outro o negativo (GND). Para o driver em si funcionar, pode ser necessário conectar o GND e o 5V do arduino nele, então são mais 2 pinos de conexão (alguns drivers conseguem utilizar parte da energia da fonte para seu próprio funcionamento, não sendo necessário estas conexões).

Outros 4 pinos do driver serão destinados a conexão com o motor (2 pinos para cada fase), e o restante das conexões serão lógicas, ou seja, elas vão determinar como o driver se comporta. Na imagem os pinos do driver nomeados como OUT1, OUT2, OUT3 e OUT4 são as conexões com o motor. O VSS e VS são as entradas dos 12 volts, EN1 e EN2 são responsáveis por ativar ou não a ponte H. Se eles estiverem em 5V serão ligados, se tiverem em 0 estarão desligados. Por fim, os terminais IN1, IN2, IN3 e IN4 vão controlar o motor, eles foram ligados nas portas 8, 9, 10 e 11 do Arduino, respectivamente.

O driver A4988, por exemplo, possui os pinos MS1, MS2 e MS3 que servem para configurar os micropassos para aumentar ou diminuir a precisão do movimento do motor. Por padrão, eles vêm desligados, o que significa que o motor vai operar no modo full step que é com a quantidade de passos que ele foi projetado, mas conectando esses terminais em portas lógicas do Arduino, você pode ativá-los para definir os micropassos.

O código em si é bem simples, pois além dos drivers que ajudam na parte de hardware, existem diversas bibliotecas disponíveis online que facilitam na parte do software. O exemplo abaixo foi o que utilizei para controlar o motor, ele foi escrito em C++ na IDE do Arduino:

#include <Stepper.h>
const int spr=4;
Stepper steper (spr,8,9,10,11);
void setup() {
  steper.setSpeed(40);
  Serial.begin (9600);
}
void loop() {
  steper.step(-60);
  delay (100);
  steper.step(-40);
  delay (100);
}

Basicamente, é importada a biblioteca Stepper que vai abstrair a sequência de sinais digitais que serão enviados do arduino para o driver, depois é definida em uma variável a quantidade de passos por revolução. Então, uma instância da classe stepper é criada passando a quantidade de passos e os pinos digitais que estão conectados ao driver em sequência. Na função setup é configurada a velocidade do motor com a função setSpeed e no loop é feita a movimentação com a função step da classe Stepper. Se os valores forem positivos, o motor vai girar no sentido horário e se forem negativos, ele vai girar no sentido anti-horário. O delay é necessário entre cada comando, pois é o tempo para o motor chegar na posição desejada.

Conclusão

Utilizando drivers conectados a microcontroladores podemos facilmente controlar motores com alta precisão, que junto de impressoras 3D podem ser utilizados para construir robôs para automatizar tarefas no mundo físico. Neste artigo, discutimos os aspectos gerais da utilização de motores de passo, seus tipos e também fizemos a programação deles utilizando o arduino. Para conectar múltiplos motores ao microcontrolador, basta conectar outro driver no motor e conectar o driver em outras portas lógicas do Arduino.

Conforme continuamos a testemunhar, o contínuo avanço da tecnologia, os motores de passo continuarão a desempenhar um papel crucial no impulsionamento da robótica e da automação. Com este conhecimento, você já pode começar a explorar a utilização de diferentes microcontroladores ou até mesmo microprocessadores para controlar os motores. Dependendo do que os motores vão mover e dos algoritmos que você utilizar para complementar o sistema, tecnologias muito interessantes e inovadoras podem surgir neste processo.

Por exemplo, controlar uma câmera que utiliza algoritmos de machine learning e visão computacional para detectar um determinado objeto e a partir desta detecção, um braço robótico pode ser utilizado para mover o objeto para diferentes esteiras, onde ele vai interagir com outros braços robóticos que vão manipular o objeto de diferentes maneiras, formando uma espécie de linha de produção. As possibilidades do uso da tecnologia são inúmeras e ao explorar as possibilidades, abrimos caminho para um futuro onde a robótica avançada se tornará cada vez mais acessível, criativa e capaz de transformar a nossa forma de interagir com o mundo ao nosso redor.

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.