Pessoal estou tendo dificuldades em ajustar minha rotina que calcula o RPM do motor. Os valores ficam errados, mas a fórmula está correta, o motor está em 850RPM aproximadamente mas os valores que são exibidos ficam errados e oscilando aleatoriamente por ex.: 2568,1487,4879,2589,7852,15975... Alguém pode me dar uma luz?

O código anexo.

Exibições: 555

Anexos

Responder esta

Respostas a este tópico

Olá José!

Suas dicas me ajudaram muito! O filtro realmente normalizou os valores. No entanto, os valores não batem com o conta-giros do carro. O novo código está em anexo. Eu fiz um cálculo "gambiarra" rsrs para tentar chegar ao valor correto, então fiz o seguinte:

void loop()
{
  if ((millis() - tempoInicial) >= 100)
  {
    ...
    rpm = (((float)pulsos / ((float)numeroCil / (float)2)) / ((float)millis() - (float)tempoInicial))*(float)1150;
    smoothedValue = (alpha * smoothedValue) + ((1 - alpha) * rpm);   
    Serial.println(smoothedValue,0);
    pulsos = 0;
    tempoInicial = millis();
   ...
  }
}

ficou bem próximo do painel porém ficou lenta a atualização e quanto mais o RPM sobe mais aumenta o erro, por exemplo: em 1500RPM o arduino mostrava 1380RPM, em 2700RPM o arduino mostrava 2500. E em pisadas bruscas onde o RPM sobe rápido os valores não acompanhavam o painel.

Tentei mexer nessa condição "if ((millis() - tempoInicial) >= 100)" mas não houve melhorias. O que eu não entendo é que: para um intervalo de 100ms, se multiplicar o cálculo do RPM por 600 era para mostrar valores corretos...pois corresponderia a 1 minuto(60000ms).

Anexos

O filtro demanda tempo para processar. E os valores vão se estabilizando gradativamente. 

Essas são as limitações do filtro.

Pode tentar diminuir a quantidade de amostras (<100) para diminuir o tempo de processamento. 

Evite se puder de fazer cálculos. Veja se é possível usar constantes.

Outra informação importante ! Todos os timers do Arduino dependem do clock do Processador.

E os cristais usados na geração do clock não tem tanta precisão.

Por isso precisará fazer ajustes de tempo. 

Veja nesse exemplo: 

Eu montei um Array com várias medidas. 

Depois usando os dados do Array, calculei o valor filtrado. 

Depois calculei a medida que eu precisava ( no seu caso RPM) 

http://labdegaragem.com/forum/topics/melhor-maneira-de-medir-produc...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço