Se você deseja construir máquinas, como um robô seguidor de linha ou uma CNC caseira que recorta perfeitamente acrílico, é essencial possuir o conhecimento em drivers para motores de passo e DC. O objetivo é claro e você pode entender com os seguintes exemplos. um robô com duas rodas foi programado para seguir uma determinada linha no chão, mas como movimentar os motores para frente ou para trás? Segundo exemplo, uma CNC está programada para recortar um desenho qualquer no acrílico, e como os motores em seus devidos eixos se movimentam com a famosa precisão? Este tutorial NÃO aborda a montagem de robôs, impressoras 3D ou CNC.
Com este tutorial você irá aprender como são controlados os motores de passo Unipolar/Bipolar e motores DC utilizando transistores de potência, circuitos integrados e Arduino, sendo possível aplicar conceitos fundamentais na prática, como uma Ponte H Dupla e eletrônica digital. Um guia completo em drivers para você seguir em frente!
1) Introdução aos Motores DC
Os motores Direct Current ou CC (Corrente Contínua) mais comuns são designados como Brushed ou escovado, encontrados em eletrodomésticos, brinquedos, projetos com embarcados, e máquinas industriais em diferentes dimensões e pesos. Internamente o motor possui diversas peças com suas devidas responsabilidades, mas que trabalham em conjunto, uma delas é o estator fixo que fornece constantemente um campo magnético para as armaduras, que são camadas de aço e fios em forma de bobina, onde são conectadas nos pares de anéis do comutador, peça responsável em mudar a direção da corrente, quando é aplicada uma tensão aos seus terminais aonde estão localizadas as escovas, a corrente flui sobre as bobinas e uma força eletromotriz é adicionada, rotacionando o eixo do motor.
Para rotacionar um motor DC utilizamos uma configuração de transistores chamada Ponte H (H Bridge), para inverter o fluxo da corrente nas bobinas gerando o efeito de rotacionar no sentido horário e anti-horário, estes conceitos serão esclarecidos nos próximos itens.
2) Introdução aos Motores de Passo
Os motores de passo também são motores DC, porém se movem com estágios discretos, onde um passo é realizado quando a direção do fluxo de corrente na bobina é alterada, invertendo o campo magnético. Internamente possuem estatores e várias bobinas organizadas em grupos denominadas como fases, bem como um ímã entre dois rotores com rolamentos fixos ao eixo.
Mas quais são as vantagens de utilizar um motor de passo? 1) Precisão no posicionamento, principalmente se possuir um sistema de feedback. 2) Controle de velocidade em RPM, podemos rotacionar o motor em 1 RPM ~ 140 RPM. 3) Torque em baixa velocidade, os motores de passo oferecem uma maior força em baixa velocidade, principalmente os motores Bipolares, bem oposto dos motores DC sem caixa de redução, que possuem torque razoavelmente baixo em baixa rotação. 4) É possível realizar microsteppings com drivers específicos, aumentando ainda mais a precisão para CNC's e impressoras 3D.
Existem dois tipos de motores de passo, o Unipolar e Bipolar, a diferença entre eles é como o campo magnético é revertido. O motor Unipolar de duas fases energiza metade das bobinas por vez, possuindo uma bobina de desvio central (Common) ligada em cada fase, e para rotacionar o motor necessita de uma configuração com quatro transistores para cada fase. O motor Bipolar de duas fases utiliza um conjunto de transistores chamada Ponte H Dupla (H Dual Brigde), onde este circuito inverte o fluxo da corrente nas bobinas, e com esta mudança de polaridade todas as bobinas podem ser ligadas para rotacionar o motor, gerando mais torque.
Também temos que levar em consideração a quantidade de fios que cada tipo de motor de passo possui, motores Bipolares geralmente possuem 4 fios, e os motores Unipolares possuem 5, 6 ou até 8 fios. O tipo mais interessante é o Unipolar de 6 fios, onde é possível unir os dois fios do Common formando um motor de 5 fios, ou ignora-los imitando um motor Bipolar, porém vale ressaltar que a parte mecânica das bobinas ainda continuam sendo de um motor Unipolar.
A sequencia dos passos mais comuns para esses dois tipos é de duas fases, um exemplo simplificado de chaveamento para movimentar o motor em um ângulo de 360 graus (Full-step), neste caso o motor utiliza duas fases por vez dividindo o ângulo por 4, onde cada passo será 90 graus. Para demonstrar esse procedimento de uma forma didática, fizemos uma tabela verdade com seus respectivos valores de ligado = 1 e desligado = 0 das bobinas.
Os motores de passo não trabalham com 90 graus a cada passo, geralmente os motores de 2 fases são de 1.8 graus (Step Degree), dando 200 passos para uma volta completa (Steps per Revolution), incentivando a precisão dos movimentos. O valor do Step Degree são encontrados no datasheet ou etiqueta do motor, e com este valor é possível aplicar a fórmula abaixo com o objetivo de descobrir quantos passos são necessários para completar 360 graus.
Com todas essas informações explanadas podemos controlar a velocidade e rotação dos motores de passo e motores DC utilizando um Arduino, mas não podemos conectar os fios do motor diretamente nas portas do microcontrolador, para isso os dados que serão enviados aos motores necessitam passar por um driver, onde as informações de velocidade e rotação em forma digital serão interpretados e distribuídos por um sistema de chaveamento eletrônico, responsáveis em converter a polaridade da tensão. Portanto nos próximos tópicos serão explicados detalhadamente os tipos de drivers para cada motor, demonstrando projetos desenvolvidos a base de transistores e com circuitos integrados dedicados para a área de eletrônica de potência.
3) Driver Ponte H
A Ponte H é um circuito eletrônico elementar para controle de cargas de potência, baseado em grupos com dois transistores, onde o grupo superior possuem seus Coletores ligados ao Vs (Power Supply), as Bases com seus respectivos dados digitais com resistor limitador de corrente, e os Emissores ligados aos Coletores do grupo de transistores inferiores, sendo que suas Bases também são ligadas aos dados digitais que possuem um sinal de PWM (Pulse Width Modulation), e os Emissores conectados ao GND, trabalhando como um sistema de chaveamento invertido, permitindo que os motores rotacionam corretamente pelo controle da tensão do terminal da armadura.
Analisando a imagem abaixo, podemos visualizar o funcionamento da Ponte H com transistores de junção bipolar NPN, onde um dos transistores do grupo superior estará em modo Saturado e o outro em Corte, e os transistores do grupo inferior sempre terá esta condição invertida. Esta configuração também pode ser realizada com transistores MOSFET de canais N e P. Curiosadamente o posicionamento dos transistores com suas ligações lembram a letra H. Para motores de passo Bipolares de duas fases é necessário uma Ponte H Dupla, onde cada par de fio é conectado em uma Ponte, como mostra a segunda imagem abaixo.
3.1) Driver Ponte H Dupla com transistores
Uma Ponte H com transistores de potência desenvolvida da forma correta, são circuitos robustos para robótica e automação pesada. Para este artigo desenvolvemos um projeto de Ponte H Dupla com transistores baseado no datasheet do L298N, e preparado para receber dados digitais do Arduino ou qualquer outro sistema embarcado. Com este circuito você pode ligar dois motores DC e um motor de passo Bipolar.
Para você montar este projeto é necessário alguns componentes eletrônicos e materiais, com isso separamos uma lista.
- 1 Protoboard
- 8 Transistores TIP122 com dissipador e mica.
- 1 CI CD4069 (Portas Inversoras CMOS)
- 2 CI's CD4081 (Portas AND CMOS)
- 1 CI 7407 (Buffers com Open-Collector TTL)
- 1 LM7805 - Projetando uma fonte de 5V e 3.3V para sistemas embarcados
- 5 Capacitores de poliéster ou cerâmico de 100nF, para +Vs de aprox. 60V
- 1 Capacitor eletrolítico de 470uF
- 8 Resistores de 1K
- 12 Resistores de 10K
- 1 Resistor de 470R
- 9 Diodos 1N4007
- Fonte de alimentação 12V
- 1 LED
- Fios
- 1 Arduino com cabo USB.
- 1 Motor de passo Bipolar ou 2 Motores DC
Os diodos entre os fios dos motores foram adicionados para impedir que a corrente inversa gerada pela força eletromotriz não volte para as portas do microcontrolador, como também evitar o fenômeno da indutância. Os circuitos integrados CD4069 e CD4081 são alimentados com uma tensão de 12V, eles realizam o controle das cargas e PWM para os transistores. O regulador de tensão LM7805 está presente no projeto para alimentar o circuito integrado 7407, este CI é responsável em converter os dados digitais em 5V vindos do Arduino para uma tensão de 12V, sendo compatíveis aos circuitos integrados CMOS do projeto.
O transistor escolhido para o projeto é o TIP122 do tipo Darlington NPN de 5A - 100V, para a montagem é importante salientar, que esses transistores requer um dissipador e mica isolante, pois a carcaça é o Coletor, isto é, se colocar vários destes transistores em um único dissipador sem mica, eles entrarão em curto. Antes de ligar é importante realizar um teste com um multímetro para checar se todos os transistores estão corretamente isolados.
Com a parte do hardware testada e finalizada, agora podemos utilizar um Arduino com um código adequado para controlar motores DC, para isso leia o item Sketches para Motores DC. Com este mesmo projeto você também pode testar motores de passo Bipolares, para isso leia o item Sketch para Motores de Passo.
Esta Ponte H Dupla foi desenvolvida para um projeto de robótica em AVR, é controlado por aplicativo Android e controle WiFi NodeMCU ESP12e, este robô possui estrutura de ferro, dois motores DC grandes capazes de movimentar 6 rodas com engrenagens e correntes.
A versão 2.0 da Ponte H sofreu grandes mudanças em sua tecnologia, onde foi possível "turbinar" o circuito entregando um resultado satisfatório aos motores.
Veja algumas fotos do desenvolvimento da Ponte H e o resultado final!
3.2) Driver Ponte H Dupla com L298N
O circuito integrado L298N é uma Ponte H Dupla muito utilizada em projetos com motores DC e motores de passo Bipolares, operando em até 46V e 4A. Sua configuração externa depende de 8 diodos entres os fios do motor, resistores de 0.5 Ohms para os Senses e um controlador, podendo ser um L297 conforme o datasheet, mas para o nosso conforto, vamos utilizar um Arduino.
Atualmente é possível encontrar módulos com este CI facilmente, eles são práticos para a prototipagem, pois já possuem a configuração básica, barras de pinos macho para as Inputs, e Enable A/B com jumpers para alternar entre PWM e 5V, como também conectores bornes KRE para as Outputs e alimentação externa, além disso possui um regulador de tensão LM7805 e um jumper, onde podemos alternar entre Entrada ou Saída de 5V. É recomendável que utilize uma fonte externa na entrada +12v do módulo.
Para testar com um Arduino o funcionamento deste módulo com um ou dois Motores DC, utilize os Sketches para Motores DC, ligando as entradas IN1, IN2, IN3. IN4, ENA e ENB nas portas digitais, e para motores de passo Bipolares, leia o item Sketch para Motores de Passo, conectando as entradas IN1, IN2, IN3 e IN4 nas portas digitais, e ENA e ENB com os jumpers.
3.3) Driver Ponte H com L293D
Este circuito integrado é o mais comum de todos, ele é amplamente utilizado em projetos mais simples que não necessitam de um driver potente, operando em até 36V e 1.2A em seu máximo. O L293D é uma Ponte H Dupla diferente, ela possui divisões internas com quatro grupos de meio Ponte H, ou seja, dois transistores cada. A configuração básica pode ser feita em um protoboard e ser controlado por um Arduino, para isso separamos uma lista de materiais necessários para montar este driver utilizando apenas um CI L293D.
- Protoboard
- 1 CI L293D
- Arduino Uno com cabo USB
- 1 Capacitor de 47uF de 63V
- 1 Capacitor de 100uF de 16V
- 1 Capacitor de 100nF
- Fios
- Fonte de alimentação 12V
- 1 Motor de passo Bipolar ou 2 Motores DC
Para testar este projeto com o CI L293D e Arduino, leia o item Sketches para Motores DC, conectando nas entradas IN1, IN2, IN3, IN4, ENA e ENB nas portas digitais, e para motores de passo Bipolares, leia o item Sketch para Motores de Passo, conectando as entradas IN1, IN2, IN3 e IN4 nas portas digitais, e ENA e ENB no 5V do Arduino.
Existem módulos que possuem o L293D para auxilar nas montagens, como por exemplo o Motor Shield, compatíveis em placas Arduino Uno e Mega. O Motor Shield possui dois L293D, ou seja, você pode controlar quatro motores DC e dois motores de passo Bipolares. Este shield possibilita a conexão de dois motores de servo, e ter acesso fácil ao barramento de pinos analógicos e de alimentação do Arduino. Igualmente ao módulo L298N, também podemos conectar uma fonte externa, basta retirar o jumper PWR (Power) e ligar os fios em M+ e GND do borne KRE. Para utilizar este shield no Arduino com motores de passo, DC e servos é necessário uma biblioteca específica desenvolvida pela Adafruit chamada AFMotor, no site oficial possui exemplos para cada tipo de aplicação.
O interessante deste shield é a facilidade para prototipagem, como por exemplo na imagem abaixo de um robô com duas rodas controlado por WiFi e um aplicativo Android.
4) Driver para motores de passo Unipolares
Como salientado anteriormente, os motores de passo Unipolares necessitam de um driver especifico para operar em seu torque adequado, devido a separação das bobinas internas do motor .Em comparação com a distribuição de cargas em um driver Ponte H, o driver para o tipo Unipolar são mais simples de serem projetados com transistores, como também existem circuitos integrados com Darlingtons capazes de controlar esses motores de uma forma simples, como o clássico ULN2003.
4.1) Driver com transistores
Para controlar um motor de passo Unipolar é necessário 4 transistores do tipo Darlington e um buffer para amplificar o sinal das saídas do Arduino, que são ligadas nas entradas do driver, ou bases dos transistores. Para isso separamos uma lista com os materiais necessários para você montar este projeto. Atenção, NÃO utilize a tensão 5V do Arduino e reforce o GND/Emissores dos transistores com um fio mais grosso.
- 1 Protoboard.
- 1 Motor de passo Unipolar de 6 fios, Ex: Minebea 23LM-C004 Astrosyn
- 1 CI CD4050 (Buffers não-inversos CMOS).
- 4 Transistores TIP122 com dissipador e mica.
- 5 Diodos 1N4007.
- 5 LEDs.
- 4 Resistores de 220R.
- 1 Resistor de 470R
- 2 Capacitores cerâmicos ou poliéster de 100nF.
- Fios
- 1 Arduino Uno com cabo USB
- 1 LM7805 - Projetando uma fonte de 5V e 3.3V para sistemas embarcados
- 1 Capacitor eletrolítico de 470uF de 16V
- Fonte de alimentação de 9V.
4.2) Driver com ULN2003
O circuito integrado ULN2003 é composto por sete transistores Darlington, suportando 30V em sua tensão de entrada e 50V de saída, a corrente de saída dos coletores são de 500mA, com picos de 600mA, muito útil para motores de passo Unipolares pequenos. Separamos uma lista com os componentes necessários para montar um driver utilizando o ULN2003 no protoboard, onde podemos utiliza-lo com um Arduino.
- 1 Protoboard.
- 1 ULN2003.
- 1 Capacitor eletrolítico de 1000uF.
- 2 Capacitores cerâmicos/poliéster de 100nF.
- 1 Resistor de 1k.
- 4 Resistores de 220R.
- 5 LEDs.
- 1 Arduino com cabo USB.
- 1 Motor de passo Unipolar pequeno de 6 fios, Ex FUJI: Stepper Motor SMB35-48
Vale salientar que dependendo do motor de passo Unipolar utilizado, os valores de Step Degree e Steps per Revolution são diferentes, para isso consulte a etiqueta ou datasheet do motor. No caso do FUJI: Stepper Motor SMB35-48 utilizado neste artigo, os valores são de 48 passos e ângulo de 7.5°.
A utilização deste driver com o ULN2003 segue o Sketch para Motores de Passo, com modificações nos valores de Step Degree e SpR.
Sketches para Motores DC
Para este artigo foram desenvolvidos Sketches utilizando a IDE oficial do Arduino com o intuito de controlar Motores DC.
Exemplo 1: TwoDCMotors
/*
* Exemplo para controlar dois motores DC.
*
* Autor: tecdicas
* https://tecdicas.com/
*
* 10/11/2018
*
* MIT
*/
#include <DCMotorDriver.h>
// Pinagem do Motor 1
#define ENA 3
#define IN1 2
#define IN2 4
// Pinagem do Motor 2
#define ENB 5
#define IN3 6
#define IN4 7
// Instâncias dos motores
DCMotorDriver Motor1(ENA, IN1, IN2);
DCMotorDriver Motor2(ENB, IN3, IN4);
void setup()
{
Serial.begin(9600);
}
void loop()
{
Motor1.Speed(255);
Motor1.Forward();
delay(1000);
Motor1.Stop();
delay(1000);
Motor2.Speed(100);
Motor2.Backward();
delay(1000);
Motor2.Stop();
delay(1000);
}
Exemplo 2: DCMotorSpeedRamp
/*
* Biblioteca DCMotorDriver
*
* Exemplo de Rampa para acelerar e desacelerar um motor DC.
*
* Autor: tecdicas
* https://tecdicas.com/
*
* 10/11/2018
*
* MIT
*/
#include <DCMotorDriver.h>
// Pinagem do Motor 1
#define ENA 3
#define IN1 2
#define IN2 4
// Instância do motor
DCMotorDriver Motor1(ENA, IN1, IN2);
void setup()
{
Serial.begin(9600);
}
void loop()
{
// Utilze o Plotter Serial.
for(int x=0; x<255; x++)
{
Motor1.Forward(x);
Serial.println(x);
delay(50);
}
for(int x=255; x>0; x--)
{
Motor1.Forward(x);
Serial.println(x);
delay(50);
}
}
Sketch para Motores de Passo
Para controlar motores de passo Bipolares e Unipolares utilizando a plataforma Arduino, foi desenvolvido um Sketch capaz de manipular os ângulos e velocidades de sua preferencia em um motor de passo. Utiliza-se a biblioteca Stepper fornecida pela IDE oficial do Arduino, no código temos uma função chamada Rotacionar(angulo, velocidade), com ela é possível setar qualquer desses parâmetros para rotacionar o motor.
Atenção: Altere os valores de stepDegree e SpR conforme o seu motor de passo para funcionar corretamente!
Exemplo: StepperAngleSpeed
/*
* Ponte H dupla com transistores TIP122, L298N e L293D utilizando Arduino.
*
* Código para controlar 1 motor de passo bipolar com a biblioteca Stepper.
*
* Autor: tecdicas
*
*/
#include <Stepper.h>
// Steps per Revolution, 360°/1.8° = 200 passos.
int SpR = 200;
float stepDegree = 1.8;
// Configuração Motor de Passo Pinagem - Enable A e B = 5V
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
// Instancia o motor de passo conforme SpR e pinagem do Arduino.
Stepper MotorPasso(SpR, IN1, IN2, IN3, IN4);
void Rotacionar(int angulo, uint8_t velocidade)
{
MotorPasso.setSpeed(velocidade);
int passos = angulo / stepDegree;
Serial.println(passos);
MotorPasso.step(passos);
delay(600);
}
void setup()
{
// Inicia a serial com 9600 de baudrate.
Serial.begin(9600);
}
void loop()
{
// Velocidade de 1 a 150
Rotacionar(-180, 140);
Rotacionar(180, 50);
Rotacionar(-360, 100);
Rotacionar(90, 10);
Rotacionar(-90, 140);
}
Referências
- BRAGA, N, C; Manual de Mecatrônica. Editora Newton C. Braga, 2014.
- TOCCI, R, J; WIDMER, N. S; MOSS, G. L; Sistemas digitais: princípios e aplicações. 11 ed. Pearson Prentice Hall, 2011.
- UMANS, S, D; Máquinas elétricas de Fitzgerald e Kingsley. AMGH Editora, 2014.