2 votos

Contar los pulsos PWM alimentados en el controlador FET del motor paso a paso

Estoy tratando de contar (con precisión) el número de pulsos alimentados a un controlador de motor paso a paso TI DRV8711 . Este driver "convierte" un flanco de subida, dependiendo de la configuración, en un paso completo o un micropaso. El MCU que estoy usando para generar esos pulsos PWM es un Freescale MPC5602D . La frecuencia de los impulsos va a ser inferior a 30kHz por motor paso a paso.

La aplicación para la que estoy utilizando este dispositivo es el control de posición con un motor paso a paso. Esto requiere un conocimiento preciso de los pasos dados (dado que el motor paso a paso no se cala).

¿Cómo se conducen normalmente ese tipo de conductores? ¿Utilizando un pin GPIO normal que se afirma en una rutina de interrupción del temporizador o a través de PWM? Quiero evitar saturar el bucle principal con la afirmación y desafirmación de un pin GPIO. (Tengo que controlar 5+ motores paso a paso simultáneamente)

Contar los pulsos PWM enviados al controlador es trivial con un pin GPIO normal.

Por otro lado, ¿cómo se va a abordar el problema de con precisión ¿contar el número de pulsos PWM? ¿Se hace esto alimentando la salida PWM de vuelta a la MCU y usando un contador para contar los bordes ascendentes? Supongo que tengo que disminuir la frecuencia del PWM antes de alcanzar el número deseado de pulsos para desactivar el PWM antes del último pulso y así garantizar que no se "sobrepase" el punto de ajuste.

1 votos

Si usted están generando el PWM, entonces estás usando algún tipo de periférico temporizador, muy capaz de contar los pulsos que está produciendo, o generar una interrupción cada N pulsos.

0 votos

@EugeneSh. Sólo encuentro una opción para generar una interrupción cada cada vez que se crea un pulso. Contar estas interrupciones en un ISR me parece demasiada sobrecarga de procesamiento para esta tarea. Alimentar manualmente la salida PWM de nuevo a una entrada de contador de pulsos no parece demasiado limpio tampoco. Sólo me pregunto cómo se hace esto normalmente.

0 votos

Normalmente no usaría el módulo PWM en absoluto, porque los steppers no requieren ciclo de trabajo variable. En su lugar podría requerir frecuencia variable (para aceleración/deceleración). Así que un periférico especial o un GPIO regular controlado por software servirá.

3voto

Henrik P. Hessel Puntos 22046

Conozco tres formas de conseguir lo que necesitas (y he utilizado las tres). Has mencionado las dos primeras en tu comentario.

Hacer que un ISR cuente los impulsos de paso es lo más sencillo. El ISR sólo necesita incrementar o decrementar un contador de posición. En los micros de 8 bits que utilizo, tal ISR tomaría menos de un microsegundo (aunque codifico en lenguaje ensamblador, no en C, en ese MCU). No debería suponer mucha sobrecarga en cualquier MCU.

La segunda forma es llevar el impulso del paso a un contador. Esto podría ser difícil de manejar si tu motor funciona en ambas direcciones, ya que necesitas incrementar algunas veces y decrementar otras (o simplemente saber en qué dirección está la cuenta). Utilicé este método en los años 80, cuando los chips de contador/temporizador se utilizaban normalmente para el control de movimiento.

La forma más eficiente de controlar un stepper es con un circuito generador de velocidad independiente, controlado por la MCU. Una forma sencilla de construir uno es utilizar el 7497 chip multiplicador de velocidad. Cada 7497 tiene seis bits y se pueden conectar en cascada para obtener la resolución deseada. Sin embargo, su flujo de impulsos de salida no es muy uniforme, lo que puede causar inestabilidad en algunas aplicaciones (aunque puede filtrarse). Una técnica mejor es el método del sumador/acumulador, que da un flujo de pulsos de salida muy limpio, y es fácilmente multiplexado para manejar múltiples motores (si lo necesitas). He tenido algunos sistemas de 32 ejes que utilizaron este enfoque. El sumador/acumulador (y el mux) encaja muy bien en una FPGA.

La gran ventaja de un generador de tarifas es la sencillez del software. El generador de tasas te da una interrupción a una tasa fija, que es tu período de actualización. En esa ISR simplemente cargas el número de pasos que quieres que se ejecuten en el siguiente periodo. Las interrupciones de actualización pueden ser relativamente infrecuentes, por lo que la sobrecarga es baja. La posición es fácil de mantener - sólo tienes que añadir el valor que cargas en el generador de tasa a tu contador de posición. La velocidad es fácil de controlar porque está en proporción directa con el número de pasos que cargas en el generador de velocidad. La aceleración también es fácil de controlar - sólo tienes que añadir/restar un valor fijo en cada actualización. Si tienes varios motores, los actualizarías todos en el mismo ISR.

(whew) Lo siento si eso fue demasiado largo.

0 votos

¡Para nada demasiado prolijo! Justo lo que buscaba.

0 votos

¿Dispone de más documentación sobre el "generador de tarifas"? Estoy pensando en circuitos/aplicaciones de ejemplo, documentación, tutoriales que expliquen cómo funciona.

0 votos

@VictorLamoine - Siento el retraso en la respuesta, pero acabo de recibir tu comentario. Voy a desenterrar un viejo esquema o dos. Sé que tengo una versión de un solo eje que había puesto en una FPGA (muy legible), y puede que tenga una versión multi-eje. ¿Necesita multi-eje?

-1voto

Binyomin Puntos 109

Quizás el método más sencillo para generar pulsos PWM es utilizar un PLC Omron CP1L-M30DT1-D (Este es un número de pieza de ejemplo ya que hay varios modelos adicionales con salida de pulsos de alta velocidad). No sólo puede generar pulsos PWM con este dispositivo, sino cualquier número de pulsos estándar predeterminados a un ciclo de trabajo del 50% para conducir un motor paso a paso a una posición predeterminada. La aceleración y la desaceleración también son programables, lo que elimina los errores del controlador del motor paso a paso. Contadores de alta velocidad también están disponibles si desea retroalimentar los pulsos para la verificación, pero por lo general no es necesario ya que el dispositivo con precisión a cabo el número preprogramado de pulsos. Soy nuevo en este grupo y no creo que pueda crear un enlace a la especificación del PLC, así que quizás alguien más pueda crearlo por mí.

http://www.miel.si/wp-content/VsebinaPDF/P20E-EN-02+CP1L+Datasheet.pdf

Las especificaciones de la entrada del contador de alta velocidad y de la salida de impulsos se encuentran en la página 3 de esta documentación

0 votos

Abogar por la compra de un equipo modular, sin duda caro, que encierra todos los detalles funcionales en su interior de caja negra no es realmente una respuesta a una pregunta que busca entender cómo implementar esta funcionalidad en detalle ni realmente en el espíritu del sitio. La pregunta a la que efectivamente estás respondiendo "qué puedo comprar para resolver este problema" es una pregunta que estaría prohibida aquí como pregunta de compra/selección.

0 votos

Gracias @ChrisStratton entendido. Como mencioné en mi comentario, soy nuevo en el sitio y entendí que estaba basado en soluciones, no limitado a soluciones a nivel de CI. Mi intención era ofrecer una solución alternativa de bajo costo, sin embargo, todavía requiere una comprensión en profundidad de la programación de los resultados deseados. Pero gracias por la información y voy a tener esto en cuenta a la hora de responder en el futuro.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X