Il modo più semplice ed economico per ottenere output digitali da un computer al mondo reale


8

Ho bisogno di una serie di uscite digitali per collegare il mio computer al mondo reale, tuttavia sembra che questo lavoro non sia facile come speravo.

Ho esaminato una serie di metodi diversi, che vanno da schede I / O digitali dedicate, micro controller con interfacce USB, porte seriali, porte parallele, ecc. Tuttavia, tutte le soluzioni sembrano essere troppo costose, troppo impegnative o la tecnologia è troppo datata.

Spero di avere 64+ uscite digitali in esecuzione a circa 1 kHz ciascuna, controllabili singolarmente. Finora l'idea migliore che mi viene in mente è di attaccare le uscite di una porta seriale a un registro a scorrimento da seriale a parallelo a 8 bit e inviare caratteri attraverso la connessione seriale ogni volta che desidero cambiare e produrre (corri da una porta USB a una porta seriale adattatore). Non l'ho ancora provato, quindi non so se funzionerà.

Esiste un altro metodo rapido e sporco per ottenere un numero abbastanza elevato di uscite digitali economiche dal computer di cui posso controllare facilmente con comandi C ++ di base?



Hai fatto un po 'di matematica? La semplice RS232 non USB di solito ha una velocità massima di 115200 bps, che è di circa 10 KB. Diciamo che ogni canale ha bisogno di solo 1 byte (di cui dubito). Si desidera inviare 64 x 1000 byte al secondo, che è di circa 64 KB. Molto di più della tua velocità seriale. Ci sono alcuni cavi seriali USB ad alta velocità con 921600bps e, sebbene teoricamente possibile, dubito che ciò sia utile poiché è al limite e, come ho detto, 1 byte sarà quasi sufficiente e il microcontrollore difficilmente avrà tempo per nient'altro. Dovrai o ridurre le tue richieste o preparare il tuo portafoglio.
avra

3
Forse dovresti rileggere i tuoi commenti per evidenti errori prima di colpire qualcuno ... Bit di output dei pin GPOI non byte. Ciò significa 64 kiloBIT / s, ben al di sotto dei 115.2kbs max
Faken

Risposte:


7

Sembra che tu abbia intenzione di far lampeggiare alcune luci di Natale. :-)

Qualcosa non va nell'uso di un arduino o simile? Sarebbe abbastanza facile espandere il numero di porte IO se il numero di porte indicato sul mega 1280/2560 non è sufficiente. Puoi guidarlo tramite terminale seriale / USB. È possibile utilizzare i registri a scorrimento sui pin di uscita di Arduino oppure utilizzare l'espansore della porta i2c e passare attraverso quello.

L'uso di componenti standard come quello ti darà il minor tempo di prototipazione.

Nota, la mia strada potrebbe non essere la più economica. Ma è efficace e ti farà effettivamente girare rapidamente.


1
Non proprio con le luci lampeggianti, sto cercando di controllare 32 motori passo-passo su un prototipo di dispositivo di fissaggio universale automatizzato, tranne per il fatto che non ho alcun finanziamento ... o conoscenza dell'elettronica di sorta. Forse ho licenziato il microcontrollore troppo rapidamente, ho avuto buone risorse passo-passo su come ottenere da zero da zero con esempi pratici? (e intendo da zero, ho una base di conoscenza piuttosto strana che è troppo teorica e non abbastanza pratica, puoi presumere che io non conosca assolutamente nulla ... mi sembra comunque quasi sempre,
eh

1
Il controllo dei motori passo-passo richiederà un po 'di più. Non sarai in grado di guidarli direttamente dai pin di uscita del microcontrollore. Dovrai usare un po 'di "colla" elettronica tra il perno e il motore in modo da non friggere il micro. Come qualsiasi cosa, è meglio iniziare in piccolo e passare a esempi più avanzati. Uno degli appassionati più avidi che ho visto in giro è tronixstuff.wordpress.com ha delle buone cose per principianti passo dopo passo. So che il ragazzo che lo gestisce frequenta anche questo scambio di stack.
Rob,

1
Sì, ho trovato un driver del motore passo-passo molto bello da usare tra i segnali di controllo e il motore (usa solo 2 ingressi, passo e direzione). Guarderò attraverso quel tutorial che hai collegato, grazie. A proposito, per essere sicuro, voglio che sia il mio computer a inviare i comandi in tempo reale tramite un programma c ++ al micro controller per spostare i motori. Questo è possibile o molto facile da fare con questo micro controller?
Falso il

1
Ovviamente. Il microcontrollore funge da buffer tra il computer e la scheda del driver del motore passo-passo. Può interpretare i comandi inviati e agire su di essi, nonché fornire feedback al PC, se necessario. L'altro vantaggio dell'utilizzo di qualcosa di un po 'convenzionale è che puoi ottenere un sacco di supporto / consigli dalla comunità, è sempre probabile che qualcuno abbia fatto qualcosa di simile. Quindi è abbastanza utile in sé. Il micro offre un'interfaccia davvero economica tra il PC e le schede del driver.
Rob,

Adafruit è una bella scheda che può essere utilizzata per guidare 16 servi e possono essere concatenati. Sarebbe abbastanza facile scrivere del codice Arduino che legge i dati da un PC e poi li invia alla scheda del servo driver. adafruit.com/products/815
Eric Gunnerson,

3

Il registro a scorrimento da seriale a parallelo funzionerà. Utilizzando la porta SPI non avrai problemi con la frequenza di aggiornamento 1KHz. IIRC su un ATmega328 con un cristallo da 8 MHz (o superiore) dovresti essere in grado di ottenere 1Mbit al secondo. Anche molti altri microcontrollori funzioneranno.

Un'altra opzione è quella di utilizzare più microcontrollori. Ad esempio, l'uso di un ATmega328 (che costa circa $ 5 con i passivi) ti darebbe 18 linee mantenendo libere le linee TXD e RXD. Parallelamente le linee RXD e quindi tutti gli uC riceveranno le stesse stringhe di comando. Dovresti analizzare le stringhe di comando su uC. Utilizzare un cavo FTDI per accedere a USB. Aggiungi un bootloader Arduino all'UC e potresti usare gli strumenti Arduino.

La conversione da seriale a parallelo è più semplice. Se l'applicazione può utilizzare uscite open-drain, è possibile utilizzare un driver LED a 16 canali. Ciò significherebbe aggiungere quattro chip.


1

L'opzione più semplice che ho incontrato sembra essere IOIO-OTG . È un dispositivo USB OTG esterno basato su controller PIC, progettato per Android, ma utilizzabile con un PC, tramite Eclipse e Android Development Toolkit. Ha 46 pin GPIO 3.3v , oltre a un mucchio di altre cose utili. Non ha i 64 pin necessari per il tuo progetto, ma potresti semplicemente usare alcuni registri a scorrimento da seriale a parallelo, come menzionato da jluciani (o utilizzare invece i controller del motore passo-passo e utilizzare meno pin).

C'è anche questa scheda IO USB basata su PIC , che fa cose simili, ma ha meno pin.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.