Sincronización de control del motor paso a paso

5

Tengo una pregunta sobre el control del motor paso a paso mientras uso la pila TCP / IP.

En el pasado, he usado un temporizador para el control de mi motor paso a paso. Configuro el período de un temporizador al tiempo requerido entre impulsos y luego cambio las salidas de fase del motor según sea necesario en el temporizador ISR. En los casos en los que hice esto, mi paso a paso se movía a una velocidad máxima de alrededor de 400 pulsos por segundo, lo que significa que la interrupción se producía cada 2.5 milisegundos. Y estaba usando USB para comunicarme con el host.

Ahora estoy trabajando en un nuevo producto que utilizará la pila TCP / IP para comunicarse con una PC a través de Ethernet. También se comunicará con otros dispositivos a través de los módulos SPI y UART. Este nuevo dispositivo debe ser capaz de operar un paso a paso hasta 2000 pulsos por segundo, lo que significa que la interrupción puede dispararse cada .5 milisegundos si uso el mismo enfoque de temporizador / ISR para conducir el paso a paso. El paso a paso se activa y desactiva según los comandos recibidos del host, por lo que la comunicación con el host y el funcionamiento del motor deben realizarse de forma armoniosa y simultánea. Si la velocidad paso a paso varía ligeramente, eso no sería un problema, pero no es lo ideal. Además, si el paso a paso se detuviera por unos 30 ms en medio de su movimiento, no sería aceptable.

Estoy considerando usar un PIC24F con la velocidad de reloj de instrucción de 16MHz (32Mhz / 2 usando el FRC + PLL interno) para este proyecto. ¿Crees que las interrupciones del paso a paso interrumpirán la comunicación de Ethernet o viceversa? ¿Hay una mejor manera de hacer esto?

He considerado usar un PIC separado para el control paso a paso y luego podría enviar los comandos de posición de destino de imagen o detener los comandos para iniciar y detener el movimiento, pero eso agregaría otro firmware a la mezcla y complicaría las cosas.

    
pregunta PICyourBrain

3 respuestas

3

Como mencionó Nick T, TCP / IP no tiene filtros y no es determinista. Usted dijo que también desea interactuar con dispositivos SPI y UART, y las versiones anteriores usaban USB. Estos son difíciles de hacer en tiempo real, y probablemente requieren un espacio de código significativo.

Por otra parte, usted desea el control en tiempo real de sus motores paso a paso, lo que requiere ejecución determinística e interrupciones rápidas, pero no mucho espacio de programas.

Aunque dijiste que querías evitar usar un microcontrolador por separado porque complicaría las cosas, este es un ejemplo perfecto de cuando necesitas un coprocesador, y creo que simplificaría las cosas. al final.

Puede desarrollar un firmware de controlador de motor paso a paso simple que se ejecute en microcontroladores pequeños y baratos. Diseñe (o descubra) un protocolo que pueda usar un bus de comunicación disponible en hardware en el controlador que elija. Recomendaría SPI para esto (en un canal diferente al dispositivo que mencionó en su pregunta; su maestro debería tener dos periféricos SPI), no desea meterse con los conflictos de direcciones dado el pequeño número de controladores que tendrá . No haga nada con este controlador, sino ejecute el paso a paso de acuerdo con los datos que recibe a través del protocolo. Probablemente puedas comprar algo que ya hace esto. El objetivo es poder tratar esto como un periférico de hardware.

Luego, puede desarrollar controladores USB o Ethernet que se conectarán a estos dispositivos. Tendrá flexibilidad en los protocolos del host (¿Necesita usar RS485 esta vez? ¡No hay problema!), Puede usar diferentes números de motores y tiene una mayor modularidad para diseñar, probar, depurar, reparar y reemplazar. Las únicas razones por las que intentaría implementar algo como esto en un solo controlador serían las restricciones extremas de costo / tamaño y / o la falta de módulos de hardware (como PWM? ¿Perdí algo?) Que podrían hacer esto sin interrumpir el host procesador.

    
respondido por el Kevin Vermeer
3

La pregunta principal es ¿qué es lo que realmente manejará los datos que vienen por cable? La cantidad de basura (cosas que no están dirigidas a usted) que Ethernet puede proporcionar es asombrosa. Si va a utilizar una MCU de gama baja (PIC24F), necesitará algún tipo de coprocesador, por ejemplo. y un ENC28J60 para proporcionar, como mínimo, un filtro de dirección MAC.

Alguien en el chat mencionó que el PIC24F tiene prioridades de interrupción, por lo que si el mantenimiento de la isocronicidad es crítico, simplemente puede establecer una prioridad más alta para el temporizador.

Un menor aparte: tenga en cuenta que TCP / IP y Ethernet no son deterministas (independientemente). Por ejemplo, no espere poder enviar un comando a través de Ethernet para detener su motor paso a paso "ahora" cuando esté en la posición X y responda repetidamente.

    
respondido por el Nick T
1

Probablemente necesitará usar un módulo PWM para generar sus pulsos. He tenido dificultades para generar pulsos en el software en las frecuencias > 1kHz en PICs. Solo busque un PIC con el número correcto de módulos CCP / ECCP y salidas PWM para su aplicación.

    
respondido por el mjh2007

Lea otras preguntas en las etiquetas