Ako sa dá pripojť 5 voltová I2C periféria k 3V cpu?
Ako upraviť vstup procesora pre pripojenie 12 Voltov?

Skúste "LEVEL-SHIFT" !


Level shift, čo je to?
- Je to úprava veľkosti signálu medzi dvomi súčiastkami, ktoré nemajú kompatibilné rozhodujúce úrovne.

Určite sa mnohý s Vás s tým už stretli.
Po príchode 3V logiky a neskor aj 1.8V, boli návrhári postavený pred problém "ako prepojiť súčiastky s rôznymi rozhodovacími úrovňami"

Trochu popíšem mnou používané zapojenie.

Donedávna som to realizoval buď pomocou deliča - pri vstupoch, alebo tranzitorom s otvoreným kolektorom - pri výstupoch, alebo 74LCX D klopákmi pri bidirectionale.

Preto ma veľmi potešila Application Note od tvorcu I2C - Philipsu (NXP) AN10441, kde uvádzajú riešenie level shiftingu pre i2c zbernicu pri súčasnom zapojení 3V a 5V zariadení.

Funkcia:

Dovolím si zjednodušený preklad originálu pre laické vysvetlenie funkcie.

Ako príklad zapojenia poslúži prepojenie 3V a 5V I2C zbernice.
Zapojenie vypadá takto:
i2c_shift.jpg

Každá strana (3V a 5V) používa svoje pull-up rezistory.
Jednotlivé zariadenie majú vstupnú logiku prispôsobenú ich napájaniu a ako výstup používajú otvorený kolektor.
Jednoducho povedané log."1" im pomôže vyrobť pull-up rezistor, a log."0" zariadenie vygeneruje otvorením svojho výstupného tranzistora pripojeného ku GND.

Základom tohto zapojenia je N-kanál mos-fet tranzistor.
Hradlo má pripojené na stranu s nižšou voltážou = 3V, "Source" je použité na zbernicu zo strany nižšej voltáže a "Drain" na zbernicu zo strany vyššej voltáže = 5V.
Možné stavy:
  • Zariadenia v kľude, žiadne z nich nerobí log."0": pull=up rezistory zabezpečujú stav log."1" na oboch stranách. G a S tranzistora je na rovnakej úrovni 3,3V čím tranzistor nepracuje (je zatvorený) čím sú obe strany zbernice oddelené.
  • Ak 3V zariadenie vygeneruje log."0", tranzistor sa otvorí (existuje napätie medzi Gate a Source), čím k zariadeniu pripojí 5V pull-up, ktorý je týmto pripojený cez otvorený kolektor 3V zariadenia ku GND.Tým pádom sa na vstupe 5V zariadenie objaví log."0".
  • V opačnom smere ak 5V zariadenie vygeneruje log."0", je využité vnútornej diódy v mosfet tranzistore pomocou ktorej sa "stiahne" pull=up rezistor 3V strany ku GND, čím sa na vstupe 3V zariadenia objaví log."0".
Toto zapojenie chráni 3V stranu pred napäťovými špičkami z 5V strany, a podľa NXP pracuje aj na zbernici až do 400kbit/s.
NXP nevylučuje ani viacnásobný level-shifting: Medzi dvoma I2C zariadeniami existuje zbernica pracujúca na 48V! T.j. jedno zariadenie (napr. 3V) má level shift z 33V na 48V, a druhé zariadenie (5V) má level-shift zo 48V na 5V.

NXP týmto dokáže zbernicu natiahnúť na vyššie vzdialenosti.


Hneď som začal toto zapojenie aplikovať do svojich návrhov.
Používam ich ako pri bidirectional i/o portoch tak aj pri vstupoch ako ochranu pred vyšším napätím.
fet_io.jpg
Zapojenie som doplnil filtračným kondezátorom C1, a diódou D1, ktorá v prípade prierazu tranzistora slúži ako posledná hradba pred odpálením pripojenej logiky, za predpokladu, že zdroj externého napätia nie je moc "tvrdý" - inak odpáli všetko.....
Ešte by sa tam možno hodil nejaký varistor poprípade optočlen pri požiadavke galv. oddelenia, čo ale zapojenie degraduje iba na vstupa alebo iba výstup.......
Cena materiálu sa zmestí do 1,50 Skk / kanál.


Budúcnosť.
Ako ďalší nápad som mal, pripojiť k jednej mojej starej bastl-doske s 5V 80C32, 3-Voltovú flasku s 3V latch-om,
čo by reprezentovalo shiftnutie:
  • 8 bitov - i/o - AD0-AD7
  • 8 bitov - o - A8-A15
  • + RD/WR/ALE
Teoreticky by to šlo, ale spájkovať sa mi to naozaj nechcelo. Ďalšia možnosť bola použiť CPLD obvod, ktorý je na 3V a má 5V compatible I/O - čo zasa nie je lacné riešenie.

Ako ma však potešil NXP, keď som u nich našiel 8-bitový level-shifter !

GTL2003
----> datasheet

Cena: podľa digi-key 0.92 USD
Dostupnosť: okrem digi-key, ho zatial bežne nemá nikto. Takže zatiaľ nič moc, ale je to vcelku čerstvé, tak by som to nevidel bledě.....



BTW. ako vy riešite I/O ? Pustite do fóra vlákno "I/O k MCU" a zverejnite svoje konštrukcie !

Vaše príspevky:
  1. Autor:Torgeir, Tip:Diskusné fórum: "Vaše Projekty"->"Galvanické oddelenie I/O Linky"


Čerpané z dokumentu: AN10441 - Level shifting techniques in I2C-bus design
http://www.standardics.nxp.com/support/documents/i2c/pdf/an10441.pdf