Progetti - PIC 

 

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


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 22/11/18.