Los controladores de impresoras 3D tienen que hacer muchas cosas muy, muy rápido. Realizar cálculos cinemáticos y dinámicos mientras se envían miles de pulsos de paso sincronizados con precisión por segundo es muy, muy difícil . La línea de microcontroladores AVR de 8 bits utilizada en controladores de impresoras 3D más antiguas es básicamente un procesador Mr Coffee de finales de la década de 1990. Su tiempo de procesador se ha agotado por completo, simplemente ejecutando funciones básicas de impresión en impresoras simples (por ejemplo, cartesianas), y al agregar una carga de cálculo adicional los empantanarán y causarán ralentizaciones, tartamudeos, pausas, etc.
"Pero mi impresora de 8 bits funciona bien", dices. No lo hace Su rendimiento de impresión está limitado por eso, ya sea que se dé cuenta o no. Slicers ahora oculta automáticamente muchas de las deficiencias de rendimiento del firmware. Por ejemplo, la práctica estándar de reducir considerablemente la velocidad de impresión en perímetros es en gran parte el resultado de que los procesadores de 8 bits tengan recursos inadecuados para dos cosas:
- Realización de cálculos de aceleración centrípeta para curvas en múltiples segmentos de gcode
- Mantenerse al día con la transmisión / procesamiento de gcode y la planificación de movimiento para gcode con muchos segmentos muy pequeños, como en modelos orgánicos o arcos suaves
Cuando se presenta una serie de segmentos muy pequeños en un arco suave o una curva compleja, el firmware de 8 bits probablemente se atragantará con la velocidad de procesamiento de comandos requerida e introducirá la tartamudez en la impresión. Estas pausas increíblemente breves permiten que la presión residual en el extrusor expulse un poco de plástico adicional, haciendo un pequeño grano en la impresión. Por lo tanto, la mayoría de las cortadoras diezman automáticamente curvas y generan gcode con resolución reducida para aligerar la carga en el firmware. Problema resuelto, ¿verdad?
Pero hay otro problema: los algoritmos de control de movimiento GRBL subyacentes a todos los principales controladores de impresoras 3D de código abierto fueron diseñados con muchos accesos directos y hacks para permitir que los procesadores de 8 bits se ejecuten lo suficientemente rápido. Por ejemplo, el algoritmo básico solo analiza la velocidad o el cambio de velocidad en la esquina entre dos segmentos, y lo usa para decidir cuándo desacelerar / acelerar a lo largo de la dirección del movimiento. No calcula ni considera la aceleración centrípeta / radial en absoluto. Este es un truco realmente efectivo cuando se imprimen modelos cuadrados de baja resolución, pero falla miserablemente en curvas suaves con muchos segmentos pequeños. El firmware no detecta ningún cambio de velocidad apreciable en la esquina de cualquiera de los dos segmentos casi lineales dentro de la curva facetada, y por lo tanto no disminuye la velocidad de la curva.
La impresión de perímetros complejos sin acelerar significa que la velocidad de avance ordenada debe ser muy baja para obtener una buena calidad. La mayoría de las impresoras están limitadas a aproximadamente 40 mm / s o menos en perímetros complejos, a pesar de poder ejecutar quizás 80-120 mm / s en un relleno de baja complejidad antes de alcanzar otros límites de velocidad.
Entre los límites de velocidad de procesamiento de comandos y las deficiencias del planificador de movimiento requeridas por los procesadores de baja potencia, las velocidades de impresión deben ser mucho más bajas en la práctica de lo estrictamente requerido por la física y el hardware de la impresora. Todo esto proviene de procesadores de 8 bits. Las soluciones alternativas y las mejores prácticas para abordar este problema están tan profundamente arraigadas en las cadenas de herramientas y el ecosistema que muy pocas personas se dan cuenta de que incluso hay un problema. Pero es un límite real que se puede superar: un procesador de alta velocidad que ejecute un planificador de movimiento más riguroso podría generar velocidades de impresión promedio más altas con una mejor calidad de impresión.
Dicho esto, los firmwares basados en ARM solo avanzan lentamente hacia planificadores de movimiento más avanzados. Esta es una gran área de desarrollo en este momento que en realidad está alejando un cambio próximo de los ARM de gama baja como el Cortex M3 hacia procesadores aún más rápidos. En realidad, no es tan difícil maximizar un Arduino Due de 84 MHz al acumular un montón de características de firmware.
El uso de procesadores de 8 bits también hace que las impresoras sean MÁS ALTAS. El mayor consumidor de tiempo de procesador en una impresora típica de 8 bits es la interrupción paso a paso que dispara los pulsos de paso para hacer que los motores se muevan. Es bastante típico que> 60% de todos los ciclos de reloj en un Atmega AVR vaya a disparar pulsos de paso. Debido a que esto ocurre como una interrupción, otras tareas de procesamiento que debe realizar la impresora, como los cálculos de aceleración y el control del calentador, quedan atrapadas en los breves espacios entre los eventos de interrupción gradual.
Sin un diseño de firmware cuidadoso, los pulsos de paso "desplazarán" por completo a otras funciones, como las actualizaciones de la pantalla LCD y los cálculos de aceleración. Para permitir velocidades de movimiento más altas sin utilizar todos los recursos del procesador, los firmwares de 8 bits tienen un modo llamado "duplicación por pasos" que dispara dos (o cuatro u ocho) pulsos de paso por interrupción paso a paso de modo que la mitad (o un cuarto, o un octavo) ) se pueden usar tantas interrupciones de pasos para producir la misma velocidad de movimiento. Esta práctica elimina el cuello de botella del procesador, pero provoca un movimiento del motor más fuerte y ruidoso porque los pulsos de paso se disparan en ráfagas en lugar de una frecuencia constante. En efecto, el nivel de micropasos del motor se reduce funcionalmente a un modo más grueso cuando la interrupción paso a paso dispara pasos dobles o cuádruples. Entonces los motores se vuelven más fuertes, menos precisos,
Un efecto secundario interesante es que si cambia una impresora basada en Marlin de 1/16 microstepping a 1/32 microstepping, y mantiene las mismas velocidades de impresión, el firmware simplemente comenzará a duplicar, bajando su nivel efectivo de microstepping nuevamente a 1/16.
Los firmwares basados en ARM también usan duplicación de pasos, pero las tasas de pasos permitidas son típicamente ~ 8 veces más altas antes de usar pasos dobles / cuádruples. Eso puede significar velocidades más altas y / o movimiento más suave.
Otro problema con los AVR de 8 bits es la falta de punto flotante de hardware y la necesidad de gastar muchos ciclos de reloj en cálculos de alta precisión o manejo de números muy grandes. La cinemática Delta, las funciones de nivelación automática, el cálculo de movimientos con conteos de pasos extremadamente altos para impresoras grandes y otras funcionalidades avanzadas requieren muchos ciclos de reloj en un procesador de 8 bits. El diseño deficiente del firmware o la adición descuidada de una función que requiere algunas raíces cuadradas adicionales y funciones trigonométricas pueden atascar por completo el procesador. Este tipo de característica de arrastre y aumento de código ha impactado seriamente el rendimiento de Marlin con el tiempo a medida que la gente pregunta más y más sobre el viejo AVR.
En comparación, un procesador de 32 bits no solo tiene un reloj más rápido y más ciclos de reloj, sino que también puede hacer cálculos matemáticos mucho más complejos en menos ciclos de reloj, porque tiene una funcionalidad de hardware dedicada que se encarga de muchos de los pasos de 8 bits procesador debe hacer en el software.
¿Funcionan los procesadores de 8 bits? Claro, funcionan sorprendentemente bien por lo que son y por lo que les pedimos. Pero sin duda limitan el rendimiento y las características de las impresoras 3D modernas. Incluso la actual generación actual de procesadores de 32 bits ya está siendo maximizada por las impresoras de alta velocidad y las características pesadas en matemáticas. El procesador de 8 bits ya está dos generaciones atrás de lo que calificaría como un controlador de impresora 3D "moderno".
En general, AVR es, de hecho, menos potente que muchos núcleos ARM utilizados en la actualidad. La mayoría de las impresoras con AVR no tienen coprocesadores de punto flotante, aunque gran parte del control de pasos y movimientos se puede hacer en matemática de enteros (excepto G2 / G3). Marlin puede interrumpir el manejo de pasos hasta 10000 veces por segundo en AVR, traduciendo a 40000 pasos por segundo. Esto no es particularmente útil sin componentes mecánicos que pueden moverse a esas velocidades y aún imprimir resultados significativos (o son mucho más precisos y tienen un conteo de pasos por mm mucho más alto a una velocidad similar).
La visualización gráfica no es una tarea particularmente exigente a bajas velocidades: las altas velocidades o las interfaces extrañas pueden requerir un poco más de potencia o una interrupción dedicada.
Los momentos en que ARM podría ser importante son para configuraciones más pesadas en matemáticas y especialmente en coma flotante como delta, donde cada movimiento requiere muchas operaciones de punto flotante y trigonométrico, y se describe la navegación en menús en un AVR de 16MHz (atmega2560) como "dolorosamente lento", pero Marlin logra imprimir resultados significativos en impresoras delta-style.
Claramente, un núcleo ARM que sea más rápido en el desempeño de punto flotante suave, o que soporte hardfloat (hardware que realiza operaciones de punto flotante de manera muy eficiente) verá un beneficio para tales procesos.
fuente
En general, los microcontroladores como el AVR son de un solo núcleo / un solo subproceso, por lo que, mientras trabaja en un bucle while para ejecutar el controlador del motor, es posible que le falten recursos para hacer cualquier otra cosa, como navegar por un menú de manera eficiente.
Muchos procesadores ARM hoy en día son multi-core / multi-thread, lo que significa que puede tener un hilo trabajando en su impresión, mientras que otro es gratis para cualquier otra cosa que el usuario quiera hacer.
es decir, cualquier procesador AVR que ejecute un servidor web local para permitir el acceso remoto a la impresora sería extremadamente básico, donde ARM generalmente permitiría mucha más flexibilidad.
fuente
El procesador AVR tiene un rendimiento suficiente para la impresión estándar. Pero carece de rendimiento para
La comparación de especificaciones técnicas debe explicarse por sí misma. Esta CPU ARM particular es al menos 10 veces más rápida frente a ATmega2560:
CPU ARM-Cortex M3 LPC1769 (utilizado en Smoothieboard )
Microcontrolador ATmega2560
fuente
Los procesadores AVR son de 8 bits, por lo que solo pueden obtener datos de la memoria de 8 bits a la vez, mientras que un ARM es de 32 bits y pueden obtener datos de 32 bits a la vez. La resolución de posición requiere un valor mínimo de 24 bits, esto significa que el AVR toma 3 capturas de datos para la posición, mientras que el ARM toma 1 captura de datos.
Peor aún, los procesadores AVR dividen internamente el reloj por 3, por lo que un AVR de 40 MHz se ejecuta a 13.3 MHz normalmente, mientras que un ARM es 1 ciclo de reloj por transacción de bus y procesamiento de instrucciones: esto incluye un múltiplo de 32 bits por 32 bits en 1 ciclo de reloj
El mapa de memoria en los procesadores ARM tiene 32 bits de ancho o 4 GB, mientras que los procesadores de 8 bits solo tienen un bus de direcciones de 16 bits o 64 KB, lo que significa que la conmutación de bancos entra en juego en cualquier programa de más de 64 KB, esto requiere instrucciones y tiempo para que se haga, mientras que con ARM esto no es un problema.
Los aspectos de costo son casi los mismos que los AVR: solo requiere firmware rediseñado.
En cuanto a los FPGA:
El resultado de agregar un FPGA a un AVR costará mucho más que ir a un procesador ARM más potente.
fuente
- -
y- - - -
) que son bastante molestos, tbh.