Fazendo um Frequencímetro para Motor de Passo com Arduino

Atualizado: Ago 10

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.


Se você viu o blog da Crescer e os materiais estão fazendo sentido, avalie-nos no google para que possamos alcançar cada vez mais pessoas a fazerem seus projetos e produtos! Contamos com você!


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?

Posts recentes

Ver tudo