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);
}
//Projeto 19 - Módulo RF - emissor
//Este código é de domínio público
#include <VirtualWire.h>
void setup(){
Serial.begin(9600); //Ativa Serial
// Initialise the IO and ISR
vw_set_ptt_inverted(true); //
vw_setup(2000); // Taxa de transferência
}
void loop(){
if(Serial.available()>0){
char msg = Serial.read();
vw_send((uint8_t *)&msg, strlen(&msg)); //Envia toda a palavra com STR
vw_wait_tx(); //
delay(200);
}
}
//Projeto 19 - Módulo RF - receptor
//Este código é de domínio público
#include <VirtualWire.h>
void setup(){
Serial.begin(9600); //Ativa o Serial
vw_set_ptt_inverted(true); //
vw_setup(2000); //Taxa de transferência
vw_rx_start(); //Inicializa o receptor
pinMode(2, OUTPUT); //Inicializa a porta p/ LED
}
void loop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)){ //Verifica se recebe informação
if(buf[0]=='L'){
digitalWrite(2, HIGH);
}
if(buf[0]=='D'){
digitalWrite(2, LOW);
}
}
}
Com o que foi descrito nesse post, pode-se construir vários outros projetos utilizando a mesma base. Algumas ideias a seguir:
- Controlar um carrinho;
- Ligando uma lâmpada;
- Transmitindo texto para outro arduino, e ele printando no LCD;
- Transmitindo dados como: temperatura, umidade, luminosidade, distancia e etc.
Insira valores entre 0 e 180 utilizando 3 caracteres por exemplo:
Para
0, digite 000
Para
60, digite 060
Para 180, digite 180
Deve
ser feito como foi informado a cima pelo motivo de que é passado
strings pelo terminal e não números, dessa forma o programa irá
converter a string e se não for passado como descrito ocorre erro.
Apesar de estar parecido, houve algumas modificações e terá uma versão nova em breve.
//Projeto 21 - Servo motor lendo valores do terminal
//Este código é de domínio público
#include <Servo.h>
Servo servo1; // Cria uma variavel do tipo Servo que será
char buffer[4]; // Array de char que irá converter para int
int received; //Usada para identificar o tamanho str
void setup(){
Serial.begin(9600);
servo1.attach(8); // Atribui o servo ao pino 8 do Arduino
received = 0;
buffer[received] = '\0'; //A posição 0 do array recebe '\0'
}
void loop(){
if(Serial.available()){ //Verifica se algo foi digitado
buffer[received++] = Serial.read(); //Salva os dados digitados
if(received >= (sizeof(buffer)-1)){
int numero = atoi(buffer);// Converte o valor de "char" para "int"
servo1.write(numero); // Envia o comando para o Servo Motor
received = 0;
}
Serial.flush(); // Limpa o buffer da entrada serial
}
}
sexta-feira, 19 de Maio de 2017
Componentes necessários:
- Protobord
- LED de 5 mm
- Resitor de 100 ohms*
Codig Pro Arduino.
*Verificar o resistor para o led, pois o valor pode ser diferente.
//Projeto 22 - Ligando LED pelo terminal
//Este código é de domínio público
int ledPin = 8;
char buffer; //Para salvar o que é digitado
void setup(){
Serial.begin(9600); //Comunicação via USB
pinMode(ledPin, OUTPUT);
Serial.println("Deseja Ligar o LED(s/n)");
}
void loop(){
if(Serial.available()){ //Verifica se tem algo digitado, senão não entra no if
buffer = Serial.read();
if(buffer == 's'){
digitalWrite(ledPin, HIGH); // Liga o LED
delay(1000);
Serial.println("Deseja manter o LED ligado(s/n)");
}
else{
if(buffer == 'n'){
digitalWrite(ledPin, LOW); // Desliga o LED
delay(1000);
Serial.println("Deseja Ligar o LED(s/n)");
}
}
}
}
Foi utilizado no teste o referente a figura a cima.
codig pro Arduino
//Projeto 24 - Controlando motor de passo com SHIELD
//Este código é de domínio público
#include <Stepper.h>
Stepper myStepper(300, 2, 4, 3, 5);
//Os 4 últimos número refetem-se aos pinos conectados ao arduino
//Fio vermelho é 5v, os outros devem ser conectados no arduino(seguindo a ordem deles, relacionando nas portas)
void setup(){
}
void loop(){
// Ajusta a velocidade, este valor pode ser mudado
myStepper.setSpeed(60); // Número de passos, sentido horário
myStepper.step(1500); //Se colocar negativo gira no sentido anti-horário
}
quinta-feira, 27 de abril de 2017
Aprenda como construir Uma CNC Caseiras com Professor Marlo Nardi..