IT
  • English
  • Deutsch
  • Polski
  • Français
Login
Menu
Ultimo aggiornamento a month ago
Questo articolo è disponibile anche nelle seguenti lingue: 
ENPLDEFR

Il modulo GPIO (General Purpose Input Output) è un PCB aggiuntivo e opzionale che può essere collegato all'Original Prusa MK4/S, MK3.9/S, o MK3.5/S

IMPORTANTE: Per utilizzare tutte le potenzialità della scheda GPIO è necessario il firmware 6.2.0-alpha1 o successivo. Visita la pagina GitHub per scaricare l'ultimo firmware.

Il modulo offre maggiori funzionalità consentendo il controllo di dispositivi esterni tramite connessioni ai pin della scheda GPIO, che possono funzionare sia in modalità INPUT che OUTPUT. Questa sua versatilità offre un'ampia serie di potenziali casi d'uso.

Condividi e discuti i tuoi progetti con gli altri membri della Community Prusa sul nostro forum ufficiale. Abbiamo creato una sezione GPIO dedicata.

Idee per i casi d'uso

Il modulo può controllare l'otturatore di una fotocamera in un momento preciso, rendendolo ideale per creare time-lapse visivamente perfetti, in cui ogni immagine viene catturata nello stesso esatto momento.

Oltre a controllare l'otturatore di una fotocamera, il modulo può essere utilizzato per diverse altre applicazioni. Ad esempio, può attivare l'illuminazione esterna per illuminare l'area di stampa in fasi specifiche del processo di stampa, garantendo condizioni di luce ottimali per i controlli di qualità o le fotografie. Inoltre, può essere configurato per attivare le ventole di raffreddamento o altri dispositivi periferici, come estrattori o allarmi, in base all'esecuzione di G-code personalizzati durante le stampe, contribuendo a mantenere condizioni operative ottimali e a migliorare la sicurezza e l'efficienza dell'ambiente di stampa 3D.

Un altro importante caso d'uso è l'integrazione di una tastiera macro, dove ogni pressione di un tasto può attivare l'esecuzione di specifici comandi G-code. Questa configurazione consente un rapido controllo manuale delle funzioni della stampante, come l'avvio o la pausa di una stampa, la regolazione delle temperature o lo spostamento della testina di stampa in una posizione esatta. La possibilità di attivare azioni personalizzate con la semplice pressione di un tasto può snellire notevolmente i flussi di lavoro, rendendo il modulo di espansione GPIO uno strumento versatile e indispensabile per chi vuole personalizzare e ottimizzare la propria configurazione di stampa 3D.

La sicurezza prima di tutto! 

Se da un lato la possibilità di attivare il G-code tramite gli ingressi GPIO aggiunge grande flessibilità, dall'altro comporta limitazioni e potenziali rischi. Un uso improprio o una tempistica sbagliata dei comandi G-code possono interferire con il processo di stampa, causando errori di stampa o addirittura danni alla stampante. È fondamentale testare accuratamente qualsiasi configurazione G-code personalizzata in un ambiente controllato prima di implementarla nei lavori di stampa effettivi per evitare conseguenze indesiderate.

Inoltre, consigliamo di utilizzare questo modulo GPIO solo a utenti esperti con una solida conoscenza dell'elettronica e della manipolazione del G-code, poiché connessioni o configurazioni improprie possono causare danni all'hardware o rischi per la sicurezza.

Schemi

Gli schemi sono open source e sono disponibili alla nostra pagina Open Source at Prusa Research.

Come installare la scheda GPIO

  1. Assicurati che la stampante si sia raffreddata a temperatura ambiente e spegnila.
  2. Apri il coperchio del box xBuddy rimuovendo le quattro viti M3x6.
  3. Collega il cavo GPIO alla porta I2C.
  4. Chiudi il coperchio della scatola di xBuddy.
  5. Assicurati che il GPIO non tocchi alcuna parte metallica del box xBuddy o del suo coperchio. 
  6. Buon divertimento con il tuo progetto!

Pin

La scheda dispone di 8 pin, numerati da 0 a 7. I pin 0-3 possono essere usati come output mentre i pin 4-7 possono funzionare sia come ingresso che come uscita. Ogni pin è di tipo open-drain quando viene utilizzato come uscita, cioè è controllato da un transistor che collega il pin alla massa (0 V) quando è attivo. Quando il pin è inattivo, rimane “ floating ”, ovvero non è collegato ad alcuna tensione specifica, ma grazie alle resistenze di pull-up interne, la tensione sul pin può aggirarsi intorno ai 3,3 V. 

È possibile saldare resistenze di pull-up esterne ai pin JP. Questo cambia il comportamento descritto sopra. Per maggiori dettagli a riguardo, consulta il paragrafo sulle resistenze di pull-up qui sotto. 

The behavior of the pins in an open-drain state when used as outputs can be explained as follows:

  • Pin impostato su 0 (LOW): Il pin è spento e si trova in uno stato " floating ", cioè non è collegato ad alcuna tensione specifica. In questo stato, la tensione sul pin può fluttuare e non è ben definita, a meno che non sia stabilizzata da un resistore pull-up.

Questo stato " floating " può far sì che il pin rilevi disturbi o interferenze elettriche casuali, causando un comportamento indesiderato se non viene gestito correttamente. 

  • Pin impostato su 1 (HIGH): Il pin è acceso e collegato alla massa (0 V), facendo scendere la tensione sul pin a 0 V. Questo stato è univoco e non comporta alcuna ambiguità nel rilevamento del segnale.

Quando i pin vengono utilizzati come ingressi, sono in grado di rilevare il livello di tensione applicato. Lo stato dell'ingresso è influenzato dalla presenza di resistenze pull-up, che possono contribuire a garantire una tensione costantemente alta (3,3 V) quando non viene applicata nessun'altra sorgente di tensione.

Resistenze Pull-up

La scheda consente di collegare resistenze pull-up esterne tramite i ponticelli a saldare contrassegnati da JP4 a JP7. Questi ponticelli si trovano al centro della scheda e sono collegati ai pin corrispondenti:

  • JP4 è connesso al Pin 4
  • JP5 è connesso al Pin 5
  • JP6 è connesso al Pin 6
  • JP7 è connesso al Pin 7

I ponticelli a saldare da JP7 a JP4 possono essere utilizzati per collegare resistenze pull-up integrate, che assicurano che i pin rimangano a una tensione elevata (3,3 V) quando non sono attivamente pilotati verso il basso da una sorgente esterna o dallo stato di uscita del pin. Queste resistenze pull-up hanno un valore di 10K ohm, che è un valore standard per fornire una tensione stabile senza un eccessivo assorbimento di corrente. Se non viene collegato alcun resistore al ponticello di saldatura, il pin potrebbe rimanere in uno stato flottante, causando potenzialmente un comportamento instabile. JP sta per “jumper” e se non viene collegato alcun resistore, non crea alcuna resistenza.

Per gli utenti meno esperti, è importante capire che le uscite open-drain non producono intrinsecamente una tensione elevata (3,3 V), ma consentono una connessione a terra (0 V). Le resistenze di pull-up sono necessarie per garantire che il pin rimanga ad alta tensione quando viene spento o utilizzato come ingresso. Se non viene gestita correttamente, una tensione " floating " può far sì che il pin raccolga disturbi elettrici, causando commutazioni indesiderate o l'instabilità del sistema.

Impostazione del GPIO tramite G-code personalizzato

Informazioni generali

Quella che segue è una sequenza di comandi G-code personalizzati utilizzati per controllare la scheda GPIO. Questo permette di configurare gli stati di uscita, leggere gli stati di ingresso e gestire altre impostazioni avanzate della scheda attraverso le istruzioni G-code, integrandole perfettamente con il flusso di lavoro della stampante 3D.

Controllo Pin via G-Code

Per controllare i pin di uscita della scheda GPIO, è possibile utilizzare i seguenti comandi G-code:

  1. Imposta modalità pin (Output o Input)
    M262 P<base 10> B<base 10>
    • P<0-7>: Seleziona il numero del pin da configurare (da 0 a 7).
    • B<0 or 1>: Imposta la modalità del pin.
      • 0 - configura il pin come output
      • 1 - configura il pin come ingresso.
    • Esempio: M262 P0 B0 - Configura il pin 0 come pin di output.
       
  2. Stato di scrittura su un pin di output
    M264 P<base 10> B<0 or 1>
    • P<0-7>: Seleziona il numero di pin su cui scrivere (da 0 a 7).
    • B<0 or 1>: Scrivi 0 per impostare il pin su LOW, o 1 per impostare il pin su HIGH.
    • Esempio: M264 P0 B1 -  Imposta il pin di uscita 0 su HIGH (1).
       
  3. Stato di commutazione del pin di output
    M265 P<base 10>
    • P<0-7>: Seleziona il numero di pin da commutare (da 0 a 7).
    • Questo comando inverte lo stato attuale del pin selezionato.
    • Esempio: M265 P0 - Commuta il pin 0.
       
  4. Impostazione avanzata del registro (per utenti esperti)
    M267 R<1-3> B<0-255>
    • R<1-3>: Seleziona il registro da configurare:
      • 1: Registro di Output.
      • 2: Registro delle polarità.
      • 3: Registro di configurazione.
    • B<0-255>: Imposta il valore da scrivere nel registro selezionato.
    • Esempio: M267 R3 B255 - Configura il registro di configurazione con il valore 255 (tutti i pin sono impostati come input).

Per leggere lo stato dei pin o impostare le configurazioni, utilizza i seguenti comandi G-code:

  1. Leggi lo stato del Pin
    M263 P<base 10>
    • P<0-7>: Seleziona il numero di pin da cui leggere (da 0 a 7).
    • Il valore restituito indica se il pin è HIGH (1) o LOW (0).
    • Esempio: M263 P6 - Legge lo stato del pin 6 (restituisce 32 per HIGH o 0 per LOW).
       
  2. Lettura dell'intero registro di input
    M261 A<slave device address base 10> B<number of bytes> S<style>
    • Questo comando legge l'intero registro di input, restituendo un numero in formato " style" che rappresenta gli stati di tutti i pin di input (da 0 a 7).
    • Gli stati possibili sono:
      • 1 - HEX DUMP
      • 2 - intero firmato a due byte, base 10 (int16)
      • 3 - byte senza segno, base 10 (uint8)
    • l'indirizzo del dispositivo è sempre 32
    • Esempio: M261 A32 B1 S3 - legge l'intero registro di input e lo restituisce come byte senza segno in base 10
       
  3. Leggi il registro dell'espansore IO (per utenti esperti)
    M268 R<base 10>
    • legge l'intero byte del registro dato in una sola volta
    • R<0-3>:
      • 0 - Input
      • 1 - Output
      • 2 - Polarità
      • 3 - Config
    • Esempio: M268 R3 - Legge il registro Config

Come impostare il G-code per i pin di input

Per configurare i pin di ingresso per la tua configurazione, ogni pin di ingresso viene mappato automaticamente a uno specifico file G-code che si trova sull'unità USB. Questi file devono essere memorizzati in una cartella denominata “macros” e devono seguire una rigida convenzione di denominazione: il nome del file deve essere nel formato

btn_{pin_number}.gcode

dove {pin_number} corrisponde allo specifico pin GPIO che stai utilizzando. Tutte le lettere dei nomi dei file devono essere minuscole.

Esempio:

  • se utilizzi il pin 7, il file G-code corrispondente deve essere chiamato btn_7.gcode e posizionato nella cartella “macros”.
  • Allo stesso modo, per il pin 4, il file dovrebbe essere chiamato btn_4.gcode

Il sistema supporta 8 pin di input sulla scheda GPIO e ogni pin può essere mappato in un unico file G-code in questo modo.

Quando un file G-code viene attivato tramite il pin di input corrispondente, il G-code memorizzato in quel file viene immediatamente iniettato nel processo in corso. Tieni presente che esiste un limite di dimensione per ogni file G-code, che non deve superare i 1024 byte.

Controllo avanzato degli input e attivazione di macro

Quando un pin di ingresso è configurato con M262 e impostato su 1 (modalità input), lo stato del pin viene controllato periodicamente ogni 0,5 secondi.

Se un pulsante collegato al pin viene premuto (lo stato del pin diventa LOW), questo attiva un pulsante macro. Ad esempio, un pulsante sul pin 7 può eseguire automaticamente una macro memorizzata nel file macros/btn_7.gcode su una chiavetta USB. La macro viene iniettata nella sequenza di stampa, con una dimensione massima di 1024 byte.

Memoria persistente

La configurazione dei pin e i loro stati sono memorizzati in EEPROM, assicurando che le impostazioni dei pin (modalità di output/input, polarità e stati) siano conservate anche dopo un ciclo di alimentazione.
Le modifiche apportate tramite M262, M264, M267 o qualsiasi altro G-code pertinente aggiorneranno l'EEPROM, quindi le impostazioni saranno persistenti.

Casi limite

Per i pin 0-3, che non hanno resistenze pull-up interne, la configurazione come input senza un circuito esterno aggiuntivo può risultare in uno stato logico invertito. Questo può innescare inavvertitamente l'esecuzione di macro a causa del loro stato di riposo predefinito che è LOW (0).

Puoi invertire la logica dei pin di input utilizzando il Registro di Polarità (M267 R2 B<valore>). Questa funzione è particolarmente utile per i pin che non hanno resistenze pull-up (pin 0-3), che hanno uno stato di default pari a 0 (LOW) e potrebbero attivare azioni indesiderate se lasciati non configurati.

Tutti i pin (0-7) supportano ugualmente l'inversione di polarità. Ciò significa che è possibile invertire la logica di qualsiasi pin configurato come input.

La principale differenza di comportamento tra i pin deriva dal fatto che i pin 4-7 possono utilizzare resistenze interne di pull-up, che li mantengono in uno stato HIGH (3,3 V) quando non vengono pilotati attivamente LOW. Tuttavia, queste resistenze di pull-up sono attive solo se i ponticelli corrispondenti (da JP4 a JP7) sono collegati. Se questi ponticelli non sono saldati, i pin 4-7 si comportano in modo simile ai pin 0-3, passando allo stato floating.

Quando si utilizzano i pin di input per attivare le macro, il sistema è progettato per rilevare uno stato LOW che indica un pulsante premuto. Per i pin senza resistenze pull-up attive, questo stato LOW predefinito può innescare inavvertitamente le macro, a meno che non si utilizzi l'inversione di polarità.

Avvertenze e limitazioni

Quando si configura o si scrive sui pin, il sistema emette un avviso tramite la porta seriale se c'è una mancata corrispondenza tra le operazioni previste (ad esempio, il tentativo di scrivere su un pin di input). È essenziale configurare correttamente i pin utilizzando M262 per evitare questi conflitti.

G-code personalizzato in Prusa Slicer

Inserisci il codice nei punti esatti in cui è necessario, dopo/prima di un altro particolare comando G-code. Nella schermata di esempio, il G-code personalizzato che controlla la scheda GPIO è impostato tramite PrusaSlicer e viene posizionato dopo ogni cambio di layer. Tuttavia, può essere posizionato in qualsiasi punto. 

Esempi

Esempio di connessione del modulo GPIO al Controller Addon (Filtro ventola e LED)

Nell'immagine allegata qui sotto, possiamo vedere il collegamento tra il modulo GPIO e il controller aggiuntivo responsabile del controllo del filtro della ventola e del LED dell'Original Prusa Enclosure. 

Attualmente stiamo sviluppando una soluzione con cavo jack-molex per il collegamento tra la scheda GPIO e la scheda EnclosureBasic. In questo modo sarà possibile gestire i controlli dell'enclosure in modo semplice e intuitivo.

Immagine di un esempio di configurazione per l'enclosure

Questo articolo è stato utile?

Commenti

Hai ancora delle domande?

Hai ancora delle domande?

Se hai una domanda su qualcosa che non è trattato qui, dai un'occhiata alle nostre risorse aggiuntive.
E se questo non dovesse funzionare, è possibile inviare una richiesta a [email protected] o tramite il pulsante qui sotto.

Contattaci