Diatriba 3.3 - 5 volt

Mi scuso con gli esperti, per aver messo queste considerazioni, ma su un argomento apparentemente ovvio le discussioni su internet sono interminabili. Per cominciare: in principio era il TTL. TTL sta per transistor-transistor-logic, ed e' nata come unificazione per rendere compatibili e intercambiabili i circuiti integrati logici anche di diversi fornitori. Ovvio che solo gli americani potevano avere questa grandezza di vedute. A partire dalle caratteristiche dei transistor integrati bipolari si e' scelta una tensione di alimentazione comune di 5 volt +/- 10%. Inutile dire che in Europa i tedeschi avrebbero scelto 5.317 volt +/- 0.01%, i francesi 5 volt +/- 5% e gli italiani 7 volt +/- 70%. Per fortuna c' erano gli americani. I livelli logici nominali erano 0 e 5 volt, ma a causa delle cadute di tensione nelle giunzioni dei transistor bipolari lo zero in uscita era circa 0.8 volt, mentre la specifica accettava l' uno logico a partire da 2.8 volt, visto che l' alimentazione a specifica poteva scendere a 4.5 volt. Notate questo valore. Successivamente le logiche sono diventate CMOS, che hanno l' uscita rail-to-rail, cioe' lo zero logico e' vicinissimo a 0 volt e l' uno vicinissimo a 5. Successivamente le densita' dei chip sono cresciuite, e per non danneggiare i delicati e piccolissimi transistor l' industria ha creato un altro standard a 3.3 volt. Successivamente su chip ad alta integrazione si e' scesi ancora: in genere gli Arm viaggiano a 1.6-1.8 volt, e le CPU tipo Pentium dei PC a 1.2 volt. Ma per fortuna come standard ci si e' fermati a 3.3 volt. Anche i chip che usano voltaggi piu' bassi sono alimentati a 3.3 volt, che e' il voltaggio dell' I/O. L' alimentazione della CPU viene abbassata internamente da un regolatore di tensione e l' utente non deve fare niente. Quando e' nato USB si e' scelta una tensione per la circuiteria interna a 3.3 volt. Ebbene si', le linee D+ e D- dell' USB sono a 3.3 volt ! Salvo che ad high speed, 480 Mb/s, quando funzionano in corrente, 16.67 mA. La novita' dell' USB e' che per la prima volta l' host poteva alimentare la periferica. Visto che l' alimentazione deve essere ben regolata e che c' erano in giro gia' parecchi sistemi a batteria, si e' scelta una tensione di alimentazione pari ai vecchi 5 volt, questa volta pero' +/- 5%. Perche' ? perche' i regolatori di tensione provocano una caduta, che quando e' nata USB era almeno 0.7-0.8 volt. Se poi uno per sicurezza aggiunge un diodo di protezione contro l' inversione di polarita', ecco che 5 volt bastano appena appena per farne 3.3. Intanto, sfruttando le caratteristiche dei CMOS sono arrivati sul mercato microprocessori ad ampio range di tensione di alimentazione. Alcuni PIC sono alimentabili da 2.8 a 5.5 volt. Infine ricordiamo che l' interfaccia seriale RS232, tuttora la piu' usata, e' una logica a tre livelli. Lo zero logico puo' andare da 9 a 25 volt, l' uno da -9 a -25 e zero volt indica linea scollegata. Sono anche noti come voltaggi EIA. Di fatto tutti i PC usano +/- 12 volt. Pero' le seriali di microcontrollori e sistemi embedded usano il loro voltaggio. A questo punto la confusione sembra completa. Per venire in aiuto la ditta Maxim ha inventato il MAX232. E' un integrato alimentato a 5 volt che da un lato ha il segnale a 0/5 volt. Grazie a un circuito a pompaggio di carica genera dall' altro lato i voltaggi EIA e permette il collegamento PC(seriale standard)/microprocessori senza danni. Successivamente e' nato il MAX3232. Questo puo' essere alimentato a 3.3 oppure 5 volt, e da un lato i livelli sono sempre pari al voltaggio di alimentazione. Dall' altro invece i voltaggi sono sempre +/- 12 volt, comunque l' integrato sia alimentato. I sistemi a bassa densita' di integrazione come Arduino vanno a 5 volt. La seriale di Arduino viaggia tra 0 e 5 volt. Per non danneggiarla interfacciandola con un PC occorre inframmezzare un MAX232 o un MAX3232. Gli Arm, Pic24 e Pic32 vanno a 3.3 volt. La loro seriale oscilla tra 0 e 3.3 volt. Per interfacciarli con un PC occorre un MAX3232. E per interfacciarli fra di loro ? Se si manda nella linea di ricezione di un Arm la linea di trasmissione di un Arduino a 5 volt l' Arm si fotte. Occorre abbassare il voltaggio con un partitore di tensione. Sono disponibili in commercio degli adattatori gia' pronti. Per mandare la trasmissione di un Arm in Arduino si eleva la tensione da 3.3 a 5 con un circuito attivo a transistor. In genere gli adattatori gia' pronti in commercio sono bidirezionali, con le due linee di trasmissione e ricezione a 3.3 da un lato e 5 dall' altro. Ma attenzione ! per i TTL a 5 volt sono sempre valide le specifiche che vedono l' uno logico a partire da 2.8 volt. Per cui se mando una seriale Arm a 3.3 verso Arduino questo la legge correttamente senza elevatore di tensione ! Ma ri-attenzione ! Non posso fare il contrario se no fotto l' Arm ! Visto che a volte la comunicazione e' unidirezionale verso Arduino, qualcono collega direttamente senza problemi, ma senza dare spiegazioni. E' questa la maggior causa di confusione. Altro tipico caso i servo o gli ESC per modellismo. Andrebbero pilotati da un' onda quadra a duty cycle variabile fra 0 e 5 volt, ma se si manda un segnale a 3.3, visto che il segnale e' in un senso solo, in genere funzionano lo stesso. E molti si chiedono perche'. Poi alcuni servo non rispettano le specifiche e a 3.3 non funzionano. E la confusione cresce, ma questa volta la colpa e' del servo. Spero di avere chiarito i motivi. E i microprocessori a voltaggio variabile ? I sistemi CMOS, si e' detto, sono rail to rail, per cui i livelli della seriale sono pari alla tensione di alimentazione. Se alimento un Pic a 2.9 la seriale sara' a quasi 2.9 (e funzionera' ancora con Arduino). Pero' le polarizzazioni interne del Pic sono legate alla tensione di alimentazione, per cui potete alimentarlo a 5.5, ma se lo alimentate a 2.9 e mandate un segnale a 5.5 in ingresso lo fottete. Potete mandare un segnale a 5.5 solo se lo alimentate a 5.5. Tutto questo in assenza di specifiche autorizzazioni del costruttore sul datasheet che, su sistemi speciali, possono anche esserci, ma devono essere assai esplicite. A tutto questo guazzabuglio si sono aggiunti i convertitori USB-seriale. Suno componenti che interfacciano l' USB da un lato e una seriale TTL dall' altro. Cosi' un PC tramite USB puo' collegare una periferica seriale e pure alimentarla. Sono in vendita prodotti che integrano il chip su una scheda e comprendono regolatori di tensione e connettori. Belinonda 4 per essere programmata si appoggia a uno di questi circuiti in vendita, acquistato presso DealExtreme. I chip piu' famosi sono il glorioso FTDI 232 e il suo concorrente Silabs 2102. Per tutti e due sono disponibili i driver USB (lato PC) sia per Linux che per Windows. Si inserisce il connettore in una presa USB del PC e appare nell' hardware un' altra periferica seriale. Silabs 2102, su cui sono basati i convertitori che uso io, ha un regolatore di tensione nel chip, e puo' essere alimentato sia 5 volt che a 3.3, a scelta su due piedini diversi. Uno va al regolatore di tensione interno,l' altro lo bypassa. L' uscita seriale e' sempre a 3.3 volt. Carambola 2 vuole la seriale a 3.3 volt e quindi il collegamento puo' essere diretto. FTDI 232 deve essere alimentato a 5 volt, comunque disponibile su USB. Il voltaggio lato UART puo' essere impostato. Le vecchie versioni potevano dare 3.3 o 5 volt. L' ultima versione puo' anche fornire 2.8 e 1.8 volt, per l' interfaccia diretta con chip ad alta densita' tipo ARM. Attenzione ! Il voltaggio di uscita lo sceglie il costruttore della scheda quando progetta il circuito. Per cui nel caso FTDI dovete leggere attentamente le specifiche del costruttore e/o controllare con l' oscilloscopio (se ne avete uno). Arduino va a 5 volt e quindi usa FTDI. Un famoso componente e' il "cavo FTDI", inventato da SparkFun, ma in vendita anche sui siti italiani (vi evitate di dover gestire la dogana). Sembra solo un cavo, ma il circuito c' e', e' compattissimo e nascosto nel connettore USB. Qui il voltaggio UART e' stato fissato dal costruttore a 3.3 volt. Tutto chiaro ? L' unica cosa chiara e' che NON C' E'UNA REGOLA UNIVERSALE e quindi bisogna controllare con molta attenzione volta per volta.



  • Torna alla pagina componenti
  • Torna alla homepage