Continuano gli articoli sulla gestione della connessione seriale su Arduino. Oggi vediamo gli adattatori RS232 e USB TTL.
Chi ci ha seguito sin qui, provando i nostri programmi, avrà sicuramente notato che collegare due schede Arduino attraverso tre semplici cavetti elettrici non garantisce il massimo risultato, sia per una pura questione meccanica (i cavetti tendono a sfilarsi o a fare contatto o ad agganciarsi ovunque) sia per una questione squisitamente elettrica (non esiste schermatura dalle interferenze elettomaghetiche, il segnale si degrada con l’aumentare della lunghezza dei connettori).
Fortunatamente il protocollo seriale può venire implementato in modi più robusti e sicuri, ed anche più comodi, utilizzando un cavo null-modem con standard RS-232.
Lo standard RS-232 definisce un protocollo della linea di trasmissione: in particolare, viene specificato che er incrementare l’immunità ai disturbi elettrici l’interfaccia elettrica ha una soglia di commutazione di ±3 V, cioè per passare da uno stato ad un altro non è sufficiente arrivare allo zero, ma dovrà essere superata la soglia dei 3 V di segno opposto. Lo standard EIA RS-232 prevede nei circuiti dati (p.e. TD e RD) che il segnale di tensione positivo rappresenta lo 0 logico (space) mentre quello negativo un 1 (mark). È quindi una codifica a logica negativa, ossia rovesciata rispetto al comune pensare.
Grazie a questo standard, il livello LOW è caraterizzato da tensioni che vanno da +3V a +25V, mentgre il livello HIGH è garantito per tensioni che vanno dai -3V ai -25V. I valori più utilizati sono quelli intorno ai ±12/15V. Ma come possiamo raggiungere tali tensioni con il nostro piccolo Arduino?
Il collegamento null-modem
Il circuito di adattamento utilizza un circuito chiamato “pompa di carica“, realizzato attraverso condensatori che garantiscoo gli opportuni livelli di tensione all’integrato MAX232, il quale si occupa di inviare e ricevere i deboli segnali di Arduino potenziandoli e rendendoli meno soggetti ad interferenza.
Nell’immagine abbiamo rappresentato i collegamenti necessari per consentire il colloquio seriale tra due schede Arduino attraverso un cavo Null-Modem connesso ad un adattatore basato su circuito integrato MAX232. Si tratta sostanzialmente di ripetere i collegamenti invertendo i PIN TX ed RX, condividendo il segnale di GND.
Ma come colleghiamo il nostro adattatore?
L’adattatore seriale MAX232
Il collegamento è estremamente semplice: è sufficiente collegare i pin Vcc ai 5V, GND alla massa ed i connettori RXD e TXD ai pin 0 ed 1 come abbiamo già visto negli articoli precedenti. È altresì possibile utilizzare una connessione attraverso la SoftwareSerial, lasciano i pin 0 ed 1 liberi per altre attività di monitoraggio e controllo.
Ovviamente occorrono due elementi adattatori, uno per ciascuna scheda Arduino. Il pin di trassmissione TX di ciascun arduino va collegato al pin di ricezione della scheda RS-232, mentre il pin di ricezione RX di Arduino va collegato al pin di trasmissione TX dell’adattatore. I due adattatori andranno poi collegati attraverso un cavo null-modem.
Il collegamento così ottenuto garantisce, da specifica, una portata massima di 15 metri. Un gran passo avanti rispetto ai pochi centimetri del collegamento su fili volanti. Resta però una ulteriore limitazione: la pulizia del segnale è influenzata dalla sua velocità di trasmissione, che in questa configurazione è limitata a 115.200 bps.
Possiamo fare di meglio?
L’adattatore seriale FT232RL USB
Il modulo convertitore da USB a TTL è un dispositivo utilizzato in varie applicazioni. Dà la possibilità di utilizzare la porta USB e stabilire il tipo di comunicazione UART (Universal Asynchronous Receiver/Transmitter) con altri dispositivi con questa capacità. Il modulo è utile anche per la comunicazione tra PC e microcontrollori, e si basa sul chip CP2102 che consente la comunicazione da USB a TTL (UART).
Il controller della funzione Universal Serial Bus nel CP2102 è un dispositivo a piena velocità conforme a USB 2.0 con ricetrasmettitore integrato. Il controller USB gestisce tutti i trasferimenti di dati tra l’USB e l’UART, nonché le richieste di comando generate dal controller host USB e i comandi per il controllo della funzione dell’UART.
Questo convertitore seriale da USB a TTL è ideale per molti usi, tra cui:
- Programmazione ARM, microprocessori AVR e altri
- Lavorare con hardware informatico come router e switch
- Comunicazione seriale con molti dispositivi come i dispositivi GPS
- Terminali seriali su dispositivi come il Raspberry Pi
Esempi di applicazioni
- Aggiornamento di dispositivi legacy RS-232 a USB
- Cavo interfaccia USB PDA
- Adattatore seriale da USB a RS-232
Con questo sistema sarà possibile superrae le limitazioni della comunicazione a 115.200 bps. Compliant con le specifiche USB 2.0, che consentono 12Mbps, questa schedina garantisce “solo” 1Mbps, comunque 10 volte più della versione su MAX232.
Considerazioni finali
In questo articolo abbiamo analizzato le caratteristiche elettriche legate alla trasmissione dati con protocollo RS-232, attraverso diversi tool di rinforzo del segnale, per garantire ad Arduino strumenti di gestione delle informazioni tramite un sistema oramai noto e ben collaudato. Ma spesso 15 metri di cavo non sono la via migliore per trasferire dati, e talvolta esistono barriere architettoniche che impediscono di posare lunghi cavi tra più devices.
In quei casi, il protocollo seriale potrà sfruttare una ulteriore escalation tecnologica, attraverso un framework legato al Bluetooth.
Se l’argomento vi interessa, non perdetevi l’articolo del prossimo venerdì!
Link utili
Le puntate precedenti:
- Comunicazione seriale tra due schede Arduino – #01
- Serial Arduino – Ricezione e trasmissione dati – #02
- Hardware vs. Software serial – The Arduino choices
Join our groups on Telegram…