Tudo sobre DRIVER A4988 e Motor de Passo > Usando o Arduino
Nesse tutorial DRIVER A4988 + Motor de Passo > Usando o Arduino, você verá :
-
Tipos de Motores de Passo.
-
Motores de Passo – Unipolar e Bipolar / Tipos de enrolamentos.
-
Especificações de Motores de Passo.
-
Como funciona o Driver A4988.
-
Modos de passo do Driver A4988.
-
Recomendações importantes antes de usar o Módulo A4988.
-
Montagem do Módulo Driver A4988 + Motor de Passo.
-
Ajuste de Corrente do Módulo Driver A4988.
-
Testes do Driver A4988 + Motor de Passo.
O Módulo Driver A4988 é bem versátil e tem sido muito usado no controle dos motores de passo de CNCs e Impressoras 3D. Com esse tutorial você aprenderá como usá-lo. Entenderá como funciona um motor de passo e o Driver A4988. Aprenderá como configurar o driver para permitir movimentos mais adequados para o seu projeto.
A diferença desse tutorial para os outros sobre A4988, é que nele você terá um controle digital dos pinos de seleção do modo de passo. Nos outros tutoriais, esse controle é feito através de chaves ! Nada impede, que você despreze esse controle digital e use as chaves para selecionar o modo de passo.
Como funciona um Motor de passo :
Motor de passo é um motor elétrico que não possui escovas ou comutadores, permitindo assim uma vida longa sem tantos desgastes. O rotor constitui-se de um ou mais imãs permanentes. No estator encontram-se várias bobinas. O controle do motor é feito por um circuito eletrônico que aciona repetidamente as bobinas numa sequência que permite o giro do rotor. Cada pulso enviado para o circuito, faz com que o motor avance um passo. O sentido de rotação do motor é controlado também pela sequência e pela polarização das bobinas. A velocidade que o rotor gira é determinada pela frequência dos pulsos do circuito de controle. Quanto maior a frequência, maior será o RPM.
Os motores de passo mais comuns são os que precisam de 200 passos para girar uma volta (revolução). Mas existem outros com um menor ou maior número de passos, dependendo da aplicação.
Tipos de Motores de Passo :
Existem atualmente três tipos de motores de passo:
– Relutância variável
– Imã permanente
– Híbrido
Os motores de passo de Relutância Variável são os menos comuns, pois não possuem imãs permanentes. O rotor é feito de ferro doce. Os campos magnéticos são formados por enrolamentos no estator alimentados com corrente contínua. São usados em aplicações especiais com tamanho reduzido ou em tamanho maior em aplicações industriais. O circuito driver é diferente dos outros mais comuns. Esse é um motor RV :
Os motores de passo com imã permanente são motores mais baratos e com menor precisão (resolução), com passos com ângulos de 7,5 a 15 graus (48 a 24 passos por volta). São os mais usados em periféricos de computadores, devido ao baixo preço e baixa velocidade. Como o nome já diz, tem imãs permanentes que produzem maior torque do que os motores com relutância variável. Os enrolamentos do rotor são magnetizados alternadamente com o polo norte e sul, permitindo uma maior intensidade no fluxo magnético.
Os motores de passo híbridos são os motores mais sofisticados e mais caros, pois produzem melhor performance e maior velocidade devido ao menor angulo por passo. Os ângulos por passo podem variar entre 3,6 a 0,9 graus (100 a 400 passos por volta !) Esse motor possui as melhores características dos outros dois tipos de motor , IP e RV. O rotor é multi-dentado como o motor de RV, e tem dois magnetos polarizados presos ao eixo. Essa estrutura permite melhores características de torque dinâmico e de travamento. Por terem maior precisão, são os mais usados em fresadoras, impressoras 3D, etc.
Referências :
http://www.solarbotics.net/library/pdflib/pdf/motorbas.pdf
https://www.astrosyn.com/wp-content/uploads/2015/10/Guide-to-Steppe…
http://www.geckodrive.com/support/step-motor-basics.html
Motores de Passo – Unipolar e Bipolar / Tipos de enrolamentos :
Normalmente motores de passo tem duas fases, mas podem existir motores com três ou cinco fases também.
Dependendo do enrolamento dos motores de passo, podemos ter motores Unipolares ou Bipolares:
Motores de Passo – UNIPOLAR
Motores Unipolares tem fases (duas) com enrolamentos com um terminal central, por isso são consideradas por alguns, por terem quatro fases com um enrolamento para cada fase.
Nesse tipo de motor, cada fase é energizada por um circuito driver num único sentido de corrente somente. Isto é, uma extremidade do enrolamento será sempre positiva e a outra sempre negativa. O driver pode ser implementado com um transistor apenas. A desvantagem do motor unipolar é que tem menos torque do que o bipolar similar, pois sempre terá no máximo, a metade das fases energizadas. Daí pode-se concluir que tem 50% da eficiência em relação ao bipolar.
Motores de Passo – BIPOLAR
Motores bipolares, como o nome já diz tem duas fases, normalmente um enrolamento por fase.
A corrente no enrolamento precisa ser invertida para reverter um pólo magnético. Por isso , o circuito driver é mais complicado e geralmente utiliza-se de duas pontes-H. Pelo fato de serem melhores utilizados, eles são mais poderosos do que um motor unipolar do mesmo tamanho.
Tipos de Enrolamentos :
Motores que tem quatro enrolamentos separados por fase podem existir. Desse tipo, eles podem ser usados tanto no modo Unipolar quanto no modo bipolar. Mas somente se os quatro enrolamentos estiverem isolados !
Dependendo das conexões dos enrolamentos os motores podem ter quatro fios (modo Bipolar), cinco, seis ou oito fios. Para motores com cinco fios, somente pode ser usado o modo Unipolar. Mas para seis e oito fios, temos algumas variações bem interessantes.
Referências :
https://learn.adafruit.com/all-about-stepper-motors/types-of-steppers
http://www.kocomotion.de/fileadmin/pages/10_PRODUKTE/Dings/Dings_hy…
http://www.ece.mtu.edu/labs/EElabs/EE2304/EE2304_website_2008/Stepp…
http://www.nmbtc.com/pm-step-motors/engineering/pdf/pm_select.pdf
Especificações de Motores de Passo:
É importante entender as especificações de um Motor de Passo, para que possa fazer uma escolha correta para um Driver de Motor. Nunca exceda as limitações de um Motor ou de um Driver, pois assim poderá danificá-los.
Esse é o link de um dos maiores e mais antigos fabricantes de Motores de Passo do Japão:
Link de Motores de Passo Minebea
Especificações de um Motor Minebea 17PM-K053B : (exemplo)
- Step angle = 1,8º (ângulo de cada passo)
- Drive sequence = Bipolar (duas fases)
- Rated current = 1,2 A (máxima corrente a ser aplicada nas bobinas do motor)
- Resistance = 2,2 ohms (resistência ohmica em cada bobina)
- Holding Torque = 270 mNm ( torque de retenção do motor)
- Inductance = 4,6 mH ( indutância de cada bobina)
- Rotor Inertia = 37 g.cm² (inércia do rotor em grama x centímetro ²)
- Detent Torque = 11 mNm (Torque detente)
- Mass = 200 g (peso do Motor)
Holding Torque = O torque máximo que pode ser aplicado a um motor energizado, sem causar rotação contínua.
Detent Torque = O torque necessário para girar um motor de passo não energizado. Este torque resulta do ímã do rotor de um motor híbrido ou de imã permanente.
Esse Gráfico abaixo representa a variação do Torque do motor em relação à frequência dos pulsos do Driver e RPM do motor. Veja que quanto menor a frequência, maior será o Torque. Importante saber, que todo motor de passo tem uma frequência máxima. Se ultrapassar essa frequência, o motor irá vibrar e parar de girar!
Como funciona o Módulo Driver A4988:
O módulo Driver A4988 possui um chip A4988, resistores e capacitores. O chip A4988 possui duas pontes H com transistores FET DMOS para fazer o controle de motores de passo Bipolares. (motores com quatro, seis ou oito fios). Esse chip não pode controlar motores de passo Unipolares !
Devido ao uso de FETs para os drivers do motor, a resistência interna da Ponte H é baixa. Isso é muito bom, pois diminui bastante a potência despendida e portanto, o calor dissipado é bem menor. O chip é bem versátil, tem proteção contra curto-circuitos nas saídas e proteção contra excesso de temperatura.
Ele permite cinco modos de controle dos passos – Passo completo(full step), meio passo, um quarto de passo, um oitavo de passo e um dezesseis-avos de passo, os quais chamamos de micro-stepping. A capacidade máxima de controle na saída é de até 35 Volts e +-2 amperes. O chip tem um sofisticado controle de corrente nos motores, que permite o uso, com barulho reduzido, precisão apurada e dissipação reduzida de potência. Não aprofundarei na explicação do circuitos internos do motor, pois são bem complexos.
Essas são as informações (datasheet) do chip A4988:
http://www.allegromicro.com/en/Products/Motor-Driver-And-Interface-…
No chip, de um lado temos as portas de controle do motor e do outro lado , as conexões com o motor e os pinos de monitoramento de corrente. Todas as entradas de controle do motor são compatíveis com os níveis de 3,3V e 5V, adequadas tanto para os Arduinos quanto para os ESP8266, ESP32 e Raspberry PIs. O fabricante do chip é a Allegromicro. É uma empresa bastante experiente em drivers de motores. E tem muitos outros chips específicos para controle de motor.
Pinos do Módulo Driver A4988:
- STEP (passo) – um sinal com transição de baixo para alto avança um passo,
- DIR – permite a alteração no sentido da rotação do motor,
- – ENABLE – um sinal baixo ativa os drivers do motor,
- – RESET – um sinal baixo dá um reset no chip, desativando todas os drivers de saída,
- – SLEEP (dormir) – esse pino quando negativo, desabilita alguns circuitos internos para economizar energia.
- MS1, MS2 e MS3 – são entradas para selecionar o modo da sequência dos passos (micro stepping) .
Algumas informações adicionais sobre o chip A4988:
O pinos MS1, MS2 e MS3 tem resistores conectados no terra (pull down). Portanto se não conectar esses pinos em alguma porta de um microcontrolador, o modo que será usado é o Passo completo ( Full Step).
O pino -ENABLE também tem um resistor conectado no terra (pull down) , portanto se não conectar no microcontrolador, o módulo ficará sempre ativo.
Já o pino -SLEEP tem um resistor conectado no VDD (pull up). Portanto se estiver isolado ele nunca irá dormir ..
Modos de passo do Driver A4988:
Esses são os cinco Modos de Passo do Motor, selecionados através dos pinos MS1,MS2 e MS3:
Os motores de passo mais comuns, são os motores que cada passo corresponde à 1,8 graus. Como uma revolução completa tem 360 graus, portanto esse motor precisa de 200 passos para completar uma volta. Sabemos que para o avanço de cada passo é necessário um pulso, portanto:
PPR = 360º / 1,8º = 200 passos (ou pulsos)
Esse parâmetro chama-se PPR – pulsos por revolução. Veja que quanto menor o modo de passo, maior é o número PPR, permitindo uma maior precisão no controle do motor. Mas saiba, que o modo micro-passo produz um torque menor do que o modo passo completo, devido à redução de corrente usada nesse modo.
- Modo Passo Completo ( Full Step): PPR = 200
- Modo Meio Passo ( Half Step): PPR = 400
- Modo Micro-passo ( MP 1/4): PPR = 800
- Modo Micro-passo ( MP 1/8): PPR = 1600
- Modo Micro-passo ( MP 1/16): PPR= 3200
Referências sobre Micro-Stepping :
https://www.zaber.com/applications/technotes_documents/microstepping_tutorial.pdf
http://users.ece.utexas.edu/~valvano/Datasheets/StepperMicrostep.pdf
http://homepage.cs.uiowa.edu/~jones/step/micro.html
Recomendações Importantes antes de usar o seu módulo A4988 !
(para evitar de danificá-lo)
- Esse módulo foi feito para motores de passo Bipolar, não use um motor unipolar. (exceto se o motor Unipolar puder ser usado no modo Bipolar)
- Antes de fazer a conexão dos fios das bobinas do motor, certifique-se que a identificação dos fios esta correta. Recomendo que meça o valor da resistência das bobinas.
- Use um motor que se encaixe nas especificações do módulo – tensão máxima 35V e corrente máxima de 2 A.
- Se estiver usando duas fontes separadas, alimente primeiramente a fonte de 5V (Arduino) e depois a de 12V (Driver A4988).
- Conecte os fios das bobinas do motor no módulo A4988, antes de energizá-lo.
- Não desconecte os fios da bobina, quando o módulo A4988 estiver energizado.
- Se o módulo A4988 estiver aquecendo muito, cole o dissipador no chip.
Montagem do Driver A4988 + Motor de Passo
Para testes, montei um circuito do Módulo Driver A4988 conectado à um motor de passo NEMA17, sendo controlado por um Arduino Nano (ou outro modelo de Arduino). Normalmente encontra-se na WEB, inúmeros circuitos desses, mas somente controlando os pinos de sentido de rotação (DIR) e dos pulsos dos passos (STEP). Para permitir um controle total do Driver A4988, na minha montagem todos os pinos de controle estão conectados às portas digitais do Arduino.
Observações importantes :
-
-
- A tensão de alimentação do Motor deve ser entre 8V e 35 V (não poderá usar motores com 5V somente).
- A fonte de alimentação do Motor deverá suportar 2 ou mais amperes.
- A corrente não pode ultrapassar 2A em cada bobina do motor.
- Use um capacitor (C1) de no mínimo 100 uF para filtrar ruídos na alimentação 12V do motor.
- Use um capacitor (C2) de no mínimo 10 uF para filtrar ruídos na alimentação 5V do chip A4988.
- Não se esqueça de conectar o terra do Arduino ao terra do Módulo A4988 !
- As cores dos fios do motor podem variar – veja nas especificações do seu motor.
-
O Módulo Driver A4988 tem um potenciometro (POT) de ajuste de corrente máxima. Se a corrente ultrapassar o limite, o chip será desativado para proteção dos circuitos. Antes de rodar o programa de teste, o ajuste de corrente deverá ser realizado ! Veja o procedimento abaixo.
Ajuste de Corrente do Módulo Driver A4988:
O chip A4988 tem recursos de proteção contra excesso de temperatura ( temperatura de Shutdown é de 165 graus Celsius), proteção contra excesso de corrente nos FETs de potência e ainda proteção contra curto-circuitos nos pinos conectados nas bobinas.
A corrente máxima do Driver deverá ser ajustada para o mesmo valor da corrente máxima do motor (datasheet). A verificação das correntes nas bobinas do motor é realizada através da medição das tensões sobre os resistores RS1 e RS2 do módulo. Essas tensões são comparadas com a tensão de referência (V REF) do chip A4988.
Essa tensão de referência é ajustada através do trimpot (POT), marcado com uma seta vermelha. Use uma chave de fenda de relojoeiro para ajustar – gire com delicadeza.
Carregue o programa A4988_ajusteCorrente , pois o módulo deve ser configurado para o modo de Passo Completo (FULL) para esse ajuste de corrente. Não ligue a fonte de 12V ainda. Não é necessário ligá-la, para fazer esse ajuste. Conecte a ponta negativa (preta) do seu Voltímetro no pino GND do Módulo A4988. E a ponta positiva (vermelha) pode colocá-la sobre a parte superior metálica do potenciômetro. Muito cuidado para não provocar um curto-circuito. A tensão de Referência (do POT) deve ser ajustada de acordo com os cálculos abaixo.
O cálculo da corrente máxima é esse ( retirado das especificações do fabricante do chip A4988) :
I max = V REF / ( 8 x RS ) ou V REF = I max x ( 8 x RS )
No meu módulo RS = 0,1 ohm e a tensão Vref = 1,25 V ( veio ajustado com essa tensão)
Portanto :
I max = 1,25 / ( 8 x 0,1 ) = 1,56 Ampéres
Fazendo alguns cálculos como exemplo :
( S1 e S2 = 0,1 ohms – codigo R100 no resistor)
I max = Vref / ( 8 x 0,1 )
-
-
- para 2A (max) => Vref = Imax x ( 8 x 0,1 ) = 2,0 x 0,8 = 1,6 V
-
(não ultrapasse esse limite !)
-
-
- para 1,5 A => Vref = Imax x ( 8 x 0,1 ) = 1,5 x 0,8 = 1,2 V
- para 1,0 A => Vref = Imax x ( 8 x 0,1 ) = 1,0 x 0,8 = 0,8 V
- para 0,5 A => Vref = Imax x ( 8 x 0,1 ) = 0,5 x 0,8 = 0,4 V
-
Testes do Driver A4988 + Motor de Passo
Criei um Sketch para permitir o teste de todos os pinos de controle / funções do Módulo A4988. Usei as oito portas digitais do Arduino. A designação de cada porta foi escolha minha. Nada impede que você utilize outras portas, desde que altere as ligações e o seu sketch de acordo com o novo circuito.
O Sketch permite o uso de todos os modos de passo :
- Passo Completo (Full),
- Meio Passo (Half),
- Micro-passo de 1/4,
- Micro-passo de 1/8,
- Micro-passo de 1/16.
Permite também que configure a frequência dos pulsos (passos) e o RPM, a quantidade de passos,o sentido de rotação, etc.
Carregue o Sketch na IDE Arduino. Compile-o e grave-o no Arduino. Abra o Monitor Serial (Console) com a velocidade de 9600 Bps. Pronto, agora pode ligar a fonte de 12V . Acompanhe os testes através da Console.
Faça as alterações necessárias no programa, se quiser fazer outro tipo de teste. Se o sentido da rotação não corresponde ao Monitor, inverta as ligações das bobinas. Onde esta ligada a bobina A, conecte a bobina B. E a bobina B conecte na ligação da A.
Arquivo do Sketch : A4988_teste.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
// Controle de Motor de Passo com Modulo driver A4988
//
// Modulo A4988 / Motor de Passo Bipolar / Arduino Nano / IDE 1.8.5
// Gustavo Murta 29/mar/2018
// Definiçoes das Portas Digitais do Arduino
int RST = 8; // Porta digital D08 – reset do A4988
int SLP = 9; // Porta digital D09 – dormir (sleep) A4988
int ENA = 7; // Porta digital D07 – ativa (enable) A4988
int MS1 = 4; // Porta digital D04 – MS1 do A4988
int MS2 = 5; // Porta digital D05 – MS2 do A4988
int MS3 = 6; // Porta digital D06 – MS3 do A4988
int DIR = 3; // Porta digital D03 – direção (direction) do A4988
int STP = 2; // Porta digital D02 – passo(step) do A4988
int MeioPeriodo = 1000; // MeioPeriodo do pulso STEP em microsegundos F= 1/T = 1/2000 uS = 500 Hz
float PPS = 0; // Pulsos por segundo
boolean sentido = true; // Variavel de sentido
long PPR = 200; // Número de passos por volta
long Pulsos; // Pulsos para o driver do motor
int Voltas; // voltas do motor
float RPM; // Rotacoes por minuto
void setup()
{
Serial.begin(9600);
DDRD = DDRD | B11111100; // Configura Portas D02 até D07 como saída
disa_A4988(); // Desativa o chip A4988
DDRB = 0x0F; // Configura Portas D08,D09,D10 e D11 como saída
digitalWrite(SLP, HIGH); // Desativa modo sleep do A4988
rst_A4988(); // Reseta o chip A4988
ena_A4988(); // Ativa o chip A4988
}
void rst_A4988()
{
digitalWrite(RST, LOW); // Realiza o reset do A4988
delay (10); // Atraso de 10 milisegundos
digitalWrite(RST, HIGH); // Libera o reset do A4988
delay (10); // Atraso de 10 milisegundos
}
void disa_A4988()
{
digitalWrite(ENA, HIGH); // Desativa o chip A4988
delay (10); // Atraso de 10 milisegundos
}
void ena_A4988()
{
digitalWrite(ENA, LOW); // Ativa o chip A4988
delay (10); // Atraso de 10 milisegundos
}
void HOR() // Configura o sentido de rotação do Motor
{
Serial.println(” Sentido Horario “);
digitalWrite(DIR, HIGH); // Configura o sentido HORÁRIO
}
void AHR() // Configura o sentido de rotação do Motor
{
Serial.println(” Sentido anti-Horario “);
digitalWrite(DIR, LOW); // Configura o sentido ANTI-HORÁRIO
}
void PASSO() // Pulso do passo do Motor
{
digitalWrite(STP, LOW); // Pulso nível baixo
delayMicroseconds (MeioPeriodo); // MeioPeriodo de X microsegundos
digitalWrite(STP, HIGH); // Pulso nível alto
delayMicroseconds (MeioPeriodo); // MeioPeriodo de X microsegundos
}
void FREQUENCIA() // calcula Pulsos, PPS e RPM
{
Pulsos = PPR * Voltas; // Quantidade total de Pulsos (PPR = pulsos por volta)
PPS = 1000000 / (2 * MeioPeriodo); // Frequencia Pulsos por segundo
RPM = (PPS * 60) / PPR; // Calculo do RPM
}
void FULL()
{
Serial.println(” Passo Completo PPR = 200 “);
PPR = 200; // PPR = pulsos por volta
digitalWrite(MS1, LOW); // Configura modo Passo completo (Full step)
digitalWrite(MS2, LOW);
digitalWrite(MS3, LOW);
}
void HALF()
{
Serial.println(” Meio Passo PPR = 400 “);
PPR = 400; // PPR = pulsos por volta
digitalWrite(MS1, HIGH); // Configura modo Meio Passo (Half step)
digitalWrite(MS2, LOW);
digitalWrite(MS3, LOW);
}
void P1_4()
{
Serial.println(” Micro-passo 1/4 PPR = 800 “);
PPR = 800; // PPR = pulsos por volta
digitalWrite(MS1, LOW); // Configura modo Micro Passo 1/4
digitalWrite(MS2, HIGH);
digitalWrite(MS3, LOW);
}
void P1_8()
{
Serial.println(” Micro-passo 1/8 PPR = 1600 “);
PPR = 1600; // PPR = pulsos por volta
digitalWrite(MS1, HIGH); // Configura modo Micro Passo 1/8
digitalWrite(MS2, HIGH);
digitalWrite(MS3, LOW);
}
void P1_16()
{
Serial.println(” Micro-passo 1/16 PPR = 3200 “);
PPR = 3200; // PPR = pulsos por volta
digitalWrite(MS1, HIGH); // Configura modo Micro Passo 1/16
digitalWrite(MS2, HIGH);
digitalWrite(MS3, HIGH);
}
void TesteMotor()
{
Print_RPM (); // Print Voltas, PPS e RPM
HOR(); // Gira sentido Horario
for (int i = 0; i <= Pulsos; i++) // Incrementa o Contador
{
PASSO(); // Avança um passo no Motor
}
disa_A4988(); // Desativa o chip A4988
delay (1000) ; // Atraso de 1 segundo
ena_A4988(); // Ativa o chip A4988
AHR(); // Gira sentido anti-Horario
for (int i = 0; i <= Pulsos; i++) // Incrementa o Contador
{
PASSO(); // Avança um passo no Motor
}
disa_A4988(); // Desativa o chip A4988
delay (1000) ; // Atraso de 1 segundo
ena_A4988(); // Ativa o chip A4988
}
void Print_RPM ()
{
FREQUENCIA(); // calcula Pulsos, PPS e RPM
Serial.print(” Voltas= “);
Serial.print(Voltas);
Serial.print(” Pulsos= “);
Serial.print(Pulsos);
Serial.print(” PPS= “);
Serial.print(PPS, 2);
Serial.print(” RPM= “);
Serial.println(RPM, 2);
}
void loop()
{
Serial.println();
FULL(); // Selecione aqui o modo de passo
//HALF(); // desmarque o comentario somente da opcao desejada
//P1_4();
//P1_8();
//P1_16();
Voltas = 3; // Selecione o numero de Voltas
TesteMotor(); // Inicia teste do motor
}
|
Se tiver alguma dúvida, deixe um comentário!