[PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Sezione dedicata a Linuxcnc
Rispondi
bobwolf
Member
Member
Messaggi: 326
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

[PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da bobwolf » lunedì 12 gennaio 2026, 21:10

Ciao a tutti! Vorrei condividere con voi un progetto a cui sto lavorando da luglio: si chiama io_decoder. Nasce dall'esigenza di avere tantissimi I/O per pannelli operatore (HMI), volantini e controlli secondari, senza sacrificare i preziosi pin real-time delle schede FPGA o impazzire con configurazioni HAL complesse.

Cos'è? È un sistema modulare su USB (High Speed) che può gestire fino a 128 pin digitali in input e 128 in output, 4 encoder e ingressi/uscite analogiche.

Perché è diverso dai soliti Arduino?

Ha un driver HAL dedicato che gestisce tutto nativamente: se stacchi l'USB e la riattacchi, il sistema si riconnette da solo (Hot-Plug) senza bloccare LinuxCNC.

Gestione encoder 'a delta' (127 passi ogni 20ms): impossibile perdere scatti anche ruotando velocemente.

Emulazione tastiera integrata per mappare i pin fisici direttamente su hotkeys.

Ho appena prodotto i primi prototipi (con qualche 'peccato di gioventù' che sto correggendo nella v2 della PCB proprio ora). L'idea è di proporre in futuro uno Starter Kit a 99€ composto da Base + 16 I/O (8+8) per chi vuole un sistema robusto e già assemblato (uso JLCPCB per gli SMD, il resto lo saldo io).

Qui potete vedere un breve video del prototipo in azione (test di hot-plug e reattività): https://www.youtube.com/watch?v=BH9S-6svkEE E qui la documentazione per i più curiosi: https://bobwolfrst.github.io/io_decoder-linuxCNC/

Cosa ne pensate? Se qualcuno fosse interessato, mi piacerebbe fare un primo piccolo batch di produzione dedicato alla nostra community per testare la v2 insieme!

Nota per i moderatori: Spero che la sezione sia corretta dato il carattere tecnico del progetto; se ritenete più opportuno il Mercatino, vi prego di spostare il thread. Grazie!
ciao

Roberto

"è più immorale il sesso o la guerra?"

umbez
Member
Member
Messaggi: 517
Iscritto il: martedì 14 novembre 2006, 20:59
Località: Cologno Monzese

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da umbez » lunedì 12 gennaio 2026, 21:39

Non ho capito come fai a non generare un interrupt hardware quando attacchi e stacchi l'usb poiché è gestito dal kernel che genera l'evento su udev. Il jitter seppur piccolo ci deve essere
U.

bobwolf
Member
Member
Messaggi: 326
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da bobwolf » lunedì 12 gennaio 2026, 22:03

se la usb si disconnette fisicamente la riconnessione può essere fatta al volo senza riavviare linuxcnc ed il sistema non ne soffre. se linux butta fuori la connessione dal sistema i problemi sono molto più gravi. comunque ci sono dei piccoli meccanismi per la riconnessione automatica.
il jitter esiste, ma essendo un sistema pensato per fare da interfaccia uomo/macchina non ce ne accorgiamo.
ciao

Roberto

"è più immorale il sesso o la guerra?"

ross
Member
Member
Messaggi: 356
Iscritto il: mercoledì 3 agosto 2011, 23:16
Località: Macerata (MC)

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da ross » mercoledì 14 gennaio 2026, 19:28

Tanti anni fa ho implementato il metodo per avere parecchi I/O senza USB o cose strane, funziona perfettamente e in realtime qui trovi tutta la sperimentazione.
Nel mio caso specifico serve, oltre ad avere diversi I/O, a leggere due segnali analogici convertiti in digitale a 10bit tramite un microcontrollore.
Non ho mai pensato di realizzare un kit da vendere in quanto la filosofia di Linuxcnc è opensource e tale mi piace che rimane, disponibile a chiunque.

Ross

bobwolf
Member
Member
Messaggi: 326
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da bobwolf » mercoledì 14 gennaio 2026, 21:07

Grazie Ross per il commento, ma credo che stiamo confrontando approcci molto diversi, quasi 'pere e mele'.

La soluzione che proponi (selettori binari/Gray) è un classico espediente per risparmiare pin quando se ne hanno pochi a disposizione. Tuttavia, richiede comunque un'elettronica (o circuiteria a diodi) esterna per trasformare i singoli input in codice binario. È un approccio 'affamato di hardware' e rigido: se devi cablare un pannello con 40-50 funzioni, il fascio di cavi e la logica dei diodi diventano un incubo di manutenzione.

La filosofia dell'io_decoder è l'opposto: abbondanza digitale. Con 128 pin a disposizione in input e 128 in output, come massima espansione, non serve più alcuna codifica esterna. Porti un filo diretto per ogni tasto o posizione del selettore e gestisci tutto in HAL. Il risparmio di tempo nel cablaggio e la flessibilità software compensano ampiamente il costo della scheda. Inoltre di base ha già 4 encoder, 3 ADC@5Vdc e 2 DAC@5Vdc(dal pwm)

Riguardo all'Open Source: il progetto è pienamente nello spirito della community. Il driver HAL e la configurazione sono aperti e liberi; chiunque può studiare come il sistema dialoga con LinuxCNC. La scheda hardware è un modulo che offro già pronto, collaudato e assemblato per garantire affidabilità in ambiente industriale (dove un diodo saldato male o un falso contatto in una matrice possono bloccare una macchina per ore).

In sintesi: io_decoder nasce per semplificare la vita a chi vuole un pannello professionale senza dover diventare un esperto di logica binaria cablata.
ciao

Roberto

"è più immorale il sesso o la guerra?"

ross
Member
Member
Messaggi: 356
Iscritto il: mercoledì 3 agosto 2011, 23:16
Località: Macerata (MC)

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da ross » mercoledì 14 gennaio 2026, 22:22

Vedo che non hai capito il metodo e la semplicità del sistema, non ci sono selettori binari o a codifica gray o cose particolari.
Ti consiglio di leggere il contenuto dei files che avevo allegato nei vecchi post, all'interno trovi il metodo di trasferimento dei bit e quindi degli I/O di qualsiasi tipo, per farla breve puoi usare degli shift register comuni sia a 8 bit che a 16bit (se trovi i microcontrollori complessi) e inserendoli a catena puoi creare tutti gli I/O che vuoi.
Semplice rapido ed efficace, è una soluzione già collaudata da anni e se devi aggiungere altri I/O è sufficiente aggiungere alla catena del segnale altri shift register.
Riguardo ai fili, è normale connettere un pin per ogni tasto o singolo segnale, nei controlli industriali se ti è capitato di vedere come sono fatti sono così o al limite a matrice (più di 27 anni fa progettavo le tastiere HMI con una miriade di tasti e una connessione a matrice per semplificare i fili di connessione).
Riguardo alla connessione usb occorre fare attenzione, la chiamata ad interrupt che fa la scheda madre del PC non è a intervalli regolari causado spesso problemi con Linuxcnc, nella wiki è spiegato bene.

Buon lavoro.
Ross

Immo
Member
Member
Messaggi: 296
Iscritto il: domenica 2 maggio 2021, 12:29

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da Immo » mercoledì 14 gennaio 2026, 23:34

Bobwolf mi piace come lo hai fatto, non so se lo farò, non penso, non ne ho bisogno ma sono convinto che molti ne vedranno l' utilità e l'applicazione, unico neo , non da poco l'assenza di fotoacoppiatori che in ambiente industriale sono la norma

bobwolf
Member
Member
Messaggi: 326
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da bobwolf » giovedì 15 gennaio 2026, 21:33

ross ha scritto:
mercoledì 14 gennaio 2026, 22:22
per farla breve puoi usare degli shift register comuni sia a 8 bit che a 16bit (se trovi i microcontrollori complessi) e inserendoli a catena puoi creare tutti gli I/O che vuoi.
e come li colleghi a linuxcnc? quanti ne puoi mettere? che frequenza di aggiornamento hanno le uscite? e gli ingressi?
ross ha scritto:
mercoledì 14 gennaio 2026, 22:22
Riguardo alla connessione usb occorre fare attenzione, la chiamata ad interrupt che fa la scheda madre del PC non è a intervalli regolari causado spesso problemi con Linuxcnc, nella wiki è spiegato bene.
infatti il sistema che ho pensato non è per il realtime (azionamenti e traiettorie varie), ma per creare tutti gli i/o che servono per creare un pannello operatore; al massimo per comandare un cambio utensili o azionare attuatori pneumatici apertura sportelli o i vari refrigeranti/pompe/soffiatori.
se una spia o un pulsante cambiassero di stato 20/40ms dopo che il comando è passato te ne accorgeresti?
il componente gira con un ciclo non bloccante del realtime (servo thread) ma praticamente è in user space.
Immo ha scritto:
mercoledì 14 gennaio 2026, 23:34
unico neo , non da poco l'assenza di fotoacoppiatori che in ambiente industriale sono la norma
per mantenere il più compatto ed economico possibile ho deciso di non inserire le protezioni degli i/o.
il chip che pilota le uscite può fornire 100mA per le uscite singole; un fotoaccoppiatore per poter fornire al massimo 50mA dal suo transistor, deve ricevere una corrente nel diodo che lo eccita quasi pari a quella che deve erogare. un cane molto caldo, quasi a bollore, che si morde la coda. :D
gli ingressi funzionano su contatti puliti, con il riferimento di tensione fornito dalla scheda dell'espansione.

per togliere i dubbi sulla reattività del sistema con USB, sto preparando un video dove un encoder pilota uno stepper in tempo reale passando per io_decoder. Se ci fosse il jitter o la latenza, il motore graccherebbe o perderebbe passi. :mrgreen:
ciao

Roberto

"è più immorale il sesso o la guerra?"

Avatar utente
Fiveaxis
God
God
Messaggi: 6219
Iscritto il: sabato 15 gennaio 2011, 12:08
Località: Monza e Brianza

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da Fiveaxis » giovedì 15 gennaio 2026, 22:08

@ bobwolf
Temo che in questo forum gli estimatori di LCNC siano troppo pochi pochi e, quei pochi, si arrangiano molto bene.

Perchè non provi a pubblicare il tuo progetto con relativa proposta economica sul forum di LCNC? Lì TUTTI gli utenti sono appassionati di tale sistema: sarebbe il posto giusto dove pubblicizzare il tuo progetto! Non trovi? :wink:
La macchina conta...ma la differenza la fa il "manico"!

ross
Member
Member
Messaggi: 356
Iscritto il: mercoledì 3 agosto 2011, 23:16
Località: Macerata (MC)

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da ross » giovedì 15 gennaio 2026, 22:17

Il sistema con gli shift register e microcontrollore che ho realizzato tanti anni fa usa solo 4 pin della porta parallela, la lettura e scrittura avviene in real time, ho inserito un componente hal che ho scritto nel base thread e tutto ciò che è connesso in real time non è bloccante, se disponi di un oscilloscopio puoi guardare la forma d'onda del segnale step per capire come lavora il real time.
La quantità di I/O che puoi avere a disposizione è configurabile nel file componente hal e va di pari passo alla quantità di shift register monti, tecnicamente ha limiti solo in relazione alla frequenza della cpu e alla latenza in quanto è un treno di bit, nella pratica tanti ingressi e uscite per un pannello operatore non servono, in ogni caso funziona a multipli di 8 che sono gli ingressi e le uscite degli shift register collegati a catena (74HC596, 74HC597, 74HC299 per esempio).
Trovi tutto già fatto e collaudato nel mio post a cui ti ho rimandato e nei successivi, praticamente è pronto all'uso.
Avevo trovato anni fa il progetto in rete di I/O espander fatto proprio con questo sistema, usando solo gli shift register, io l'ho ampliato per sfruttare l'ADC e il DAC del microcontrollore.
Adattarlo per la connessione usb come hai fatto tu secondo me non ha senso, è troppo critico con gli interrupt della scheda madre e impatta creando rogne con la latenza (ripeto, nella wiki c'è scritto tutto) ma adattarlo su una PCie invece inizia ad avere senso e ci si potrebbe fare molte cose utili/interessanti.

Ross

bobwolf
Member
Member
Messaggi: 326
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da bobwolf » sabato 17 gennaio 2026, 17:10

Aggiorno il thread con un nuovo test, alzando un po' l'asticella.

Nonostante il sistema sia nato per gestire HMI e I/O secondari (dove la latenza è un fattore relativo), ho voluto testare la reattività del componente HAL spingendolo sull'inseguimento asse collegato in tempo reale tramite encoder. Il motore comandato da io_decoder dovrebbe essere un 100 passi giro pilotato full-step. dato che la cadenza di comunicazione hal/usb è di 20ms non ho potuto spingere il motore a più di 25 passi al secondo. nella parte finale del video con l'encoder comando l'asse della mia cnc. i motori cantano in maniera costante senza incertezze

Qui il video del test: https://youtube.com/shorts/VOcE-JHYLC4

Come si può vedere, la sincronia tra volantino e stepper è fluida e priva di ritardi percepibili. Questo conferma che l'ottimizzazione del buffer nel componente HAL permette di andare ben oltre i semplici pulsanti di start/stop, garantendo una precisione che spesso manca anche a sistemi cablati male.

non voglio fare la parte del venditore che cerca di far vedere che il suo prodotto è il migliore.
voglio far capire al mondo di linuxcnc che la USB non è il MALE se usata con criterio ed in applicazioni fuori dall'hard-realtime che serve alle traiettorie della macchina.

vorrei avere altri pareri dagli utenti
ciao

Roberto

"è più immorale il sesso o la guerra?"

bobwolf
Member
Member
Messaggi: 326
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da bobwolf » giovedì 22 gennaio 2026, 10:56

ciao
chattando in altri forum ho visto che molti sono entusiasti ma dubbiosi.

sto creando un firmware di valutazione/demo da inserire su un arduino UNO
in questo modo è possibile testare con mano quello che fa questo componente
e casomai dirmi se ci sono problemi che io non ho riscontrato
penso di farcela per questo fine settimana
metterò un messaggio in questo post per avvisare chi è interessato
ciao

Roberto

"è più immorale il sesso o la guerra?"

bobwolf
Member
Member
Messaggi: 326
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: [PROGETTO] IO_decoder: Sistema I/O modulare USB ad alta densità per LinuxCNC

Messaggio da bobwolf » lunedì 26 gennaio 2026, 22:28

Ciao a tutti,

Come accennato nei giorni scorsi, ho finalmente rilasciato la versione v1.0-eval di io_decoder, il progetto nato per integrare pannelli operatore e MPG via USB su LinuxCNC eliminando i classici problemi di latenza.

Il pacchetto include tutto il necessario per i test: il driver HAL, il firmware per Arduino Uno e la documentazione tecnica.

Cosa potete testare con questa versione:

Driver HAL: Il motore che mette in comunicazione il vostro hardware con LinuxCNC.

Firmware Arduino: Pronto da caricare per trasformare una Uno in un'interfaccia ad alte prestazioni.

Documentazione: Schemi di collegamento e configurazione HAL pronti all'uso.

Trovate tutto il materiale (guida rapida, download e schemi) sulla pagina del progetto: Pagina Ufficiale (Italiano): https://bobwolfrst.github.io/io_decoder ... mo_mode.it

Link Rapidi:

Download Diretto (.zip): https://github.com/bobwolfrst/io_decode ... val-v1.zip

Video Demo:
https://youtu.be/7ukBpUnS7oU
Guarda il test in tempo reale su YouTube (nel video si vede la risposta istantanea dei pin HAL alla pressione dei tasti fisici).

Sarei davvero felice di ricevere i vostri feedback tecnici, specialmente riguardo alla semplicità di installazione e alla risposta dei comandi sulle vostre macchine. L'obiettivo è dimostrare che, se gestita bene, l'interfaccia USB può essere una soluzione validissima anche per l'HMI in tempo reale.
ciao

Roberto

"è più immorale il sesso o la guerra?"

Rispondi

Torna a “Linuxcnc”