I controller per stampanti 3D devono fare molte cose molto, molto velocemente. Eseguire calcoli cinematici e dinamici mentre si inviano molte migliaia di impulsi step sincronizzati con precisione al secondo è davvero, davvero difficile . La linea di microcontrollori AVR a 8 bit utilizzata nei vecchi controller per stampanti 3D è sostanzialmente un processore Mr Coffee di fine anni '90. Sono completamente, completamente al massimo sul tempo del processore, eseguendo le funzioni di stampa di base in semplici stampanti (ad esempio cartesiane) e l'aggiunta di un carico di calcolo aggiuntivo li bloccherà e causerà rallentamenti, balbuzie, pause e così via.
"Ma la mia stampante a 8 bit funziona bene", dici. No, non lo fa. Le tue prestazioni di stampa sono limitate da esso, che tu lo realizzi o meno. Le affettatrici ora nascondono automaticamente molte delle carenze prestazionali del firmware. Ad esempio, la pratica standard di rallentare notevolmente le velocità di stampa sui perimetri è in gran parte il risultato di processori a 8 bit con risorse inadeguate per due cose:
- Esecuzione di calcoli di accelerazione centripeta per curve su più segmenti gcode
- Tenere il passo con la trasmissione / elaborazione gcode e la pianificazione del movimento per gcode con molti segmenti molto piccoli, come nei modelli organici o archi lisci
Quando viene presentato con una serie di segmenti molto piccoli in un arco uniforme o una curva complessa, il firmware a 8 bit probabilmente si strozzerà con la velocità di elaborazione del comando richiesta e introdurrà la balbuzie alla stampa. Queste pause incredibilmente brevi consentono alla pressione residua nell'estrusore di espellere un po 'di plastica in più, facendo un po' di brio sulla stampa. Quindi la maggior parte delle affettatrici decimano automaticamente le curve e producono gcode con una risoluzione ridotta per alleggerire il carico sul firmware. Problema risolto, vero?
Ma c'è un altro problema: gli algoritmi di controllo del movimento GRBL alla base di tutti i principali controller di stampanti 3D open source sono stati progettati con molte scorciatoie e hack per consentire ai processori a 8 bit di eseguire abbastanza velocemente. Ad esempio, l'algoritmo di base esamina solo la variazione di velocità o velocità nell'angolo tra due segmenti e lo utilizza per decidere quando decelerare / accelerare lungo la direzione del movimento. Non calcola né considera l'accelerazione centripeta / radiale. Questo è un trucco davvero efficace quando si stampano modelli boxy a bassa risoluzione, ma fallisce miseramente su curve morbide con molti piccoli segmenti. Il firmware non rileva alcun cambiamento di velocità apprezzabile all'angolo di due segmenti quasi lineari all'interno della curva sfaccettata, e quindi non rallenta per la curva.
La stampa di perimetri complessi non accelerati significa che la velocità di avanzamento comandata deve essere molto bassa per ottenere una buona qualità. La maggior parte delle stampanti è limitata a circa 40 mm / s o meno su perimetri complessi, nonostante sia in grado di eseguire forse 80-120 mm / s su riempimento a bassa complessità prima di raggiungere altri limiti di velocità.
Tra i limiti di velocità di elaborazione dei comandi e le carenze del pianificatore di movimento richieste dai processori a bassa potenza, le velocità di stampa devono essere molto più basse in pratica di quanto strettamente richiesto dalla fisica e dall'hardware della stampante. Tutto questo proviene da processori a 8 bit. Le soluzioni alternative e le migliori pratiche per affrontare questo problema sono così profondamente integrate nelle toolchain e nell'ecosistema che pochissime persone si rendono conto che c'è persino un problema. Ma è un limite reale che può essere superato: un processore ad alta velocità con un pianificatore di movimento più rigoroso potrebbe generare velocità di stampa medie più elevate con una migliore qualità di stampa.
Detto questo, i firmware basati su ARM si stanno lentamente spostando verso pianificatori di movimento più avanzati. Questa è una grande area di sviluppo in questo momento che sta effettivamente spingendo un prossimo spostamento da ARM di fascia bassa come Cortex M3 verso processori ancora più veloci. In realtà non è poi così difficile ottenere un Arduino Due a 84 MHz accumulando un sacco di funzionalità del firmware.
L'uso di processori a 8 bit rende anche le stampanti PIÙ FORTE. Il maggiore consumatore di tempo del processore in una tipica stampante a 8 bit è l'interrupt stepper che attiva gli impulsi di passo per far muovere i motori. È abbastanza tipico che> 60% di tutti i cicli di clock su un Atmega AVR vadano a impulsi di scatto. Poiché ciò si verifica come un interrupt, altre attività di elaborazione che la stampante deve eseguire, come i calcoli dell'accelerazione e il controllo del riscaldatore, vengono schiacciate nei brevi spazi tra gli eventi di interruzione stepper.
Senza un'attenta progettazione del firmware, gli impulsi step "elimineranno" completamente altre funzionalità come gli aggiornamenti del display LCD e i calcoli dell'accelerazione. Al fine di consentire frequenze di movimento più elevate senza utilizzare tutte le risorse del processore, i firmware a 8 bit hanno una modalità chiamata "raddoppio del passo" che attiva due (o quattro, o otto) impulsi di passo per passo-passo in modo che metà (o un quarto o un ottavo) ) come molti interruttori stepper possono essere utilizzati per produrre la stessa velocità di movimento. Questa pratica riduce i colli di bottiglia del processore, ma provoca un movimento del motore più forte e più forte perché gli impulsi di passo vengono attivati a raffica anziché con una frequenza costante. In effetti, il livello di microstepping del motore viene portato in modo funzionale in una modalità più grossolana quando l'interruzione stepper fa doppio o quadruplo passaggio. Quindi i motori diventano più rumorosi, meno precisi,
Un interessante effetto collaterale è che se si passa da una stampante basata su Marlin da 1/16 di microstepping a 1/32 di microstepping e si mantengono le stesse velocità di stampa, il firmware inizierà semplicemente a raddoppiare il passo, portando il livello di microstepping effettivo di nuovo a 1/16.
Anche i firmware basati su ARM utilizzano il raddoppio dei passi, ma le velocità dei passi consentite sono in genere ~ 8 volte superiori prima di utilizzare il doppio / quadrante. Ciò può significare velocità più elevate e / o movimenti più fluidi.
Un altro problema con gli AVR a 8 bit è la mancanza di hardware in virgola mobile e la necessità di dedicare molti cicli di clock a calcoli ad alta precisione o alla gestione di numeri molto grandi. La cinematica delta, le funzioni di autolivellamento, il calcolo delle mosse con conteggi dei passi estremamente elevati per le stampanti di grandi dimensioni e altre funzionalità avanzate richiedono molti cicli di clock su un processore a 8 bit. Il design del firmware scadente o l'aggiunta incurante di una funzione che richiede alcune radici quadrate extra e le funzioni di trigge possono impantanare completamente il processore. Questo tipo di strisciamento di funzionalità e code bloat ha gravemente influenzato le prestazioni di Marlin nel tempo, poiché le persone chiedono sempre di più al vecchio AVR.
In confronto, un processore a 32 bit non ha solo un clock più veloce e più cicli di clock, è anche in grado di fare matematica molto più complesse in meno cicli di clock, perché ha una funzionalità hardware dedicata che si occupa di molti passaggi di 8 bit processore deve fare nel software.
I processori a 8 bit funzionano? Certo, funzionano sorprendentemente bene per quello che sono e ciò che chiediamo loro. Ma limitano senza dubbio le prestazioni e le caratteristiche delle moderne stampanti 3D. Anche l'attuale generazione di processori a 32 bit è già stata ottimizzata da stampanti ad alta velocità e funzionalità matematiche. Il processore a 8 bit è già indietro di due generazioni rispetto a quello che si qualificherebbe come un "moderno" controller per stampante 3D.