Condivido la tua riluttanza a mettere un'intera CPU per sensore, tuttavia ...
RS-485 per comunicazioni sensore / uscita sensibili ai costi
Posso consigliare quanto segue, che è il modo in cui ora faccio questi tipi di dispositivi di sensore / output:
- CPU locale molto piccola simile ad Arduino per posizione del sensore
- Driver RS-485
- PSU locale molto piccolo a modalità commutata
- Potenza centralizzata
- Collegamento tramite CAT-5 o cavo di alimentazione + coppia dati
Ciò significa che puoi mantenere tutta l'elettronica per sensore molto piccola, il che semplifica tutto (meno rumore, meno errori). Il software per parlare al sensore è dedicato: nessun multielaborazione o interleaving di funzioni, ha un'intera CPU. Se c'è un solo sensore metto l'adattatore RS-485 sul computer ricevente; più di solito ho un dispositivo Atmega con RS-485 ed ethernet e converto da e verso pacchetti UDP. Quindi il server, o i server, così facili da rendere ridondanti, possono svolgere il lavoro ovunque sia conveniente.
RS-485 è economico, semplice e facile da eseguire il debug se segui alcune semplici regole. Funziona su brevi o lunghe distanze. Scegli la tua velocità e imposta un protocollo semplice (facile per gli ingegneri del software) e funzionerà per sempre. Lo eseguo spesso a 9600 o anche più lentamente. Se disponi di LED adatti, puoi capire le rotture senza attrezzi. È sufficientemente semplice ho seguito un corso di "informatica fisica" in una scuola d'arte di New York per avviare una rete in un solo pomeriggio, basato su un formato molto simile a syslog (RFC 3164) più un CRC-32.
Don non usare radio Mi sono tenuto lontano da tutto ciò che è basato sulla radio tranne dove assolutamente impossibile eseguire cavi. Non si sa quando arriverà qualche macchina di interferenza: troppo spesso è qualcosa come i walkie-talkie della stampa o della polizia all'inaugurazione del mio evento.
Don non usare ethernet Usavo ethernet con POE, ma ho cambiato dopo aver dovuto fare molti ambienti robusti (esterni, subacquei, vicino a grandi macchine industriali). Non ci sono interruttori da mantenere, nessuna tensione POE. E nessuna corsa agli armamenti di 10BaseT, 100BaseT, 1000BaseT.
DNon usare bus di tipo board Una volta avevo un sistema (costruito da altri) che era SPI a 2 metri: funzionava quasi ma quando dovevamo spostarlo a 3 metri ... non funzionava mai. Alla fine l'ho sostituito con RS-485 come descritto qui.
CAN è fantastico ma risolve un problema difficile e quindi c'è molta complessità. Seriale e RS-485 sono assolutamente onnipresenti e questo ti farà risparmiare tempo ancora e ancora.
Le regole semplici
- Half-duplex a due fili (mai a quattro fili)
- A) Un master (PC) molti slave (sensori) oppure b) Un altoparlante e possibilmente molti ascoltatori
- Se più di una dozzina di schiavi, pensa a a) collisioni eb) caricamento del bus
- Potenza dal centro
- Nessuna connessione locale all'estremità del sensore
- Se ne hai bisogno, utilizza optoisolatori o relè
- Qualunque sia il tuo protocollo, deve avere un checksum
- Usalo come UDP e non come TCP
- Eseguilo il più lentamente possibile
- A 9600 probabilmente non avrai mai problemi
- Oltre i 20 metri, prestare attenzione alla terminazione
- Se sei fuori o sott'acqua o hai un grande potere nelle vicinanze, va comunque bene ma fai di più i compiti
- Se hai bisogno di velocità (diciamo 1 Mbit / sec), va comunque bene ma fai più compiti a casa
- Se hai bisogno di isolamento, va comunque bene ma fai più compiti a casa
- Se hai bisogno di centinaia di nodi, va comunque bene ma fai più compiti a casa
Costi
I costi sono bassi, inferiori a $ 10,00 / unità, la maggior parte dipende dalla custodia e dai connettori. Di seguito trovi uno sconto di 10 prezzi su Digikey o Ebay.
Per una scheda una tantum o sperimentale utilizzo schede dalla Cina:
- Convertitori da TTL a RS-485 da Ebay (£ 0,90)
- Arduino "Pro Micro" o simile (con pulsante di ripristino!) (£ 1,80)
Per le schede dedicate preferisco chip individuali:
- Chip 75176-pinout £ 0,70 + socket se lo spazio
- ATTiny22 o simile £ 0,50-1,50
Il 75176-pinout è uno standard per i driver RS-485, il che significa che puoi utilizzare driver esotici se necessario (ad esempio con una protezione ESD più elevata).
In entrambi i casi, alimento 12VDC o 24VDC per l'alimentazione insieme a un doppino intrecciato per il segnale. Su CAT-5 funziona bene, o alimentazione + cavo dati. Su ogni unità un alimentatore Recom R-78E5.0-0.5 (£ 1,99 / unità). Questi dispositivi sono fantastici. Mettere un minuscolo alimentatore accanto a ciascuna unità ha fatto scomparire tutti i problemi di alimentazione e rumore.
A prova di futuro
Un ulteriore vantaggio di questo approccio è che pone tutti gli importanti problemi di compatibilità nel protocollo sulla linea RS-485. Se in futuro non è possibile ottenere lo stesso sensore o CPU, ottenerne uno diverso e ricreare. Se usi chip driver 75176-pinout sarai sempre in grado di ottenere sostituzioni.
E se hai bisogno di interfacciarti con qualcosa che vuoi isolato, è facile ottenere un driver isolato come quello di Digilent (anche se molto più costoso, circa £ 17,00). Ma senza alcuna riprogettazione del sistema di base, né ricodifica.
Riferimenti
Per una lettura corretta dell'RS-485, inizia con questi e segui i riferimenti.
- Texas Instruments Guida alla progettazione RS-485 PDF
- Texas Instruments AN 1057 Dieci modi per interfacce RS-485 antiproiettile
PDF
- Bob Perrin, "The Art and Science of RS-485", Circuit Cellar, luglio 1999. PDF
Specifiche
- "Half-duplex a due fili" in realtà significa tre fili: un doppino intrecciato per il segnale e una terra, che spesso è la terra dell'alimentazione CC se i sistemi sono alimentati dalla stessa potenza.
- Vedrai un'enorme disputa sul fatto che tu abbia bisogno di uno scudo, ma Perrin dice che non lo fai a meno che tu non abbia circostanze esotiche
- In half-duplex, l'uscita che il driver è abilitato durante la trasmissione.
- Su un PC in genere abiliti il driver con RTS dell'uscita RS-232. Il kernel Linux ha una chiamata ioctl (8) per abilitarlo su linee seriali
TIOCSRS485
doc
- Su un microcontrollore utilizzi una linea IO per Driver-Enable
DE
. Puoi sempre ascoltare (collega Receive-Enable / RE
a terra) o più comunemente unirti a DE
e / RE
e guidare dallo stesso pin IO . Si potrebbe plausibilmente utilizzare un pin IO e guidare / RE
ma non l'ho mai visto.
- Ci sono moltissime varianti di chip driver, ma scegline uno in un pacchetto 75176 poiché è il più comune
- È una buona idea usare pacchetti DIL a 8 pin e una presa per il driver in modo che quando qualcuno lo collega in modo errato puoi sostituire il driver bruciato; inoltre è possibile utilizzare chip driver più robusti, se lo si desidera, o versioni a bassa EMI con velocità di rotazione inferiori.