Estoy tratando de controlar un servomotor ( enlace ). Es un motor de CC sin escobillas con una interfaz similar a un motor paso a paso.
El motor gira una distancia definida en función del número de pulsos que recibe del PWM
. La velocidad está determinada por la frecuencia de pulso del PWM
, como un motor paso a paso.
Para controlar este motor estoy usando un microcontrolador STM32F407ZET6
. Puedo cambiar fácilmente la frecuencia y el ciclo de trabajo de PWM, pero mi pregunta es la siguiente:
¿Cómo genero un número fijo de pulsos en el PWM? Por ejemplo, quiero que el PWM envíe 1000 pulsos en un momento determinado con una frecuencia de 20kHz y un Duty Cycle del 50%. 20kHz y 50% Duty Cycle son fáciles de definir, pero no puedo determinar cómo generar los 1000 pulsos fijos.
Una de las soluciones que probé fue volver a conectar el PWM a un temporizador en modo contador y detener el PWM cuando se haya generado la cantidad requerida de pulsos. Pero el número de pulsos no siempre es fijo, a veces oscila entre 998 y 1005 (por ejemplo).
¿Es posible hacer esto sin necesidad de retroalimentación?
Habilite la interrupción de comparación de captura con la configuración del bit CCxIE en el registro TIMx_DIER (llene x con su temporizador y canal cc). esto habilita una interrupción procesada cada vez que se completa un pulso. En su isr puede verificar el registro TIMx_CNT para verificar dos veces.
Habilite pwm, comience a contar sus pulsos en isr, cuando alcance el número deseado de pulso, deshabilite pwm.
Ron Beyer
usuario_1818839
Sólo yo
0___________