¿Qué método de medición de RPM es adecuado?

Tengo un motor PMDC cuya velocidad se controla electrónicamente. Y es un sistema de circuito cerrado. Hay un sensor de proximidad para medir la velocidad del motor y hay 12 pernos unidos al eje del motor para que cuando gire, el sensor de proximidad produzca 12 pulsos por revolución. He escrito un código para medir las rpm en el que cuento las pulsaciones en un segundo y así calculo la velocidad. Pero el problema es que solo pude obtener una resolución de 5 rpm. ¿Hay alguna forma de obtener una resolución más alta como 1 rpm en este sistema sin cambiar la tecnología de retroalimentación?

¿Está abierto a agregar sensores externos adicionales? ¿La resolución a la que se refiere es la de la medición de RPM o el cambio de velocidad como resultado de la medición de RPM? Supongo que por "sistema de circuito cerrado" implica que la velocidad actual del motor se actualiza automáticamente mediante las mediciones del sensor de RPM. ¿Cuál es el rango de velocidad del motor? ¿Cuál es la frecuencia de muestreo del sensor?
La resolución a la que me refiero es de medición de RPM. Podría agregar un sensor adicional si no tengo otra opción sin tocar el hardware. Sí, mencioné que estoy revisando el pulso cada segundo.
El rango de velocidad del motor es de 500 RPM a carga completa
Usted dice que "cuenta los pulsos en un segundo", pero no menciona cuántas veces por segundo verifica este pulso ... Si es solo una vez por segundo, no obtendría ningún resultado ya que el motor gira 8,33 veces por segundo, produciendo 100 pulsos por segundo. Supongo que una mejor pregunta es ¿cómo está comprobando este pulso en el código? ¿Es un estado HI/LO? ¿Es un disparador de borde ISR? Además, ¿sabe si hay algún "rebote" asociado con este sensor cuando cambia de estado? Eso también afectaría los resultados.
No está claro: ¿está 1) tratando de vincularse al generador de pulso existente para medir las RPM usted mismo (y por lo tanto no cambiar el controlador, solo use algunas de sus señales) 2) aumentar la resolución del sistema de detección existente pero luego alimentar el existente controlador, la señal es necesaria o 3) instalar un sistema de medición de RPM por separado o 4) ¿algo más?
@raforanz Un parámetro extremadamente importante que debe especificar es el RPM mínimo que debe medir. ¿Qué es?
@Joe Hass 20 RPM

Respuestas (4)

A 500 rpm el eje gira 8,3333 veces por segundo por lo tanto en 1 segundo se cuenta: -

12 x 8,33333 pulsos = 100 pulsos

A 505 rpm el eje gira 8,416667 veces por segundo por lo tanto en 1 segundo se cuenta: -

12 x 8,41667 pulsos = 101 pulsos

Desea una mayor resolución para poder agregar más pernos PERO para obtener una resolución de 1 rpm necesitará 5 x 12 pernos y eso suena poco práctico.

Puede hacer un conteo continuo durante 5 segundos y cada segundo descartar el conteo de 1 segundo más antiguo e introducir el conteo más nuevo, pero aún tendrá un mecanismo lento para medir las rpm: los cambios en la velocidad no se verán tan dinámicamente como usted podria querer.

Alternativamente, usa un reloj de alta frecuencia y mide el número de conteos entre pulsos. Puede promediar 12 resultados (una revolución completa) para reducir los errores de posición de los pernos.

¿Qué tan rápido puedes cronometrar y contar?

Respuesta : tiene un reloj con un período de 256 segundos, lo que significa que alterna 3906 veces en un segundo. Si cuenta estos cambios de reloj por cada 12 pulsos en el sensor de proximidad (también conocido como una revolución del eje), a 500 rpm contará durante 0,12 segundos y acumulará un total de 469 ciclos de reloj. Si acumulaste 468 ciclos de reloj, esto sería el equivalente a 501 rpm.

Por supuesto, tiene la opción de contar dos o más revoluciones para dar una mayor resolución a velocidades más altas. A velocidades significativamente más bajas, es posible que desee volver a contar los pulsos de proximidad por segundo O los recuentos de reloj para una rotación fraccionaria del eje.

Puedo marcar con un período de 256us
@ Andy, también conocido como el último punto en su respuesta (que está contando el reloj entre pulsos) es similar al periférico de captura incorporado de un microcontrolador, ¿verdad?
Configuraría un reloj y un contador internos para que se ejecuten automáticamente y luego configuraría el pulso de entrada para activar una interrupción que invoca una rutina que verifica que hayan pasado 12 pulsos y luego registra el conteo del reloj. Luego restablecería los contadores de pulso y reloj a cero para que comenzara de nuevo. No tengo otra forma de describirlo porque no es mi área de habilidad.

El enfoque más preciso para las velocidades en el rango que está viendo es hacer que cada pulso entrante incremente un contador y bloquee el valor de un temporizador. Muestree periódicamente los valores del contador y del temporizador bloqueado, asegurándose de que los valores muestreados "van juntos". Por ejemplo, si tiene un contador de captura de pulsos de hardware y un circuito de captura de pulsos conectado a la misma entrada, puede leer el contador, luego el valor del temporizador capturado y luego leer el contador nuevamente. Si las dos lecturas de contador arrojan valores diferentes, repita el proceso. El tiempo para volver a intentar el proceso es menor que el tiempo mínimo entre pulsos de entrada, luego, en el segundo intento, ambos valores del temporizador deben coincidir.

Una vez que haya hecho esto, luego en el intervalo de actualización deseado, calcule su velocidad en pulsos por minuto como:

Velocidad = (NewCount-EarlierCount) * TimerCountsPerMinute / (NewTimer-EarlierTimer)

Excepto cuando NewCount es igual a EarlierCount, este enfoque generará un valor cuya precisión es de +/- un tic del temporizador. Para decirlo de otra manera, si la velocidad de entrada es constante y el temporizador es preciso, la lectura correcta estará en algún lugar entre

Velocidad = (NewCount-EarlierCount) * TimerCountsPerMinute / (NewTimer-EarlierTimer-1)

y

Velocidad = (NewCount-EarlierCount) * TimerCountsPerMinute / (NewTimer-EarlierTimer+1)

Usando este enfoque, si tiene una base de tiempo de 1 MHz, siempre que sus pulsos de entrada lleguen a 10 Hz o más rápido, podría actualizar su pantalla diez veces por segundo y mostrar un valor que fuera preciso con la precisión de un cristal típico. Dependiendo de lo que esté haciendo, es posible que desee suprimir las actualizaciones, excepto cuando la diferencia total entre las lecturas mostradas y las reales alcanza, por ejemplo, tres unidades en la pantalla (de modo que cuando los valores cambian rápidamente, los números de la pantalla cambian rápidamente, pero si un valor está alternando entre 123,4 y 123,5, la pantalla pasaría suficiente tiempo mostrando cada valor para que una persona pudiera verlo).

Mida el tiempo entre los flancos de subida o bajada del pulso. Obtiene un tiempo estimado de cuánto tiempo se tarda en hacer 1/12 de revolución con cada pulso.

Si la velocidad mínima es de 20 RPM, obtendrá una revolución cada tres segundos y solo cuatro pulsos por segundo. No puede obtener una resolución (mucho menos precisión) de 1 RPM simplemente contando pulsos por segundo. Para obtener la resolución que desea a una frecuencia de pulso muy baja, necesitará determinar el período entre los pulsos y luego calcular las RPM a partir de eso. Para determinar el período, use los pulsos para iniciar/detener un contador. El contador debe sincronizarse lo suficientemente rápido como para que aún pueda obtener al menos 500 conteos cuando los pulsos llegan a 100 Hz (500 RPM), por lo que necesita que el contador funcione a 50 kHz o más.