Estoy tratando de contar (con precisión) la cantidad de pulsos alimentados a un controlador de motor paso a paso TI DRV8711 . Este controlador "convierte" un flanco ascendente, según la configuración, en un paso completo o micropaso. El MCU que estoy usando para generar esos pulsos PWM es un Freescale MPC5602D . La frecuencia de pulso será inferior a 30 kHz por motor paso a paso.
La aplicación para la que estoy usando 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 detiene).
¿Cómo se conduce normalmente ese tipo de conductores? ¿Usando un pin GPIO normal que se afirma en una rutina de interrupción del temporizador o mediante PWM? Quiero evitar abarrotar el bucle principal con la afirmación y la anulación de un pin GPIO. (Tengo que controlar más de 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 contar con precisión el número de pulsos PWM? ¿Se hace esto alimentando la salida PWM a la MCU y usando un contador para contar los flancos ascendentes? Supongo que tengo que disminuir la frecuencia de PWM antes de alcanzar el número deseado de pulsos para deshabilitar el PWM antes del último pulso y así garantizar que no se "sobrepase" el punto de ajuste.
Conozco tres formas de lograr lo que necesita (y he usado las tres). Ha mencionado los dos primeros en su comentario.
Hacer que un ISR cuente los pulsos escalonados es lo más simple. El ISR solo necesita incrementar o disminuir un contador de posición. En los micros de 8 bits que uso, tal ISR tomaría menos de un microsegundo (aunque codifico en lenguaje ensamblador, no C, en esa MCU). No debería ser una gran sobrecarga en cualquier MCU.
La segunda forma es llevar el pulso de paso a un contador. Eso podría ser difícil de manejar si su motor funciona en ambas direcciones, ya que necesita incrementar algunas veces y disminuir otras (o simplemente saber en qué dirección está el conteo en relación). Utilicé este método en los años 80, cuando los chips de contador/temporizador se usaban normalmente para el control de movimiento.
La forma más eficiente de controlar un paso a paso es con un circuito generador de velocidad separado, controlado por la MCU. Una forma sencilla de construir uno es usar el chip multiplicador de tasa 7497 . Cada 7497 es de seis bits y los conecta en cascada para obtener la resolución deseada. Sin embargo, su flujo de pulsos de salida no es muy uniforme, lo que puede causar inestabilidad en algunas aplicaciones (sin embargo, se puede filtrar). Una técnica mejor es el método del sumador/acumulador, que proporciona un flujo de pulsos de salida muy limpio y se multiplexa fácilmente para impulsar varios motores (si es necesario). He tenido algunos sistemas de 32 ejes que utilizaron este enfoque. El Adder/acumulador (y el mux) encaja muy bien en un FPGA.
La gran ventaja de un generador de tarifas es la simplicidad del software. El generador de tasas le brinda una interrupción a una tasa fija, que es su período de actualización. En ese ISR simplemente carga la cantidad de pasos que desea ejecutar en el próximo período. Las interrupciones de actualización pueden ser relativamente poco frecuentes, por lo que la sobrecarga es baja. La posición es fácil de mantener: solo agrega el valor que carga en el generador de tasas a su contador de posición. La velocidad se controla fácilmente porque es directamente proporcional al número de pasos que carga en el generador de frecuencia. La aceleración también es fácil de controlar: solo agregue o reste un valor fijo en cada actualización. Si tiene varios motores, los actualizaría todos en el mismo ISR.
(uf) Lo siento si eso fue demasiado extenso.
Quizás el método más simple para generar pulsos PWM es usar 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 solo puede generar pulsos PWM con este dispositivo, sino cualquier cantidad de pulsos estándar predeterminados al 50% del ciclo de trabajo 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. Los contadores de alta velocidad también están disponibles si desea retroalimentar los pulsos para su verificación, pero por lo general son innecesarios ya que el dispositivo generará con precisión el número de pulsos preprogramados. Soy nuevo en este grupo y no creo que pueda crear un enlace a la especificación de PLC, así que tal vez alguien más pueda crearlo por mí.
http://www.miel.si/wp-content/VsebinaPDF/P20E-EN-02+CP1L+Datasheet.pdf
Las especificaciones de entrada de contador de alta velocidad y salida de pulsos se encuentran en la página 3 de esta documentación
Eugenio Sh.
fscheidl
Eugenio Sh.
fscheidl
Eugenio Sh.
fscheidl