top of page

Projeto - Fazendo um medidor de Rpm

  • Foto do escritor: automatelabonline
    automatelabonline
  • 3 de abr.
  • 4 min de leitura

Os microcontroladores são compatíveis com diversos tipos de sensores. De modo geral, a leitura desses sensores é fácil de ser implementada, sendo necessário apenas ler alguma porta analógica ou utilizar algum protocolo de comunicação para coletar os dados. Porém, sensores de rotação geralmente não tem uma implementação tão automática. Esse post irá explorar o desenvolvimento de um projeto que faz a leitura de um medidor de Rpm.


Explicando o Problema

A maioria dos sensores utilizados para medir rotação envia sinais de pulso quando o eixo completa uma volta. De modo geral, utiliza-se algo para sinalizar ao sensor que a volta foi completada, podendo ser uma fita refletiva ou um ressalto no eixo. Os sensores utilizados para Rpm geralmente são dos seguintes tipos:

  • Refletivo: Envia um sinal de luz e capta o retorno desse sinal. É colocada uma fita refletiva no eixo que rotaciona, fazendo com que o sinal luminoso retorne apenas em uma posição específica.

  • Capacitivo: Capta a capacitância dos objetos próximos. Atua como um sensor de proximidade. Quando há algo perto da frente do sensor, envia tensão positiva, quando não tem, envia tensão nula. É feito um ressalto no eixo para se aproximar do sensor quando completar a rotação.

  • Indutivo: Capta a indutância dos objetos próximos. Tem o funcionamento parecido com o sensor capacitivo, porém funciona apenas para metais.

A imagem abaixo exemplifica o comportamento de sensores indutivos/capacitivos. O sinal (S) geralmente apresenta nível lógico baixo. Quando o relevo passa pelo sensor, o nível lógico de S passa para alto, e logo depois retorna para baixo. Ou seja, é gerado um pulso de nível lógico alto no sinal do sensor.

sensor RPM

Sensores NPN e PNP

É importante ressaltar a diferença entre os sensores do tipo PNP e NPN.

Sensores PNP estão num estado de alta impedância. Quando algum objeto se aproxima do sensor (ou a luz é refletida, no caso do refletivo), esse sinal passa para nível lógico alto (24V). Ou seja, quando não há objetos próximos, o sensor não vai para nível lógico baixo, e sim fica num estado de alta impedância. Esse estado significa basicamente que há uma alta resistência entre o sinal e o 24V. Portanto, para que o sinal realmente vá para GND, é preciso construir o sistema para que o sinal seja forçado. Um exemplo é o caso abaixo.

circuito sensor RPM

Ao adicionar um resistor entre o sinal e o GND, o sinal é forçado para nível lógico baixo quando não houver nenhum objeto detectado pelo sensor, e ainda continuará com 24V quando o sensor detectar algo.

O caso do sensor NPN é parecido. Porém, ao detectar algum objeto, ele gera um pulso em GND. Ou seja, é necessário forçar o sinal a estar em 24V no resto do tempo. Para isso, o seguinte circuito pode ser utilizando:

circuito sensor RPM

O valor do resistor pode ser alto, uma vez que a corrente que passa por ele deve ser a mínima possível. Assim, o consumo de potência é diminuído.


Passando de 24V para 3,3V

A maioria dos sensores utilizados é 24V. Porém, essa tensão não é compatível com a maioria dos microcontroladores. Para corrigir isso, é necessário fazer um circuito que transformará os pulsos 24V/GND em pulsos 3,3V/GND ou 5V/GND. Será mostrado para o caso de 3.3V, porém os circuitos também funcionam para 5V. Os seguintes circuitos são utilizados para isso:

lendo sensor RPM 24V com microcontrolador
lendo sensor RPM 24V com microcontrolador

S_24 representa o sinal vindo diretamente do sensor. Já S_3V3 é o sinal que será direcionado para

Ambos os circuito utilizam um optoacoplador PC817, esse componente é responsável por "transformar" o sinal de 24V para 3,3V. Ao existir uma corrente passando entre os terminais da esquerda, os terminais da direita vão entrar em curto, fazendo o sinal S_3V3 ir para 3,3V. Assim que a corrente da esquerda para, os terminais da direita são abertos, interrompendo a corrente desse lado também e fazendo S_3V3 ir para GND. Com esse esquema de ligação, não é necessário colocar o resistor mostrado nas imagens da sessão anterior.

Quanto às resistências, o valor de R2 deve ser alto, pois quanto maior sua resistência, menor será o consumo de corrente. Já para R1 recomenda-se um valor mais alto também, porém com cautela. Aumentar demais o valor de R1 acaba tornando o sistema mais lento, e faz com que o circuito não leia corretamente frequências muito altas. Recomendamos testar com 10kΩ para começar. O componente PC817 suporta até aproximadamente 80kHz.


Código para o medidor de Rpm

#define PIN 2

unsigned long lastTime;
int rpm;

void rpmInterruption() {
	unsigned long currentTime = micros();
	rpm = 60000000 / (currentTime-lastTime);
	lastTime = currentTime;
}

void setup() {
	Serial.begin(9600);
	attachInterrupt(digitalPinToInterrupt(PIN), rpmInterruption, RISING);
	lastTime = micros();
}

void loop() {
	Serial.println("rpm = " + String(rpm));
	delay(10000);
}

O código acima calcula o rpm a partir da diferença de tempo entre dois pulsos. Para isso, foi criada uma interrupção em um pino. Nesse pino, deve ser colocado o sinal S_3V3 mostrado nos circuito acima.

Sempre que um giro do objeto de medição acontece, um pulso é enviado para esse pino, que chama a função rpmInterruption(). Nessa função, o rpm é calculado utilizando a seguinte fórmula:

onde Tcur representa o tempo atual e Tant o tempo do ultimo pulso, ambos em microssegundos. Portanto, Tcur - Tant representa o intervalo de tempo entre os dois últimos pulsos. o número acima da fração é o número de microssegundos em um minuto (60 milhões). Ele é utilizado para transformar para rotações por minuto. Caso for desejado em Hz, pode-se substituir esse valor por 1000000 (1 milhão).

A função loop() escreve o valor de rpm na Serial a cada 10 segundos.

Comentários


bottom of page