Diagrama mínimo de conexões para o modo de passo cheio.
Conexões de alimentação
O
controlador necessita de uma alimentação lógica (3 a 5,5V) conectada
nos pinos VDD e GND, e uma alimentação para o motor (8 a 35V) conectada
aos pinos VMOT e GND. Estas alimentações devem ter capacitores de
desacoplamento próximos à placa e que devem ser capazes de fornecer as
correntes esperadas (picos de até 4A para a alimentação do motor).
Nota:
Esta placa utiliza capacitores cerâmicos de baixa ESR sucetíveis a
destruição por picos de tensão LC, especialmente quando utilizando cabos
de alimentação maiores do que alguns centímetros. Sob certas condições
estes picos podem exceder a voltagem máxima de 35V permitida para o
A4988, causando danos permanentes, mesmo com voltagens de alimentação
tão baixas quanto 12V. Um modo de proteger o controlador contra estes
picos é colocar um capacitor eletrolítico grande (> 50 µF) entre os
pinos VMOT e GND tão próximo à placa quanto possível.
Conexões do motor
Motores de passo com 4, 6 e 8 cabos podem ser controlados pelo A4988 se estiverem conectados corretamente. Veja as perguntas frequêntes na página do fabricante para maiores detalhes.
Nota: Conectar ou desconectar um motor de passo enquanto o controlador está alimentado pode destruir o controlador.
Tamanho do passo (e do micropasso)
Motores
de passo normalmente têm um tamnaho de passo específico (e.g. 1,8º ou
200 passo por revolução), que se aplicam a passos cheios. Um controlador
de micropassos como o A4988 permite resoluções maiores através
alocações em passos intermediários, o que é alcançado energizando as
bobinas com níveis intermediários de corrente. Por exemplo, controlando
um motor em modo de um quarto de passo fará com que um motor de 200
passos por revolução tenha 800 micropassos por revolução utilizando 4
níveis deiferentes de corrente..
Os seletores de entrada de
resolução (tamanho do passo) MS1,MS2 e MS3 permitem selecionar entre os
cinco niveis possíveis de acordo com a tabela abaixo. MS1 e MS3 têm
resistências de rebaixamento de 100kΩ e o MS2 de 50kΩ. Desse modo,
deixando estes pinos desconectados habiltará o funcionamento em modo de
passo cheio. Para que os modos de micropasso funcionem corretamente o
limite de corrente deve ser rebaixado de modo que os limitadores de
corrente sejam habilitados. Caso contrário níveis intermediários de
corrente não serão mantidos corretamente e motor funcionará efetivamente
em modo de passo cheio.
MS1
MS2
MS3
Resolução de micropasso
Low
Low
Low
passo cheio
High
Low
Low
meio passo
Low
High
Low
um quarto de passo
High
High
Low
um oitavo de passo
High
High
High
um dezesseisavos de passo
Entradas de controle
Cada
pulso na entrada STEP corresponde a um micropasso do motor na direção
selecionada pelo pino DIR. Note que os pinos STEP e DIR não são
direcionados internamente para nenhuma voltagem e você não deve deixar
que flutuem em sua aplicação. Se você deseja apenas um sentido de
rotação você pode conectar DIR a VCC ou a GND diretamente. O chip tem
três diferentes entradas de controle para seus principais estados de
alimentação: RST, SLP, e EN. Para detalhes sobre estes status veja o datasheet. Note que o pino RST é flutuante, caso não necessite utilizá-lo você pode conactá-lo ao pino adjacente SLP no PCB.
Limitação de corrente
Para
alcançar velocidades de passos mais altas a alimentação do motor é
tipicamente muito mais alta do que o que seria permitido sem limitação
ativa de corrente. Por exemplo, um motor de passo típico poderia estar
classificado para correntes de 1A com uma resistência de bobina de 5Ω, o
que indicaria uma alimentação máxima de 5V. Utilizar um motor destes
com 12V permitiria maiores velocidades de passo, mas a corrente deve ser
ativamente limitada para menos de 1A para prevenir danos.
O A4988
suporta esta esta limitação de corrente, e o potenciômetro de ajuste na
placa pode ser utiizado para determinar o limite de corrente. Um dos
modos de ajustar este limite de corrente é colocar o controlador a toda
velocidade em modo de passo cheio e medir a corrente através de uma das
bobinas sem ajustar a entrada de STEP. Como as duas bobinas estão sempre
limitadas em 70% em modo de passo cheio, a corrente medida será 0,7
vezes o limite de corrente deste motor. Note que o limite de corrente
depende da voltagem em VDD.
Outro modo de ajustar o limite é medir
a voltagem no pino "ref" e calcular o limite de corrente resultante (os
resistores de senso de corrente são de 0,05Ω). A voltagem no pino ref
pode ser acessada em uma via marcada com um círculo na parte posterior
do circuíto.
Considerações sobre dissipação de potência
O
CI A4988 tem uma taxa máxima de corrente de 2A por bobina, mas a
corrente real que você pode fornecer ao motor depende da capacidade de
manter o chip refrigerado. A placa do circuíto impresso foi desenvolvida
para drenar calor do chip mas para fornecer mais do que 1A por bobina
um dissipador de calor ou outro método de refrigeração é necessário.
Este
produto pode se aquecer o suficiente para produzir queimaduras antes
que o chip se superaqueça. Tome cuidado quando estiver manusenado este
item e outros componentes ligados a ele.
Note que medir a corrente
drenada na alimentação não necessariamente fornece uma medida da
corrente na bobina. Como a voltagem de entrada do controlador pode ser
significativamente mais elevada (o controlador e a bobina atuam como um
rebaixador da alimentação). Além disso, se a voltagem de alimentação for
muito alta comparada àquela necessária para o motor o duty cycle será
muito lento, o que também acarreta em diferenças significativas entre as
correntes médias e RMS.
Esquema
Controle de motor DC com N555 ou L555
Esse circuito é um simples controlador de motor DC usando um circuito integrado NE555.
Esse controle de velocidade de motor DC utiliza um temporizador 555 que
controlar a aceleração do motor e uma chave muda seu sentido de
rotação. Um circuito eletrônico PWM com base no temporizador NE555 é o coração deste projeto de fácil construção e baixo custo.
Controle de Motor DC com PWM – Via
O 555 é ligado como um multivibrador astável, cujo ciclo de trabalho
pode ser ajustado através da variação de R1 que é um Potenciômetro ou
trimpot. A saída de IC1 (555) é acoplado à base do transístor Q1 (BD139) , que aciona o motor de acordo com o sinal de PWM disponível na sua base.
Controle de Motor DC com PWM
A mudança de direção do motor DC é feita usando a chave S1 DPDT que na aplicação apenas alterna a polaridade
aplicada ao motor e com isso fazendo a inversão de sentido da rotação.
Esse método de inversão de rotação pode não funcionar em alguns motores.
A alimentação é feita em 12Volts DC, Vm é a fonte de alimentação
separada para o motor e seu valor depende da tensão nominal do motor. O
VCEO máximo do BD139 é de 80Volts e assim Vm não deve ser superior a 80
Volts. Já o coletor do BD139 pode trabalhar com correntes de até 1.5
Ampere, com isso você não deve usar um motor que consuma mais de 1,5
amperes de corrente.
Para valores superiores de tensão e corrente você deve usar outro
transistor, mas todo cuidado deve ser tomado, pois um transistor em
curto pode causar danos em todo o circuito. Um dissipador de calor é
necessário para o BD139, quanto mais corrente no motor, mais dissipação
ele necessita.
//Projeto 11 - Print dos dados sensor DHT11 no LCD
//Este código é de domínio público
#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
#include <dht.h>
#define dht_dpin A1 //Pino DATA do Sensor ligado na porta Analogica A1
dht DHT; //Inicializa o sensor
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCD
void setup(){
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("Umidade");
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print("Temperatura");
}
void loop(){
DHT.read11(dht_dpin); //Lê as informações do sensor
lcd.setCursor(12, 0); //Posiciona o cursor na décima quarta coluna(13) e na primeira linha(1) do LCD
lcd.print(DHT.humidity); //Escreve o valor atual da variável de contagem no LCD
lcd.setCursor(12, 1); //Posiciona o cursor na décima quarta coluna(13) e na segunda linha(1) do LCD
lcd.print(DHT.temperature); //Escreve o valor atual da variável de contagem no LCD
delay(2000);
}
//Projeto 13 - Sensor ultrasônico e LCD
//Este código é de domínio público
#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
#include "Ultrasonic.h"
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCD
int trig = 9;
int echo = 8;
Ultrasonic ultrasonic(trig,echo);
void setup() {
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("Distancia");
lcd.setCursor(14,0);
lcd.print("CM");
}
void loop(){
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("Distancia");
lcd.setCursor(14,0);
lcd.print("CM");
lcd.setCursor(10, 0); //Posiciona o cursor na décima primeira coluna(13) e na primeira linha(0) do LCD
lcd.print(ultrasonic.Ranging(CM));
delay(1000);
lcd.clear();
}
//Projeto 17 - LED IR captando sinal
//Este código é de domínio público
#include <IRremote.h>
int RECV_PIN = 2; //Declarando o pino 2 como RECV_PIN
IRrecv irrecv(RECV_PIN); //
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn(); // Inicializa o receptor
}
void loop() {
if (irrecv.decode(&results)) { //Se algum valor for lido, será imprimido
Serial.println(results.value, BIN); //Pode trocar BIN para DEC, HEX...
irrecv.resume(); //Limpa da memória o valor lido
}
}
//Projeto 16 - Servo motor com Potenciômetro
//Este código é de domínio público
#include <Servo.h>
Servo servo1; //Cria o objeto Servo
void setup(){
servo1.attach(5); //Envia pelo pino 5 os valores dos ângulos
}
void loop(){
int angulo = analogRead(0); //lê o valor do potenciômetro
angle=map(angle, 0, 1023, 0, 180); //mapeia os valores lidos, convertendo entre 0 e 180 graus
servo1.write(angle); // envia o ângulos para o servo
delay(15);
}