Collegarsi ad una linea
RS-232
|
Trasmettere dati su RS-232
Dal punto di vista dell' hardware il collegamento del microcontroller con
una linea RS-232 riguarda essenzialmente la diversa tensione dei
segnali. La struttura dello standard prevede driver di linea che comportano una "inversione"
del segnale logico e una maggiore tensione, che ha uno swing tra un valore
positivo ed uno negativo rispetto alla massa.
Livello
logico |
TTL |
RS232 |
0 |
0V |
+3/-25V |
1 |
5V |
-3/-25V |
Sulla linea RS-232 , per i PC, la tensione varia tra ±12V, tensioni
fornite dagli alimentatori AT/ATX. Nei notebook è
quanto mai probabile una variazione di tensione minore.
Ci occorre una interfaccia che effettui questo adattamento ed esistono
numerose soluzioni.
Ma prima vediamo il connettore: facendo riferimento al PC, il collegamento
alla linea seriale avviene attraverso un connettore DB9 maschio. La periferica
avrà un connettore DB-9 femmina. In questo caso il cavo di collegamento che
porta alle estremità connettori DB femmina -maschio sarà diretto punto a
punto il cavo DB femmina -maschio sarà del genere diretto punto-punto, senza
incroci:
|
Per il collegamento sono sufficienti tre conduttori: due per la
trasmissione/ricezione e uno per la massa comune.
Si utilizza un cavo schermato, con lo schermo collegato alla parte
metallica del guscio del connettore, che è a massa dal lato PC.
La funzione dei pin è la seguente:
2. - RxD - dato trasmesso dal microcontroller
3. - TxD - dato trasmesso dal PC
5. - GND - Massa comune |
Da notare che la connessione mette in comune la massa del PC e del microcontroller.
Il fatto che le masse degli apparati posti alle estremità del cavo
sia messe in connessione può essere fonte di guasti nel caso in cui
le alimentazione da rete degli apparati provengano da diramazioni
diverse; in questo caso si possono determinare differenze di
potenziale tali da distruggere le interfacce.
Dove non si possa avere la certezza che l'alimentazione è a valle
dello stesso contatore, è altamente consigliabile utilizzare una
separazione galvanica della linea RS232, avendo altresì cura che la
schermatura sia a terra ad una sola estremità. |
Alla connessione di base a tre fili, se è necessario, si aggiungeranno altre connessioni per quei segnali di
controllo che sono denominati handshake, di cui i più noti sono RTS (Request
To Send - pin 7) e CTS (Clear To Send - pin 8).
Sono possibili numerose variazioni delle connessioni degli handshake per le
quali si rimanda alla consultazione delle molteplici pagine disponibili nel
WEB.
Va altresì notato che la comunicazione tra PC e microcontroller può
avvenire in half duplex (trasmissione e ricezione in due momenti distinti) o full duplex, ovvero con trasmissione e ricezione contemporanee; in
questo caso, l' uso di un modulo UART/USART integrato nel microcontroller è
praticamente d'obbligo.
Però, in piccoli dispositivi gestiti da microcontroller o in strumentazione è molto
comune l' half duplex, cosa che consente una emulazione software
dell' UART e, al limite, l' uso di un solo conduttore e di un solo pin di I/O.
Interfaccia RS-232 per la LPCuB.
La nostra LPCuB non ha a bordo una
interfaccia seriale, in quanto la RS-232 è solamente una delle tante possibili modalità
di comunicazione. Per dare il più ampio spettro di possibilità, non è stata
integrata nella scheda alcuna interfaccia specifica, rimandando all'
uso di elementi esterni, peraltro spesso assai semplici e poco
costosi, quasi tutti realizzabili in casa da un hobbista attrezzato o
reperibili in commercio.
|
Però esiste una pre disposizione per il collegamento di moduli di interfaccia
esterni, attraverso il connettore JSC.
In questo modo sarà possibile sperimentare non solo RS-232,
ma anche RS-422, RS485, Current Loop, USB,
SATA, Ethernet, LIN, CAN, I2C,
comunicazioni sincrone, bus per domotica, ecc., tutte gestibili dal
microcontroller, attraverso interfacce specifiche, tra di loro assai
diverse.
Anche perchè, pur restando semplicemente nel campo della RS-232,
l' interfaccia con la linea può essere realizzata in molti modi e non
solo con chip specifici, come MAX232 o MAX3232 di Maxim, Texas, ecc..
|
Il connettore JSC mette a disposizione 6 pin:
JSC - pin |
Funzione |
Serigrafia |
1 |
Vdd |
* |
2 |
Gnd |
- |
3 |
Dato trasmesso dal microcontroller |
Tx |
4 |
Dato ricevuto dal microcontroller |
Rx |
5 |
Handshake dal uC al PC |
Sc |
6 |
Handshake dal PC al uC |
Sd |
Questo consente di collegare rapidamente qualsiasi interfaccia per
trasmissione-ricezione, oltre a mettere a disposizione i collegamenti per due
eventuale segnali ausiliari di handshake.
Sono disponibili anche 4 LED per monitorare lo stato delle linee, mentre il
blocco di connettori passo 2.54 permette di collegare direttamente alcuni pin
dei microcontroller con semplici jumper o con cavetti volanti.
Maggiori dettagli nelle pagine di descrizione della LPCuB.
Va tenuto presente che il pin della Vdd non dispone di alcuna protezione dai
corto circuiti e quindi è opportuno fare attenzione durante i collegamenti.
Collegamento diretto
Se la connessione è breve (1-2m circa), è possibile collegare
direttamente il microcontroller alla linea RS-232 interponendo semplicemente una resistenza
in serie.
|
R1 22-47k
R2 470-1k
X2 DB9 femmina
Sono sufficienti tre conduttori tra "l'interfaccia" e il
microcontroller.
E' opportuno che il cavetto di connessione non superi qualche decina
di cm. |
Il funzionamento è semplice:
- in ricezione, la componente negativa del segnale inferiore alla Vss e
quella positiva superiore alla Vdd sono eliminate dai diodi di protezione
interni al pin di I/O. La resistenza Rx in serie ha lo scopo di limitare
la corrente nei diodi; il suo valore potrà variare tra 22 e 47k.
- in trasmissione, lo swing di tensione va da Vss a Vdd. Per una Vdd di 5V
il segnale è rilevato correttamente dal ricevitore all' altro capo della
linea. La resistenza in serie Rt limita eventuali extra correnti; il suo
valore potrà essere tra 470 e 1kohm.
Volendo, i pin 1-4-6 e 7-8 del connettore possono essere collegati per
unire i segnali di handshake hardware nel modo comunemente usato.
|
Occorre verificare che il pin scelto per la ricezione abbia i diodi
integrati. Questo non è vero per tutti i pin ed è rilevabile dal foglio dati.
In alternativa, sarà possibile collegare due diodi esternamente tra il
pin e Vss e il pin e Vdd, usando piccoli Schottky o comunque diodi fast. |
La costruzione non richiede alcun circuito stampato: le resistenze sono
semplicemente saldate al connettore e collegate con brevi cavetti al
microcontroller.
Il tutto può essere contenuto in un guscio di protezione del connettore.
Questa è la forma di interfaccia in assoluto più semplice ed economica,
ma ha alcune limitazioni:
- il segnale dal PC arriva invertito al microcontroller e viceversa, dato che non c'è
una inversione nell'interfaccia. Questo richiede che l'I/O sia gestito con una
polarità contraria alla situazione in cui si utilizza un driver invertente.
- la lunghezza del cavo è determinante: oltre qualche metro si potranno
utilizzare solamente bassi valori di baud rate.
- non c'è alcuna protezione rispetto a disturbi ESD o a
sovratensioni che la linea seriale
potrebbe captare.
Interfacce a transistor
Se abbiamo bisogno solamente una connessione su cui il microcontroller
invia dati al PC possiamo usare questi schemi. In tutti, i transistor hanno
funzione invertente. Questo consente di avere un driver software adatto sia
per queste interfacce che per quelle più professionali che usano integrati
specifici.
|
Nel primo circuito, utilizziamo un MOSFET a canale N,
genere VN0106N9, 2N7000, BS170 e simili in contenitore TO-92 o in SMD
(2N7002).
La tensione di trasmissione è prelevata dalla linea seriale (RTS).
Il secondo schema utilizza un comune PNP, genere BC557,
BC307 e simili.
Anche in questo caso la tensione di trasmissione dipende
dalla linea RS-232: la parte negativa viene derivata attraverso R1, D1 e
C1.
Entrambi i circuiti sono facilmente realizzabile su un
piccolo circuito stampato o su una mille fori. Funzionano bene su brevi
distanze e se l' interfaccia del PC è corrispondente allo standard,
dato che preleva la tensione negativa dalla connessione. |
Se abbiamo la necessità di ricevere e trasmettere, i circuiti possono
essere completati con pochi altri componenti:
|
Un primo schema, Q5, sempre un MOSFET N del genere VN0106N9,
2N7000, BS170 e simili in contenitore TO-92 o in SMD, costituisce il
ricevitore.
Si tratta di un semplice open drain (invertente) che ha come carico
R13, collegata alla Vdd del microcontroller.
Le resistenze R9/R10 sono inserite per garantire una maggior sicurezza
a quanto collegato alla RS-232. Il ricevitore è ancora un MOSFET
identico al precedente. |
I transistor hanno funzione invertente e l'
interfaccia è adatta anche per l' uso con UART.
la tensione di alimentazione di Q4 è prelevata dal pin 7 (RTS) della seriale;
questo richiede che dal lato host ci sia una interfaccia RS232 completa. La
tensione Vds di elementi come 2N7002 è 60V e quindi ampiamente in sicurezza
con la massima tensione disponibile sulle interfacce PC (12V).
L'adattatore funziona con una Vdd da 3V a 5.5V.
Il circuito è estremamente economico e può essere fortemente miniaturizzato
usando componenti SMD, come in questo esempio:
Gnd - massa comune (negativo)
+V - alimentazione positivo 3-5V
Rx - dato ricevuto dalla linea RS232
Tx - dato da trasmettere sulla line RS232
Il circuito è realizzato su piastra mono rame e quindi facilmente
replicabile. I componenti sono abbastanza spaziati per consentire la
realizzazione anche a chi non è specializzato in SMD (le resistenze sono
formato 1206 e i MOSFET sono in SOT23). Usando un circuito a doppia faccia le
dimensioni della superficie possono essere dimezzate.
Tutti componenti sono sul lato rame, ad eccezione di un breve tratto di
conduttore che collega il pin 7 del DB9 alla R11.
Lo stampato è stagnato a freddo per facilitare la saldatura ed eliminare la
corrosione.
|
Un altro schema che utilizza transistor BJT.
Q1 è il ricevitore, open collector caricato da R3, dipendente dalla Vdd.
D1 elimina la componente negativa del segnale presente sulla linea e R2 limita la corrente di base e del diodo.
Le resistenze non sono critiche: sul PNP possono variare tra 10k e 47k,
mentre sull'NPN tra 3k3 e 22k.
Si potranno usare rispettivamente qualsiasi PNP (2N3906, BC307,
BC557, ecc.) e NPN (2N3904, BC547, BC327, ecc.) per uso generico. |
Una possibile realizzazione pratica di questo circuito impiega un
piccolissimo stampato che può essere contenuto nel guscio di protezione del
connettore DB9.
Questo circuito è assai semplice ed estremamente economico ed è
facilmente realizzabile con i componenti che tutti gli hobbisti si ritrovano
nei cassetti delle parti generiche.
Esistono numerose varianti di questi schemi che potete trovare senza
difficoltà in rete, con i quali si può arrivare anche a 115k baud su tratte di cavo di
lunghezza molto limitata.
In ogni caso, resistenze sui gate e sulle basi e in serie alle connessioni dei
segnali al connettore DB non sono un di più, ma una sicurezza per evitare
quanto possibile danni da interferenze, tensioni indotte, cortocircuiti che
possono interessare il cavo.
Le interfacce a transistor o MOSFET sono:
- semplici ed economiche
- hanno un consumo di corrente trascurabile anche in impieghi a
bassa potenza
- possono essere realizzate in pochi istanti con componenti
correnti.
Per contro:
- non sono in grado di raggiungere baud rate elevati o guidare cavi
oltre una certa lunghezza.
- non dispongono di protezioni ESD o contro le
sovratensioni o i disturbi in linea.
Sono ideali per apparati a batteria collegati a PC su brevi distanze,
ma non sono consigliabili per uso in campo industriale e per
strumentazione.
|
Se dobbiamo affrontare il problema in modo più completo e
professionale, esistono molti circuiti integrati dedicati alla realizzazione di interfacce
tra dispositivi logici e linea RS-232.
Integrati dedicati
L' uso di questi integrati, che sono progettati esplicitamente per questa
connessione, rendono possibili trasmissioni a velocità molto elevate su tratte di
cavo dell'ordine delle decine di metri.
Inoltre dispongono di protezioni ESD ed è possibile ricorrere anche a
soluzioni isolate.
Altro fatto importante è che questi integrati costituiscono una reale
interfaccia RS232 con tensione positiva e negativa, che non richiede di
derivare correnti dalla linea, consentendo la connessione anche a dispositivi
non PC.
Nel PC originale l'interfaccia RS232 erano costituita dai noti 1488/1489;
questo era possibili dato che l'alimentatore standard PC fornisce una alimentazione +12V e -12V,
adatta alla RS-232.
Nel caso del microcontroller, l'aggiunta di altre tensioni di alimentazione
oltre la Vdd è cosa poco gradita; da questa necessità è nata una serie di
componenti dotati
internamente di elevatori/invertitori di tensione a pompa di carico (charge
pump), così da richiedere solamente una tensione di alimentazione singola.
Il più noto e più economico è il MAX232
di Maxim:
Si tratta di un package a 16 pin, DIP o SMD, che contiene 2 trasmettitori e
due ricevitori, oltre alla pompa di carico che passa i 5V di alimentazione in
circa +/- 10V per la trasmissione sulla linea. Occorre solamente
aggiungere 5 condensatori elettrolitici esterni, con valore tipico di 1uF.
Usando multistrato ceramici, non polarizzati, si possono realizzare interfacce
di dimensioni minime.
Nonostante MAX232 sia la sigla più nota, esistono numerosi componenti
analoghi (MAX220, MAX222, MAX223, MAX225, MAX230, MAX231, MAX232A, MAX232, MAX233A,
MAX233, MAX234, MAX235, MAX236, MAX237, MAX238, MAX239, MAX240, MAX241, MAX242,
MAX243, MAX244, MAX245, MAX246, MAX247, MAX248, MAX249, ecc.) con
caratteristiche differenti per quanto riguarda la tensione di alimentazione e
il numero di driver e ricevitori disponibili.
E' da notare che il
classico MAX232 è pensato per una Vdd di 5v, mentre è comune ormai
alimentare i microcontroller con tensioni inferiori (3V).
A questo scopo esistono componenti più recenti, come il MAX3232:
Anche per questo componente esistono numerose varianti per numero di
interfacce, gestione, ecc.
Fondamentalmente:
- MAX3232 è alimentabile da 3 a 5V (mentre il MAX232 richiede 5V); questo
permette di utilizzarlo anche con microcontroller alimentati a meno di 5V
- consente velocità fino a
1Mbaud (MAX3237 rispetto ai 120kbps del MAX232)
- e impiega condensatori da soli 0.1-0.47uF (rispetto a 1uF min.
consigliati per il MAX232). Questo consente di utilizzare anche economici
e minuscoli multistrato non polarizzati.
Un altro particolare di questi integrati, vantaggioso rispetto ai circuiti a
transistor, è la presenza di sistemi di protezione ESD fino a 15kV (MAX3232E
e simili) che difendono il microcontroller dalle possibili sovratensioni
indotte sulla linea RS-232.
Risulta quindi un componente da preferire rispetto al precedente MAX232 e non
poi così troppo costoso rispetto alle soluzioni a transistor viste sopra dove
sia necessaria una sicura possibilità di connessione anche a velocità elevate,
un perfetto adattamento alle specifiche della linea RS-232 e una elevata
immunità a disturbi e componenti ESD.
Hardware
Sul mercato sono disponibili numerose soluzioni già pronte.
|
A esempio i moduli di Mikroelektronika, per i quali
occorre realizzare solamente il cavetto di connessione. |
|
O anche racchiusi
in uno guscio assieme al connettore DB-9 |
Ma non comporta una grossa difficoltà il realizzarsene uno in proprio
|
I condensatori C2,3,4,5 sono da 1uF ceramici multistrato, di
dimensioni molto ridotte, sopratutto se SMD. La R2 mantiene T1IN a
livello alto, ma non è obbligatoria. L'interfaccia prevede
due LED,
uno su TxD e uno su RxD, molto utili per visualizzare durante il debug
la situazione delle linee. |
Sono installabili due LED a bassa corrente per avere un monitor dello stato
della comunicazione. Si potrà usare un LED rosso per la trasmissione ed uno
verde per la ricezione. Le resistenze potranno essere da 1-2K a seconda della
corrente necessaria all'illuminazione dei LED. Questi non sono necessaria se
l' interfaccia è collegata alla LPCuB,
dato che la scheda di sviluppo già li comprende.
Sono impiegati 4 canali:
JP1 |
IC1 |
Funzione |
Direzione |
DB9F |
6 |
Pin 12 - R1 |
RXD - ricezione dati |
al microcontroller
dalla linea seriale |
3 |
5 |
Pin 11 - T1 |
RTS - request to send |
dal microcontroller
alla linea seriale |
8 |
4 |
Pin 10 - T2 |
TXD - trasmissione dati |
dal microcontroller
alla linea seriale |
2 |
3 |
Pin 9 - R1 |
CTS - clear to send |
al microcontroller
dalla linea seriale |
7 |
I segnali fondamentali sono TXD e RXD, mentre RTS/CTS
sono segnali di handshake che possono essere utilizzati se richiesto e che
vanno gestiti opportunamente dal lato microcontroller. Se non utilizzati,
possono rimanere scollegati. Sulla LPCuB si può innestare un jumper per connetterli tra di loro nel caso in cui il programma di comunicazione lato
PC richieda handshake hardware.
Come detto, R2 è un pull-up che mantiene a livello basso la linea di
handshake in uscita se non viene gestita dal microcontroller; può essere
omessa se non necessaria. In effetti, se l'interfaccia del PC richiede
controlli hardware e non si desidera implementarne il software sul microcontroller, basta collegare tra loro i pin 5 e
3 di JP1 in modo che RTS venga riflesso su CTS. Questo sottintende che il microcontroller ha la capacità di rispondere
immediatamente alla richiesta da parte del PC.
In alternativa al controllo hardware si potrà implementare un controllo
software del genere Xon/Xoff che non richiede altri segnali se non RxD e TxD.
Il connettore JP1 consente il collegamento a qualsiasi scheda o breadboard, con un cavetto che non dovrà superare la
quindicina di centimetri.
Dal punto di vista costruttivo, è sufficiente un circuito stampato
mono faccia. I componenti SMD assicurano dimensioni minime.
Nel campione in foto, il MAX232 è nel package SOP16-W a passo allargato,
che era disponibile perchè usato in altre applicazioni, ma evidentemente si
potrà utilizzare anche quello a passo stretto.
Nel caso si incontrassero difficoltà con il montaggio superficiale è
possibile utilizzare componenti su foro senza avere un eccessivo impiego di
spazio, dato che MAX3232 è disponibile anche nel classico DIP a 16 pin; in questo caso si tratta di una realizzazione che chiunque abbia una minima
esperienza con i circuiti stampati può costruire in pochissimo tempo.
Il circuito stampato è stagnato a freddo per facilitare la saldatura ed
evitare corrosioni della superficie di rame non protetta.
Il collegamento con la LPCuB
Si utilizzerà un cavetto a 6 poli tra la scheda di sviluppo e l'
interfaccia RS-232.
Per il collegamento al PC occorrerà al minimo un cavo a tre poli + schermo,
intestato alle estremità con DB15 maschio e femmina.
Dato che i collegamenti
al DB9 femmina dell' interfaccia sono DCE, il cavo di collegamento non
richiede incrocio tra 2 e 3 (cavo "diritto"). Questo cavo può
essere reperito con facilità in commercio o auto costruito in pochi minuti.
Lo standard prevede una massima
lunghezza di 25m.
PC senza RS-232
In generale, la trasmissione del nostro microcontroller sarà diretta
al personal computer. Però va fatta una osservazione: dopo l' avvento dell' USB
(che è pure un protocollo seriale), la connessione RS-232, che fino a poco
tempo fa era presente in tutti i personal, attualmente è diventata più rara,
scomparendo del tutto nei notebook, nonostante sia ancora la principale interfaccia usata dai
sistemi industriali, principalmente per la sua semplicità di implementazione
e le sue caratteristiche che ben si prestano alla trasmissione di dati tra
apparati digitali nell' ambito della strumentazione, del controllo di
processo, delle periferiche dedicate, ecc.
|
E' evidente che volete ricevere una comunicazione RS-232 sul vostro
PC, è necessario che questo disponga della relativa interfaccia.
Se sul vostro personal computer non è presente una connessione
RS-232, essa può essere realizzata molto facilmente con l' aggiunta
di una scheda sul bus PCI o PCIe oppure, più semplicemente, con un
dongle che trasforma un port USB in un port RS-232.
Questi oggetti
sono facilmente reperibili ed hanno un costo limitato.
|
E se abbiamo bisogno di un isolamento... Si
può rendere necessario isolare
galvanicamente i due estremi di una linea RS232. Questo è
certamente indispensabile quando le due unità sono alimentate da reti
elettriche diverse: ricordiamo che la connessione RS232 mette in comune le
due masse e questo può facilmente originare loop di terra con tensioni e
correnti tali da distruggere le interfacce o, nel migliore dei casi,
disturbare la comunicazione.
Inoltre, è necessario isolare galvanicamente anche nel caso in cui un
apparto a batteria sia collegato con uno alimentato dalla rete, sopratutto
se non se ne conosce la situazione di isolamento verso terra. Esistono molte
possibilità per ottenere questo, sia utilizzando isolatori ottici, sia
utilizzando integrati progettati per questo scopo.
La prima soluzione può essere immaginata economica, ma coinvolge molti
componenti, il cui costo complessivo può trovarsi ad essere superiore a
quello di una diversa soluzione. Inoltre, per ottenere baud rate elevati,
occorre una certa cura nella progettazione e nella scelta dei componenti.
La seconda soluzione utilizza integrati previsti specificamente per questa
funzione e che, pur con un costo unitario non infimo, richiedono un
piccolissimo numero di componenti accessori, mentre offrono baud rate molto
elevati. Qui un esempio di interfaccia isolata di realizzazione extra
semplice utilizzando un integrato dedicato, ADM3251
|