Quando trabalhamos com motores de passo, muitas vezes precisamos aferir a que frequência (pulsos / segundo) os motores de passo se movimentam, e se os pulsos que enviamos são, de fato, executados corretamente. Pensando nisso, criamos o contador de pulsos com Arduino, ele consegue nos dar a velocidade aproximada que o motor está se movimentando e quantos pulsos ele executou no movimento.
Ideias para projetos que utilizem motores de passos como os Nema 17, Nema 23; os drivers TB6600, DRV8825 entre outros.
HARDWARE
2 - Arduinos: Uno, Mini ou Nano; (um utilizado para medir e o outro gerar os pulsos);
x - Fios de jumpers;
PASSOS:
1. Carregar o Arduino (gerador de frequência)
2. Carregar o Arduino (contador de pulso)
3. Entendendo o código;
4. Montar o hardware;
5. Vídeo testando;
6. Encerramento;
PASSO 1: CARREGAR O ARDUINO GERADOR DE FREQUÊNCIA
Utilizando um dos arduinos, vamos carregar o código que vai gerar a frequência conforme enviamos no monitor serial, baseado na biblioteca nativa do Arduino “Tone” com ela podemos gerar frequências precisas e aferir no nosso medidor.
Carregue o código abaixo no primeiro Arduino:
long freq = 0;
void setup() {
Serial.begin(9600);
Serial.println("Gerador de frequencia");
pinMode(13, OUTPUT);
digitalWrite(3, LOW);
}
void loop() {
if (Serial.available() > 0)
{
freq = Serial.parseInt();
Serial.print(freq);
Serial.println(" Hz");
}
if (freq > 0)tone(13, freq);
else noTone(13);
}
Este código é bem simples, uma vez que você envia um valor diferente de 0 (Zero), o Tone gera essa frequência no GPIO 13 do Arduino.
PASSO 2: CARREGAR O ARDUINO FREQUENCÍMETRO (CONTADOR DE PULSOS)
Com o segundo Arduino em mãos, carregue o código abaixo:
Inserir também, a biblioteca ao lado: BIBLIOTECA TEMPORIZADOR SEM DELAY
#include <Crescer.h>
Tempora temp1;
Tempora temp2;
int pulsos = 0;
unsigned long ContPulso;
long T0 = 0;
byte Hab_Zeramento = 0;
void setup() {
Serial.begin (9600);
Serial.println("Frequencimetro");
pinMode (2, INPUT_PULLUP);
attachInterrupt(0, Conta, RISING);
temp1.defiSP (1000);
temp2.defiSP (1000);
}
void Conta()
{
pulsos++;
ContPulso++;
}
void Imprime()
{
Serial.print (pulsos);
Serial.print (" Hz : ");
Serial.println (ContPulso);
}
void loop() {
if (temp1.Saida(1) and pulsos > 0)
{
Imprime();
pulsos = 0;
temp1.Saida(0);
temp2.Saida(0);
Hab_Zeramento = 1;
}
if (Hab_Zeramento and temp2.Saida(1) and pulsos <= 0)
{
Imprime();
ContPulso = 0;
temp2.Saida(0);
Hab_Zeramento = 0;
}
}
PASSO 3: ENTENDENDO O SOFTWARE
No primeiro momento do código temos a declaração de variáveis e o setup:
Foi utilizada a biblioteca de temporizador sem delay para criar a base de tempo de 1 segundo, já que frequência é a quantidade de acontecimentos no período de 1 segundo. Uma vez declarada as variáveis que serão utilizadas, no “void Setup” temos um “print” para mostrar que o Arduino foi carregado com sucesso, a declaração dos pinos, e utilizamos uma interrupção do Arduino para acumular os pulsos gerados. Cada vez que for detectado a mudança de nível lógico de 0V para 5V ele vai contabilizar 1 pulso, utilizado a técnica “RISING”. Declarado o SP (set-point) para cada temporizador em 1000 mS (1 seg) para cada.
Na sequência do código, temos a função que é executada a cada pulso, ela acumula os pulsos detectados em dois contadores. A função “void Imprime” é invocada para mostrar no monitor serial as variáveis no decorrer do “Void loop”
No “void loop” se encontra a lógica de tratamento dos pulsos acumulados, a cada 1 segundo passado no timer 1 os pulsos contabilizados neste intervalo são impressos no monitor serial, junto com o acumulado, o código zera os pulsos da variável “pulsos” para que sejam acumulados novamente no decorrer de 1 segundo.
Uma vez que não é detectado mais pulsos, após 1 segundo o código executa a impressão final com o acumulado de pulsos lidos e zera as variáveis esperando o próximo ciclo de pulsos. Com estes simples códigos podemos aferir a quantidade de pulsos que o driver recebeu, e a que velocidade esses pulsos foram enviados.
PASSO 4: MONTANDO O HARDWARE
Conectaremos ambos os arduinos ao computador e abriremos 2 instancias da IDE do Arduino, uma para cada código e porta serial, assim conseguiremos monitorar e gerar os pulsos conforme imagem abaixo.
Conforme o valor que enviarmos no monitor serial do gerador de frequência ele será impresso no monitor do contador de pulsos, junto com a quantidade de pulsos acumulada.
PASSO 5: VÍDEO DO FUNCIONAMENTO
PASSO 6: ENCERRAMENTO
Com um Arduino podemos ter a certeza do valor de frequência que estamos mandando para o driver do motor e a quantidade de pulsos para testar nosso código. Espero ter ajudado com mais essa ideia de ferramenta que o Arduino nos possibilita.
E aí, já utilizou motores de passos nos seus projetos? Já conhece o DRV8825, TB6600, Nema 17, Nema 23?
Comments