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.
Tags:
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).
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...
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por