Tips & Tricks - PIC

 

I Port come uscita digitale : che resistenza per il LED ?

Queste pagine nascono dalla necessità di chiarire un problema marginale, ma non per questo inutile.

Da parte di un (troppo) gran numero di autori, e non solo quelli presenti sul WEB, ma anche in pubblicazioni e libri, la gestione di un pin in uscita è considerata in modo molto superficiale e approssimativo.

Ad esempio, si arriva a scrivere che:

  • dal foglio dati (Absolute maximum rating) la corrente che il PIC può erogare (source) o assorbire (sink) su ogni pin in è 25 mA massimi.
    Quindi se devo pilotare un carico, ad esempio un LED, basta che non ecceda questo limite, introducendo una resistenza in serie.
    Se la Vdd è 5 V e la corrente che si vuole fare passare nel LED è 10 mA, allora per calcolare Rl basta fare :

    Rl = Vdd / Iled = 5 / 0.01 = 500 ohm                       1.0

Proprio così !

Questo calcolo non è semplice, ma semplicistico, con ben poca conoscenza di elettronica, in quanto, come minimo, manca di considerare che il LED ha una sua caduta di tensione Vled, per niente trascurabile a così basse tensioni e che dipende dal tipo di LED. Questo deve essere valutato. 

Supponendo la caduta dio tensione del LED Vled = 1.7 V,  un calcolo più ragionevole sarà  :

Rl = (Vdd - Vled) / Iled = (5 - 1.7) / 0.01 =  330 ohm                            1.1

il che è ben diverso dal primo risultato.

Se avessimo usato una resistenza da 500 ohm, la corrente sarebbe stata :

Iled = (Vdd - dVled) / Rl = (5 - 1.7) / 500 =  6 mA                             1.2

e non 10 mA (- 40%) !

Certamente il LED si accende lo stesso anche con 6 mA perchè gran parte di questi dispostivi di uso comune si illumina anche con correnti molto inferiori a quella nominale e l' occhio non sempre è in grado di percepire una grossa differenza.
Però se si trattasse di qualche altro dispositivo, dove la corrente minima è un parametro più legante, ad esempio un relè o un opto isolatore, ecco che le cose potrebbero andare meno lisce.

Quindi, prima di prendere per buona ogni cosa che arriva dal WEB, è opportuno verificarla non in base alla sua brillantezza, ma alla sua correttezza.

Però, chi si desse la pena di misurare la corrente , troverebbe che il valore risulta minore dei 6 mA calcolati.

Un noto autore, in un suo libro, nota casualmente questo e conclude che il valore calcolato delle correnti e quello misurato sono "abbastanza simili"  !

Il problema è che, nella tecnica e ancor più nella scienza, pur consci della presenza inevitabile di errori di misura e delle inevitabili tolleranze dei materiali, un "abbastanza simile" non è per niente un risultato accettabile senza motivazioni valide. 
Se è come previsto, il modello di partenza è corretto; se non è come previsto, è probabile che il modello sia errato.

Ed è questo il caso.

Infatti, se consideriamo che i PIC sono dispositivi in tecnologia MOS, è evidente che tutte le componenti interne sono realizzate con elementi MOS, compresi i driver di uscita.
E una tipica uscita a transistor in grado di fornire (source) corrente o assorbirla (sink ) è un totem pole, realizzato con un MOS P a fare da interruttore verso la Vdd e un MOS N verso la Vss.
Ed è proprio questo che risulta dagli schemi di principio forniti dal costruttore. 

Mid-range Enhanced

La tabella schematizza, ad esempio, la struttura dei PORTA, ma ogni altro port è lo stesso: potrà mancare la funzione analogica, ma il sistema del totem pole è uguale per tutti. 
 

La struttura totem pole prevede due MOS complementari, uno P verso la Vdd e uno N verso la Vss.
Questo è tipico delle tecnologie a MOS complementari (CMOS). Quando i MOS sono disabilitati, l' impedenza di uscita è virtualmente infinita. 
Quando uno dei due viene attivato, la sua resistenza cade a valori inferiori ai 200 ohm:.
Il MOS N collega il pin di IO alla Vss e il MOS P lo collega alla Vdd.
La logica di comando evita che i due MOS siano attivati contemporaneamente.
Ricordarsi che nei PIC fa eccezione  il port RA4, che ha una uscita open drain: in questo caso è presente solo il MOS N e per attivare un carico in uscita sarà possibile collegarlo solamente tra il pin e la Vdd.

Inoltre non hanno struttura totem pole i pin che possono essere impiegati solamente come ingressi, ad esempio MCLR/RE4.

Nel totem pole ( e anche nel MOS N dell' open drain), trattandosi di switch MOS, essi presenteranno, al passaggio della corrente, una certa caduta di tensione dipendente dalla loro resistenza interna. 

Ed in effetti , quando ci si riferisce a MOS e non di transistor a giunzione, è più corretto parlare di resistenza più che di caduta di tensione  : un transistor o un diodo ha una tensione di conduzione tipica che resta ragionevolmente costante al variare della corrente che l' attraversa, mentre un dispositivo MOS presenta una resistenza, altrettanto ragionevolmente costante per il range di impiego previsto.

Una ulteriore considerazione immediata è quella che, per ragioni di tecnologia costruttiva, la resistenza interna degli elementi P è generalmente più alta di quella degli elementi N.
La conseguenza è che, a pari corrente, la caduta di tensione introdotta sarà maggiore per un  carico pilotato verso la Vss (attraverso il MOS P) piuttosto che dalla Vdd (attraverso il MOS N).

Ed infatti la conferma è nei parametri D090 e D080 del foglio dati, dove vengono fornite le seguenti indicazioni :

Param. no. Symbol Characteristic Min. Max. Conditions
D080 Vol Output low voltage - 0.6 V Iol = 8.5 mA Vdd = 4.5 V
D090 Voh Output high voltage Vdd-0.7 - Ioh = -3 mA Vdd = 4.5 V

Ovvero, ci potranno essere nelle peggiori condizioni, una caduta di tensione di 0.6 V sul MOS N e 0.7 V sul MOS P.

Supponendo di alimentare il LED tra il pin di I/O e la massa (Vss),  la corrente che scorre nel LED non è determinata solo la caduta di tensione della resistenza dVR e da quella del LED dVled , ma anche da quella sul MOS P del drive dVP.

 

Questo porta a modificare il calcolo fatto in precedenza in :

R = [(Vdd - dVP) - dVled] / Iled = (5 - 0.7 - 1.7 ) / 0.01  = 260 ohm                       1.3

E dovremmo essere già ad un buon punto, che, se si osserva, è ben diverso dal primo approccio semplicistico : la R è diventata circa il 50% del valore prima "calcolato" !!

E nel caso del drive dalla Vdd, attraverso il MOS N :

 

R = [(Vdd - dVN) - dVled] / Iled = (5 - 0.6 - 1.7 ) / 0.01  = 270 ohm                       1.4

Come era sensato aspettarsi non c'è una grossa differenza tra i due drive, la cui caduta di tensione si differenzia di solo 0.1 V.

 

Ma è proprio così ?

E' capitato, però, di leggere una semplice considerazione estrapolata dai dati forniti da Microchip sul questa caduta di tensione nei MOS :

  • se la caduta di tensione è 0.6 V @ 8.5 mA , la resistenza equivalente dell' interruttore N è di circa 70 ohm

  • se la caduta è 0.7 V a 3 mA, la resistenza equivalente dell' interruttore P è di circa 233 ohm

Per i dati forniti dal costruttore, questo è perfettamente corretto, ma è in contraddizione con l' Absolute maximum rating dove si dichiara una corrente massima di 25 mA.

Infatti se la resistenza del MOS P fosse 233 ohm, il pin non avrebbe alcuna possibilità di erogare 25 mA alla tensione nominale di 5 V, neanche in corto circuito diretto sulla Vss, perchè :

I  = V / R = 5 / 233 = 21 mA                                          1.5

mentre è semplice verificare con una esperienza che, caricando il pin con una resistenza da 100 ohm o meno, la corrente di 25 mA viene superata con facilità (e mettendo in corto il pin a massa per un adeguato tempo, lo si manda fuori uso !).

Dunque questo vuol dire che le resistenze indicate da Microchip sono parametri estremi, di gran sicurezza, mentre l' esperienza indica che i MOS integrati hanno resistenze molto minori.

 

Quale è la resistenza ?

Ne è nata la curiosità di verificare quale sia la resistenza di conduzione del componente reale

Quindi sono state effettuate misure caricando un pin con una cassetta di resistenze di precisione e misurando la corrente.
Sono state provate correnti tra 0.5 e 30 mA, sia per sink current che per source current.
Per ogni valore di resistenza, e quindi di corrente, è stata misurata la caduta di tensione sul drive, misurando la tensione tra pin e massa per il drive N e tra pin e Vdd per il drive P.

L' esperienza, per ragioni di tempo, non è stata estesa a molti chip, ma sono stati provati alcuni elementi della famiglia PIC18F23xx, 43xx, 25xx e 45xx, ottenendo risultati molto simili.

  • Per una variazione della corrente di carico da 0.5 a 20 mA, nel caso di drive dalla Vdd (MOS P) la resistenza riscontrata è circa 56-60 ohm
  • Per una variazione di carico da 0.5 a 22 mA la resistenza del MOS N è circa 19-22 ohm

quindi valori molto migliori di quelli del foglio dati, ma comunque confermanti la maggiore resistenza dell' elemento P.

Certamente i valori di resistenza di questi MOS integrati sono enormemente più alti di quelli di dispostivi discreti, dove la resistenza scende , per elementi di potenza , anche a millesimi di ohm, ma, evidentemente, è il massimo possibile per la tecnologia di costruzione di un processore embedded (questi dati infatti sono simili a quelli dichiarati da altri costruttori).

Inoltre, durante i test, le resistenze con correnti elevate (oltre i 22 mA)  crescevano in modo sensibile e anche questo rientra pienamente nelle caratteristiche di un MOS, la cui resistenza di conduzione (Ron) varia sia con la temperatura, ma anche con la corrente 

Questa è la curva corrente di Drain-Ron per uno Temic VP2410L, piccolo MOSFET a canale P in contenitore TO92.

E' ben visibile l' aumento brusco della resistenza di conduzione oltre un certo livello di corrente di drain

Ed in effetti, la resistenza interna degli interruttori MOS , durante i test, era circa costante fino alla soglia di una ventina di milliampere, dove saliva decisamente.

Nelle prove fatte :

  • la resistenza del canale P che a 8,5 mA era circa 57 ohm, a 20 mA era salita a circa 64 ohm, mentre a 27 mA saliva oltre i 75 ohm (+30%)
     
  • la resistenza del canale N , che a 8.5 mA era circa 20 ohm, saliva intorno ai 22 ohm (+ 10%) per correnti oltre i i 25 mA

Dunque , nei dispositivi provati, restando nell' ambito di correnti al di sotto dell' Absolute maximum rating, si può affermare che 

  • la Ron verso la Vdd è attorno ai 70-75 ohm

  • la Ron verso la Vss è attorno ai 20-25 ohm

Da questo consegue che : 

  • la condizione migliore per pilotare un carico è tra il pin e la Vdd, sfruttando la bassa resistenza dell' interruttore a canale N
     
  • la condizione in cui si dissipa la maggiore potenza (persa per effetto Joule sulla resistenza di conduzione) è con il carico tra il pin e la Vss (interruttore a canale P)

I dati sono poi stati verificati con altre prove.
 
Ad esempio, il circuito di pilotaggio del LED preso in considerazione all' inizio, va modificato così : 

  • Per una Vdd = 5.00 V e un LED con Vled = 1.743 V (caso reale), una resistenza in serie da 500 ohm produce una corrente di :

Iled = (Vdd-Vled) / R + Ron =  (5 - 1,743) / 500 + 60 = 5.8 mA                         1.6

Ovviamente, se si dovesse progettare con la massima sicurezza, si dovrebbero applicare i parametri del foglio dati e il calcolo diventerebbe :

Iled = (Vdd-Voh-Vled) / R  =  (5 - 0.7 - 1,743) / 500  = 5.1 mA                         1.7

il che non cambia molto le cose per il LED , ma è comunque un risultato assai diverso dal calcolo iniziale della 1.0. 

 

Allora meglio sink o source ?

Non esiste un "meglio" assoluto : dipende dall' applicazione.

Come le logiche TTL i port lavorano meglio in modo sink, sulla più bassa caduta di tensione dei MOS a canale N, ma la differenza è trascurabile per la più ampia parte delle applicazioni. Anche perchè può essere importante la logica di comando.

Col carico collegato alla Vdd, la "logica" del comando è , in un certo senso, "invertita" in quanto: 

per accendere il LED occorre portare a 0 il livello del pin.

Pin LED
0 acceso
1 spento
Nel caso di un carico verso la massa, la "logica" è più immediata; infatti:

 per accendere il LED occorre portare a 1 il livello del pin.

Pin LED
0 spento
1 acceso

 

La resistenza sarà calcolata con la 1.4 .
Nel primo caso (sink current) sarà da considerare per sicurezza la cdt di 0.6 V (param D080).
Nel secondo caso (source current) sarà da considerare la cdt di 0.7V (param D090).

 

CONCLUSIONE

All' atto pratico, si potrebbe commentare con un bel "chissene" : se nel LED passano 6 mA (1.2) piuttosto che 5.8 mA (1.6) o 5.1 (1.7) è del tutto irrilevante; la luminosità del LED non avrebbe una differenza apprezzabile a vista e la differenza tra le correnti sarebbe minore di quella possibile nel campo delle tolleranze di LED, resistenza, tensione di alimentazione e caratteristiche del PIC.

Più approfonditamente, si deve affermare che 

  • i 25 mA sono un reale limite massimo che non è particolarmente conveniente considerare sempre sfruttabile, in quanto potrebbe anche non essere fattibile e comunque sottopone il chip a stress non indifferente.
  • i port in uscita digitale funzionano ottimamente per ambiti di correnti inferiori

ovvero, se si devono comandare carichi con esigenze particolari, non si potranno alimentare direttamente dai pin del PIC, ma occorrerà inserire un qualche drive, ad es. un buffer o un generatore di corrente costante, un open collector o open drain  simili.

Però tra 10 mA della 1.0 e 5.1 mA della 1.7 qualche differenza c'è anche per il povero LED : aspettarsi 10 mA e averne solo 5 a volte può essere eccessivo.
Il considerare correttamente la Ron degli switch MOS interni permette almeno di non toppare troppo la scelta delle resistenze serie, sopratutto per carichi ai limiti della capacità del pin.

A cosa serve, in conclusione, questa ricerca ?

Principalmente a tre cose :

  1. cercare di superare quella superficialità e approssimazione che pervade ogni componente della nostra società e che ha nel WEB il massimo esempio
     
  2. indicare che la valutazione della corretta resistenza di limitazione per un carico di un pin dipende da molti fattori dei quali, sopratutto se è richiesta una certa precisione, va tenuto conto
     
  3. individuare il limite dei 25 mA come un Absolute maximun rating e non una caratteristica di lavoro da dare per buona e sfruttare in ogni circostanza

Riguardo a questo terzo punto, peraltro, i fogli dati indicano chiaramente (a  volerli leggere !) che :

  • i 25mA sono applicabili ad ogni pin, ma con il limite di una massima corrente complessiva assorbita dal chip non superiore a 200 mA !
    Si tratta di un Absolute Maximum Rating, quindi un valore massimo che non è opportuno superare pena la distruzione del chip stesso.
    Questo vuol dire che si potranno teoricamente prelevare 20 mA da 10 pin , ma non sarà possibile disporre di 25 mA per più di 8 pin. 
Questo è comunque inteso per operatività nei limiti di temperatura indicati, in quanto l' energia persa nelle cadute di tensione interne al chip viene trasformata in calore per effetto Joule e l' aumento del calore produce nei semiconduttori una variazione della resistenza di conduzione, che spesso avvia  l' effetto di run down termico , con il conseguente rischio di una distruzione del chip o di parte di esso.

Anche perchè i pin non dispongono di limitazione della corrente, per cui, anche se essa è limitata dalle impedenze interne, un corto circuito tra un pin di uscita e la tensione di alimentazione, sopratutto se prolungato, tenderà a creare situazioni in cui il chip viene danneggiato in modo permanente.

E, dai dati rilevati, la conduzione di correnti vicine, se non oltre il limite dei 20 mA creano surplus di effetto Joule con percentuale superiore anche al 50%.

Diversa potrà essere la condizione in cui il pin viene usato per un comando a impulsi, dove esiste un tempo di non conduzione che permette al calore di essere dissipato, ma si tratta di situazioni sempre da verificare .

Per esempio nei drive di display senza resistenze di limitazione, per quanto l' impulso di Ton possa essere breve, la corrente istantanea sarà comunque molto elevata e se nei fogli dati non ci sono molti elementi che permettano di autorizzare con sufficiente sicurezza un simile approccio, si richiede almeno di qualche misura più accurata che non il classico "funziona e va bene così".

Sarebbe opportuno applicare un buffer sempre, in modo da far lavorare i pin in una condizione di sicurezza, sia come corrente erogata sia come isolamento dal carico controllato, anche se questo aumenta il costo del circuito.
Soprattutto se si tratta di applicazioni in cui è richiesta la massima affidabilità. 

Ma anche nell' utilizzo di buffer, va usato il "granum salis": ad esempio, i pin dei processori embedded difficilmente sono in grado di pilotare direttamente il gate di grossi Mosfet, causa l'elevata capacità intrinseca; si dovranno utilizzare dispositivi del genere previsto per il comando con livelli logic (logic-level MOSFET) oppure interporre un gate driver.

Certamente per comandare un LED o il segmento di un display si potrà fare a meno di un buffer, ma non si può essere d'accordo con l' abolizione fanatica di tutti i componenti oltre al PIC : andrà bene a scopo ludico, per giocare, ma non per produrre qualcosa di serio. 
Una realizzazione tanto per fare non è l' approccio che si potrà usare per un apparecchio in grado di lavorare nelle condizioni comuni all' industria, o,  se non peggio, su un veicolo o in altre applicazioni critiche.

 

Copyright © afg . Tutti i diritti riservati.
Aggiornato il 17/10/10 .