FPGA-CNC

Cuando piensa en un controlador CNC, probablemente esté pensando en una computadora con un puerto paralelo o alguna solución de microcontrolador como un Smoothie Board. [Mhouse1] tiene otra idea: utilizar FPGA como controladores CNC.

Los FPGA básicamente manejan las cosas en paralelo, por lo que procesar el código G, calcular las curvas y aceleraciones y conducir varios motores paso a paso al mismo tiempo no sería un problema para los FPGA en absoluto. La mayoría de los dibujos de computadora se ralentizarán un poco cuando intente conducir todo a la vez y esto introduce algo de estrés mecánico. Un voltaje aún peor ocurre cuando tienes una computadora vieja tratando de ejecutar todo cuando alguna otra tarea se hace cargo de la CPU.

Verdire, [Mhouse1’s] El proyecto incluye Alter CPU en la FPGA para manejar algunas tareas en las que las CPU son buenas, pero la FPGA permite al diseñador crear dispositivos de E / S específicamente para la tarea. La CPU también funciona con RTOS (MicroC OS II) y Python GUI, que se ejecuta en una computadora dominante.

Hay un artículo más antiguo sobre el uso de FPGA para controlar una máquina CNC que tiene mucha buena información sobre el diseño de un animal de este tipo, si está interesado. Sin embargo, este diseño es mucho menos ambicioso que este. [Mhouse1] quiere que el controlador sea independiente de la máquina, y lo demostró con una cortadora láser barata basada en DVD y una máquina Shapeoko modificada.

Si desea una introducción a los FPGA, es posible que desee comenzar con nuestro tutorial sobre el desarrollo económico de FPGA. O puede aprender mucho solo con su navegador web.

  • Arthur Wolf dice:

    ¡Eso es increíble!

    Estamos agregando FPGA a Smoothieboard v2, ojalá haya algún código que podamos compartir aquí.

  • Artenz dice:

    No es tan difícil para una CPU realizar todas estas tareas a la vez, sin ningún esfuerzo. Use hardware PWM e interrupciones rápidas para impulsar los pasajes de cola con movimientos rectos, y use un proceso de menor prioridad para llenar la cola.

    • Arthur Wolf dice:

      De hecho, cuando considera el hecho de que necesita acelerar / ralentizar la generación de pasos y mantenerlos perfectamente sincronizados, no es tan fácil. Configuramos los pines de paso para que sean compatibles con hardware pwm en el Smoother, pero nadie descubrió cómo usarlos realmente. No conozco ningún microcontrolador controlado por CNC que realmente use PWM. Los PWM periféricos no son realmente adecuados para esto.

      • Artenz dice:

        ¿Qué significa “perfectamente sincronizado”? ¿Cuántos nanosegundos serían aceptables la fluctuación y el retraso?

        • Arthur Wolf dice:

          Bueno, su principal preocupación será asegurarse de que no se desincronicen durante un movimiento largo (un eje terminará antes que otro). Si esto se soluciona, entonces querrá que estén dentro de unos pocos microsegundos (idealmente menos de uno) entre sí durante el movimiento.

          • Artenz dice:

            ¿Por qué se sincronizarían? Puede calcular exactamente cuántos pasos deben realizarse antes de comenzar un movimiento. Y la sincronización de 3-4 ejes en microsegundos ciertamente se puede lograr con ~ 100 MHz ARM Cortex.

          • Arthur Wolf dice:

            No sé por qué se sincronizarían 🙂 Si crees que eso funcionaría, me gustaría un código, nadie lo intentó, hasta donde yo sé.

          • jpa dice:

            En cuanto a Smooth, en mi opinión, la pérdida axial de sincronización es un error completamente de software. Hay muchas formas de solucionar esto, lástima que mi simple se consideró demasiado confuso.

            Pero eso todavía le llega solo dentro de la resolución de 10 pasos. La precisión de microsegundos en LPC1768 sería bastante difícil debido a la falta de temporizadores; en STM32 o similar con muchos temporizadores, se podría eliminar completamente la marca de paso y simplemente actualizar los registros de tiempo a una frecuencia más baja.

        • Przemek Klosowski dice:

          PWM es bueno para el flujo de pulso regular, pero si necesita sincronizar varios motores, debe tener varios PWM sincronizados. Siempre que no toque sus configuraciones, funcionarán en sincronía, pero cuando cambie sus configuraciones, la autonomía de las unidades PWM en realidad obstaculizará.

          Digamos que quiere reducir la velocidad de un motor: escribe nuevos parámetros, pero ¿cómo sabe en qué parte del ciclo estaba el PWM? ¿El pulso de este ciclo ya se apagó o no? No creo que puedas controlar el tiempo de actualización frente al tiempo de pulso de salida, por lo que cuando actualizas varios PWM, básicamente estás en un estado racial.

          Puede haber alguna forma inteligente de hacerlo, pero como dice Arthur, no es simple.

    • tekkieneet dice:

      Los chips ARM de alrededor de $ 10 tienen controladores DMA bastante elegantes que tienen múltiples canales DMA y pueden encadenar DMA. Con DMA puede estirar fácilmente hasta cien ns o una distancia menor y utilizar las interrupciones para cosas menos críticas.

    • Al Williams dice:

      Seguro, PUEDES hacer cualquier cosa en los programas. Pero hay muchas implementaciones de software que no son óptimas, lo que no significa que no pueda escribir un programa mejor. Sin embargo, cuando tiene su computadora de 15 años con un puerto de impresora con Windows, la calidad de su software ni siquiera es el problema real.

      No estoy afirmando que no sea posible escribir un buen programa. Digo que este es un caso en el que el propio paralelismo de la FPGA encaja bien. Piense, por ejemplo, en analizadores lógicos. Puedes hacer un analizador lógico con una computadora. Si intenta hacer toda la lógica en un cuadro de Windows, tendrá dificultades. Si intenta hacer todo bajo RTOS, tendrá mejor suerte, pero aún tendrá algunos problemas. Pero hacerlo con FPGA es un proyecto fácil.

      Quizás el enfoque aquí podría ser más fácil que intentar arrancar todo en una CPU, especialmente porque hay una CPU con RTOS a bordo para manejar el trabajo pesado. Si lo piensa, usa el enfoque que sugiere: una CPU con periféricos dedicados. Simplemente hace sus propias guarniciones en lugar de elegir un chip de estante que tenga la combinación de lo que él quiere. Además, puede agregar y modificar esos periféricos a voluntad.

  • Fehér Áron dice:

    Ahora bien, esto definitivamente lo probaría con mi Basys2 cuando pudiera comprar servicios un poco más baratos pero bastante potentes. De cualquier manera ¡gran trabajo!

  • ¡PODER! dice:

    Sin duda, obtendrá un mejor rendimiento que un PIC de 8 bits con la tarea de “conducirlo todo a la vez”, pero ¿no sería demasiado costosa esta solución? ¿No obtendría un mejor rendimiento a un costo menor simplemente usando un PIC de $ 0.50 por motor? El PIC tiene un módulo ECCP que simplifica el control del motor de sacerdote para simplemente modificar un registro de 16 bits.

    Este ECCP es básicamente una solución analógica que obtiene un mejor rendimiento incluso que el FPGA … en términos de lidiar con el ritmo del motor real de un solo motor. El módulo libera tiempo de procesamiento que puede dedicar a tareas como supervisar el flujo y rastrear. Todo lo que necesita hacer es darle al PIC un reloj de sincronización y una lista de coordenadas de algo así como un ARM que proporciona un reloj de sincronización para cada PIC / controlador. En general, es una solución relativamente económica.

    La tabla lisa parece que el proceso de pensamiento fue crear problemas con los caballos de fuerza. Este problema de FPGA se siente de la misma manera.

    • ottoragam dice:

      Estoy de acuerdo. Siento que es más práctico dejar que un solo microcontrolador haga el control de ciclo de paso / cierre para cada motor. Uno puede simplemente diseñar un controlador de un solo eje que acepte la entrada típica de paso / dirección y dejar que un procesador diferente maneje la planificación del movimiento, la generación de pulsos y las comunicaciones a través de una interfaz “exótica”, sin tener que hacer mucho más trabajo para agregar más grados de libertad. a su máquina.

    • Bovski dice:

      Qué relojes funcionan estas imágenes tan pronto como ingresa al servicio y escalas más lineales donde necesita leer múltiples codificadores y tomar decisiones basadas en las reacciones, necesitando compensar las diferentes aceleraciones de los diferentes ejes mientras busca el mapeo del tornillo de avance. su acceso y cómo son las imágenes de 8 bits en los cálculos de FP64?

  • Jimf dice:

    El problema no molesta, esto se resuelve de muchas formas. Grbl, Mach3, linucCNC, etc. resolvieron esto mediante su propia implementación. Una de las cosas más importantes es la velocidad constante (CV) y la implementación antisentido que funciona bien. LinuxCNC 2.7 tiene un nuevo CV que todavía no he probado. Yo uso Mach3 y su CV a veces ignora tus límites máximos de aceleración. GRBL está en orden, pero a alta velocidad da muchas vueltas. Mi CNC tiene un pórtico pesado y es capaz de mover más de 400+ IPM. Es difícil acercarse a esa velocidad la mayor parte del tiempo porque el código G consta de segmentos de línea cortos y se obtiene un efecto de ametralladora que literalmente sacude la mesa. Un buen CV intentará suavizar el gcode para que el CNC pueda funcionar según lo previsto. Últimamente se ha trabajado mucho en linuxCNC para mejorarlo. Sin embargo, no creo que se acerque a lo que pueden hacer los grandes CNC industriales como HAAS o Mori. Estos tipos de máquinas pueden operar a más de 1000 IPM, moviendo cientos de libras y aún posicionar y detener con precisión un error de menos de .001 ″ sin romper la máquina. Todo con una aceleración y velocidad muy elevadas. Bastante impresionante.

  • Maxwell dice:

    Ese conjunto de láser es asombroso, parece sacado de una película de James Bond. Las fpgas también son geniales.

  • Glenn Jones (@ a2retro) dice:

    https://la-tecnologia.io/project/7500-nyx-edison-fpga-devboard: cualquier persona interesada en este tema puede querer seguir este proyecto.

Óscar Soto
Óscar Soto

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *