Configuración del temporizador STM32 como contador de frecuencia

Estoy tratando de configurar una de las entradas del temporizador en un STM32 para que se comporte como un contador de frecuencia para una señal externa. La hoja de datos de STM32 describe un "modo de captura de entrada" en la sección 17.3.6 (página 342)

Mi entendimiento de este modo es que cada vez que entra una entrada en la entrada TIMx_CHx seleccionada, el procesador captura el valor de un contador interno de ejecución libre. Entonces, la frecuencia se puede calcular utilizando el valor del contador y la frecuencia del contador interno.

Estoy tratando de habilitar esto en CubeMX y tengo dificultades para correlacionar la explicación de la hoja de datos con la configuración en CubeMX. Esto es lo que tengo configurado actualmente. ¿Es esto correcto?

Además, ¿puedo ejecutar múltiples entradas independientes en canales separados en el mismo temporizador para capturar el tiempo simultáneamente?

ingrese la descripción de la imagen aquí

Ha encontrado la descripción detallada de qué hacer, qué valor corresponde a qué bit de registro. Incluso hay ejemplos de código allí. ¿Por qué estás luchando con CubeMX entonces?

Respuestas (1)

Los contadores de frecuencia pueden complicarse rápidamente según el ancho de banda que desee y la velocidad del reloj interno, así como el tamaño de los registros que contienen los tictacs del reloj y los tictacs de entrada.

Quiero decir, parece que funcionará, pero debe asegurarse de que (1) el contador del reloj y el contador de frecuencia se actualicen al final de la muestra (2) que ninguno se desborde durante la muestra (3) que la configuración darle la resolución que desea y (4) que la MCU hará ajustes si el ancho de banda es lo suficientemente grande donde se desbordará parte del tiempo y/o caerá muy bajo. El primero de los cuales provocaría resultados incorrectos y el segundo reduciría drásticamente la precisión a Hz bajos.

Gracias por la información. Estoy midiendo las RPM de un motor en los rangos de 1k a 6k Hz
@ user8908459 ¿Cómo estás midiendo las rpm? ¿Sensor de reluctancia?
Sí usando un MAX9926
En ese caso, tenga en cuenta que está leyendo la frecuencia de los dientes pasa en el engranaje, no la frecuencia del engranaje. Deberá dividir por la cantidad de dientes, lo que significa que sus marcas en la captura de entrada serán significativamente más altas que 6k. Si tiene un registro de temporizador de 16 bits, debería estar bien, a menos que haya una gran cantidad de dientes en el engranaje.