Contador de RPM con microcontrolador 8051

Estoy construyendo una unidad de medición de RPM usando un microcontrolador 8051. Quiero medir las RPM del motor de CA. He conectado un sensor de proximidad para obtener el pulso de cada giro.

He conectado la salida del sensor de proximidad al contador del microcontrolador. Y estoy calculando el retraso de 1 segundo usando el temporizador.

Por cada segundo, calculo RPM = recuento de pulsos [valor de contador] * 60.

Ej: Si el conteo de pulsos = 16, obtengo RPM = 960 r/m Si el conteo de pulsos = 17, RPM = 1020 r/m.

Aquí obtengo una diferencia de 60 r/m.

Usando el método anterior, no puedo medir RPM de 1000 r/m. Dado que el recuento de pulsos * 60 no será 1000 en ningún momento dado.

Por favor, avísenme cómo puedo medir las RPM con precisión.

Gracias Umesh

Respuestas (3)

tendrias que medir

  • ya sea la duración entre el último pulso y el final de su período de medición de 1 segundo (y calcule eso en su fórmula como una fracción de pulso)
  • o (preferiblemente) la duración entre dos pulsos (desechando el período de 1 segundo y usando el inverso de la duración del pulso para calcular la frecuencia del pulso).

Para implementar esto, solo necesita invertir su principio de medición actual: en lugar de contar pulsos por segundo, contaría milisegundos o microsegundos 1 por pulso.

1: o cualquier fracción de segundo que pueda obtener fácilmente de un temporizador


Además, es posible que desee calcular un promedio de ventana deslizante de sus mediciones para reducir su fluctuación.

¿Cómo puedo medir la duración entre el último pulso y el final del período de 1 segundo?
@ user2507991 Ya sea de la manera que escribí anteriormente, o almacenando el valor de su temporizador de 1 segundo (para lo cual probablemente esté usando un contador que incrementa hasta un cierto valor n a una frecuencia de n Hz ) en cada pulso y usando el último valor almacenado cuando ha pasado el segundo.
Por supuesto, medir el tiempo entre cada tic es la mejor solución. Para obtener más ayuda, lea esto primero tinyurl.com/mpqjy6v

Podría usar múltiples sensores de proximidad para obtener varios pulsos por revolución. Si está utilizando una sonda inductiva, podría usar varias piezas pequeñas de hierro que sobresalen en la parte giratoria que también generan varios pulsos por revolución.

Otra forma es usar una pequeña caja de cambios para aumentar las revoluciones vistas por el sensor.

Todos estos son métodos que no son de software, pero consideraría una respuesta que usara métodos de software primero porque solo le cuesta su tiempo desarrollarlos. Estaría pensando en usar un reloj/contador de alta velocidad y contar estos relojes entre pulsos consecutivos recibidos del sensor.

Creo que medir el tiempo entre pulsos y promediar es probablemente una buena solución. Pero si desea continuar contando pulsos por segundo, solo necesita promediar la medición durante varios segundos. Por ejemplo, a 1000 RPM, si mide conteos por segundo durante tres segundos consecutivos, puede obtener 17, 16 y 17 conteos, lo que promedia 1000 RPM.