Stampante 3D “SeraMaker”

Programmazione

Per effettuare la programmazione di Arduino, è stato impiegato un firmware basilare chiamato “Marlin“, che è stato sviluppato dal progetto RepRap e rilasciato sotto licenza open source, appositamente per il controllo di stampanti
3D che adottano la tecnica FDM. Nonostante questo sia già preconfigurato, è necessario rivedere alcuni parametri per poterlo adattare alla macchina in questione.

 

#define motherboard 33

Il numero 33 indica che la configurazione hardware è basata sullo shield Ramps 1.4 per il controllo di: estrusore, ventola raffreddamento del materiale estruso e piano di stampa riscaldato.

IMPOSTAZIONI TERMICHE

#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_BED 1

Il numero finale definisce la curva della funzione da utilizzare per la lettura della temperatura dell’estrusore (sensor_0) e del piano di stampa riscaldato (bed), in base al tipo di sensore adottato.
1 = termistore NTC 100kΩ di tipo EPCOS

#define HEATER_0_MINTEMP 5
#define BED_MINTEMP 5

Il numero finale definisce il valore minimo di temperatura (°C) misurato dal sensore dell’estrusore (heater_0) e dal piano riscaldato (bed) per permettere il funzionamento della macchina. Un valore inferiore potrebbe significare un malfunzionamento dei sensori.

#define HEATER_0_MAXTEMP 250
#define BED_MAXTEMP 140

Definisce il valore massimo di temperatura consentito sopra il quale interviene la protezione da sovratemperatura, provocando lo spegnimento automatico del dispositivo in questione. NB: non funziona in caso di guasto del sensore.

#define MAX_BED_POWER 256

Il numero finale, se compreso tra 1 e 255 attiva il PWM per il controllo della potenza del piano di stampa, altrimenti se pari a 256 questo viene alimentato costantemente. E’ stata scelta questa condizione in quanto si utilizza un relè per il pilotaggio.

#define EXTRUDE_MINTEMP 170

Definisce la temperatura minima richiesta dall’estrusore per consentire l’estrusione del filamento, evitando un’eventuale estrusione “a freddo”.

IMPOSTAZIONI FINECORSA

const bool X_ENDSTOPS_INVERTING = false
const bool Y_ENDSTOPS_INVERTING = false
const bool Z_ENDSTOPS_INVERTING = false

Definisce la logica dei finecorsa dei vari assi, di norma si ha il livello logico alto quando si raggiunge un finecorsa. In caso contrario, è necessario invertire la logica impostando true.

#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

Definisce la destinazione degli assi quando si inizializza la loro posizione (home).
1 = max
-1 = min

#define X_MAX_POS 200
#define X_MIN_POS 0
#define Y_MAX_POS 200
#define Y_MIN_POS 0
#define Z_MAX_POS 180
#define Z_MIN_POS 0

Il numero finale definisce la soglia di posizione dei vari assi (in millimetri), oltre la quale ne viene impedito il movimento per prevenire danni alla componentistica.

IMPOSTAZIONI MOTORI

#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0

Il numero finale definisce il tipo di logica adottata dai drivers dei motori per gestirne l’abilitazione:
0 = Attivo basso
1 = Attivo alto

#define INVERT_X_DIR false
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false
#define INVERT_E0_DIR false

In base a come i motori sono montati nella struttura, è possibile invertirne il senso di rotazione in modo da muovere gli assi nella giusta direzione.

IMPOSTAZIONI MOVIMENTI

#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,2560,590}

In base alle caratteristiche dei motori impiegati e alla modalità di controllo da parte dei drivers, definisce il numero di impulsi che l’unità di controllo deve generare per far compiere uno spostamento unitario ai vari assi (X, Y, Z) e al filamento termoplastico (E0). In seguito è mostrato come calcolare questi parametri.

#define DEFAULT_MAX_FEEDRATE {200, 200, 5, 20}

Definisce il valore massimo di velocità (mm/s) consentito per i movimenti degli assi (X, Y, Z, E0) nello svolgimento di una stampa.

#define DEFAULT_ACCELERATION 3000

Definisce il valore standard di accelerazione (mm/s^2) dei vari assi.

#define DEFAULT_MAX_ACCELERATION {3000,3000,100,3000}

Definisce il valore massimo di accelerazione (mm/s^2) consentito per i vari assi, se quello impostato tramite slicing è diverso da quello standard.

Calcoli per specifiche e programmazione

STEPS PER UNIT

Indicato con spu, equivale al numero di impulsi che l’unità di controllo deve inviare ai drivers dei motori passo-passo per poter far compiere uno spostamento unitario (1mm) all’asse corrispondente.
Ciò dipende dal numero di passi che costituiscono la rotazione completa del rotore Srev (steps per revolution), dal numero di impulsi necessari al driver per fargli compiere un passo intero µS (microsteps per step) e dalla distanza ottenuta sull’asse facendogli compiere una rotazione completa Drev.

\displaystyle spu = \frac{Srev * \mu S}{Drev}

Tutti i motori impiegati nella stampante 3D in questione sono caratterizzati da Srev=200 e vengono pilotati da appositi drivers tramite la tecnica microstepping, aventi µS=16.
Il microstepping consiste nello sbilanciamento delle correnti erogate in 2 bobine adiacenti per posizionare l’albero del motore in un punto intermedio tra quelli di un passo intero. In questo modo è possibile dividere il singolo passo in diversi microsteps, aumentando drasticamente la precisione dei movimenti.

Per gli assi orizzontali, X e Y, si tiene conto che questi vengono azionati tramite una cinghia caratterizzata da un passo tra i denti Bp=2,5mm, collegata ai motori mediante pulegge aventi un numero di denti nT=16.

\displaystyle spu(XY) = \frac{Srev * \mu S}{Bp * nT} = \frac{200 * 16}{2.5 * 16} = 80step/mm

 

Per l’asse verticale Z, si tiene conto che viene azionato tramite la rotazione di 2 barre filettate M8, caratterizzate da un passo del filetto Lp=1,25mm.

\displaystyle spu(Z) = \frac{Srev * \mu S}{Lp} = \frac{200 * 16}{1.25} = 2560step/mm

Per la trazione del filamento termoplastico all’interno dell’estrusore E0, si tiene conto che questo è mosso da un bullone seghettato caratterizzato da un numero di denti nT=32, da un passo tra questi Hbp=0,73mm e che viene messo in rotazione dal motore tramite 2 ingranaggi caratterizzati da un rapporto di trasmissione kT=4,3.

\displaystyle spu(XY) = \frac{Srev * \mu S * kT}{Hbp * nT} = \frac{200 * 16 * 4.3}{0.73 * 32} = 590step/mm

RISOLUZIONE MOVIMENTO ASSI

Corrisponde al minimo incremento che è possibile ottenere sulla distanza percorsa da un asse, attraverso l’invio di un singolo impulso al driver del motore corrispondente. Equivale quindi all’inverso del numero di impulsi necessari per compiere uno spostamento unitario, spu.

\displaystyle Res(XY) = \frac{1}{spu(XY)} = \frac{1}{80} = 12.5\mu m

\displaystyle Res(Z) = \frac{1}{spu(Z)} = \frac{1}{2560} = 0.39\mu m

 

 

4,698 total views, 4 views today