Raspberry PI 2 ochrana GPIO
8. Července 2013
Po pořízení Raspberry Pi 2b a úvodních pokusech v Pythonu, přišel čas využít GPIO (general purpose input output) piny. Ty mohou být velmi užitečné při ovládání externí elektroniky pomocí Pi. Lze jejich prostřednictvím komunikovat s různými zařízeními, GPS, LCD, ovládat motory, používat různé senzory a podobně. Mají ovšem jistá omezení.
Výstupní GPIO pin je možné programově přepínat mezi 0V a 3.3V.
Vstupní GPIO pin je možné programově číst a zjišťovat, zda je na něm hodnota 0V – LOW nebo 3.3V – HIGH.
– GPIO piny na Raspberry Pi pracují s napětím od 0V do 3.3V. Nelze z nich získat vyšší napětí než 3.3V a zároveň, pokud je pin použitý jako vstup, nesmí se na něj připojit vyšší napětí, než 3.3V.
– Každý GPIO pin nastavený jako výstup, může dodávat maximálně 16mA s tím, že kombinovaný maximální proud ze všech zapojených výstupních pinů, nesmí přesáhnout 50mA. 3.3V na GPIO piny je dodávaných stejným regulátorem, který dodává napětí na 3.3V napájecí pin 1, tudíž omezení se vztahuje i na něj.
– Na vstup kombinované omezení neplatí. Všechny piny použité jako vstupní, snesou každý maximálně 16mA.
– Piny poskytující 5V jsou napájený přímo ze zdroje PI a jejich maximální proud je omezený 1000mA polymerovou pojistkou, která je zapojená za USB napájením. Od těchto 1000mA je nutné odečíst spotřebu samotného PI a spotřebu připojených USB zařízení. Výsledný proud je to, co je možné získat z 5V napájecího pinu.
Raspberry PI 2 podle mých měření a informací z internetu spotřebuje při plné zátěži zhruba 500mA, když k tomu přidáme mou USB bezdrátovou myš se spotřebou 100mA a USB klávesnici s obdobnou spotřebou, zbývá nám zhruba 300mA na libovolné využití.
GPIO je připojené přímo na procesor a jiná, než povolená napětí a proudy, velmi pravděpodobně poškodí přímo CPU. Proto je dobré chránit použité GPIO piny, před poškozením.
Za tímto účelem se prodává několik různých přídavných desek, které používají různé postupy, aby si člověk neopatrností nespálil svůj malinový koláč. Jejich cena je většinou ale nemalá.
Já přidávám svou vlastní destičku na ochranu jednoho GPIO pinu. Pro ochranu více pinů je možné destičky pospojovat paralelně a ke každé připojit samostatný GPIO pin.
Seznam součástek
- D1 – dioda 1N4007
- D2 – Zenerova dioda BZX03V003.3
- D3 – zelená LED
- R1 – 330R
- R2 – 6k2
- R3 – 510R
- R4 – 280R (popřípadě jiný podle použité LED)
- Q1, Q2 – NPN tranzistor MPSA42
- IC1 – optočlen PC817
- SW1 – posuvný přepínač jednopólový (lze koupit v GME)
- SW2 – páčkový přepínač jednopólový (lze koupit v GME)
- P1, P2 – svorkovnice s 5 šrouby a roztečí vývodů 3,5mm
Zde je možné stáhnout šablonu plošného spoje určenou pro tisk na průhlednou fólii. Po vystříhání a složení 4 vrstev za sebe, je možné fólii použít pro výrobu plošného spoje foto cestou. PDF šablona pro tisk
Funkce
Destičku může fungovat jako ochrana vstupního i výstupního GPIO pinu. Typ ochrany se volí pomocí šoupacího přepínače SW1.
Destička dále obsahuje páčkový přepínač SW2, který slouží při použití destičky k ochraně výstupu, k manuálnímu zapínání odděleného napájení pro ovládanou elektroniku. Zelená LED signalizuje zapnuté napájení.
Ochrana vstupu
Pokud je připojený GPIO pin nastavený, jako vstupní a destička je přepnutá na ochranu vstupu, pracuje obvod následovně. Vstup je chráněn zenerovou diodou D2 omezující napětí na 3.3V. Paralelně k zenerově diodě je zapojená běžná dioda D1, která chrání vstup před impulzy s opačnou polaritou. Takové impulzy mohou vzniknout například od zanikajícího elektromagnetického pole kolem cívky nebo přepólováním vstupu. Sériově ke vstupu je zapojen rezistor R1 330Ω, který omezuje proud při 3.3V na 10mA.
Aby vstupní obvod správně fungoval, je nutné použít zem Raspberry PI v zapojení vstupního zařízení.
Ochrana výstupu
Pokud je připojený GPIO pin nastavený, jako výstupní, destička je přepnutá na ochranu výstupu a je zapnutý páčkový přepínač odděleného napájení, pracuje obvod následovně. Rozsvítí se zelená LED dioda napájení a GPIO pin ovládá bázi NPN tranzistoru Q1 přes rezistor R2 6.2k (R2 nemusí mít 1W, pouze v době nákupu součástek neměli běžnou verzi). Proud potřebný k ovládání tranzistoru je pouze přibližně 420uA. Tranzistor Q1 spíná LED diodu optočlenu IC1, která je napájena 5V ze zdroje Raspberry Pi přes rezistor R5 200Ω, který omezuje proud tekoucí diodou na přibližně 20mA. Tímto se uzavírá obvod, který je připojený k Raspberry Pi.
Optočlen odděluje obvod Raspberry Pi od druhé poloviny obvodu fyzicky s pevností 5kV. Pro správnou funkci obvodu, je nutné za optočlenem používat oddělené napájení a nikoli stejných 5V, které dodává Raspberry Pi. Optočlen je připojen na samostatné napájení 5V a ovládá NPN tranzistor Q2 přes rezistor R3 510Ω, který Q2 omezuje proud na bázi Q2 na 8mA a otevírá tranzistor Q2. Tranzistor Q2 MPSA42 má maximální povolený proud 0,5A, otevřený přitom je na přibližně 420mA a tuto hodnotu není dobré překračovat.
Zapojení destičky
Vstupní svorkovnice P1 se připojuje k Raspberry PI a oddělenému napájení. Shora dolů je zapojení následující:
- Zem PI
- GPIO pin
- 5V PI
- Oddělené napájení Zem
- Oddělené napájení 5V
Výstupní svorkovnice P2 se připojuje k externí vstupní nebo výstupní elektronice. Shora dolů je zapojení následující:
- Zem PI
- GPIO vstup
- GPIO výstup
- Oddělené napájení Zem
- Oddělené napájení 5V
Zařízení, které je vstupní a tudíž poskytuje napětí ke čtení na GPIO port, se připojí mezi GPIO vstup a Zem PI.
Zařízení, které má být ovládáno GPIO pinem a tudíž je výstupní, se připojí mezi Oddělené napájení 5V a GPIO výstup. GPIO výstup je připojen na tranzistor Q2, který propojuje obvod k Oddělené zemi.
Samostatný konektor Oddělená zem lze využít k neovládanému napájení nějaké připojené elektroniky.
Možná zapojení GPIO pinů k destičce
SPRÁVNÉ GPIO pin nastavený jako výstup, destička přepnutá na ochranu výstupu.
SPRÁVNÉ GPIO pin nastavený jako vstup, destička přepnutá na ochranu vstupu.
ŠPATNÉ GPIO pin nastavený jako výstup, destička přepnutá na ochranu vstupu. V tomto případě pokud bude GPIO pin nastaven na 3.3V, poteče z něj proud 5.4mA skrz špatně nastavenou destičku přes Zenerovu diodu do uzemnění, GPIO pin by ale neměl být poškozen, jelikož se nepřesáhne maximální proud 16mA.
ŠPATNÉ GPIO pin nastavený jako vstup, destička přepnutá na ochranu výstupu. V tomto případě se nestane nic, na GPIO bude hodnota 0V.
Praktická pozorování chování obvodu
Na testovacím zapojení na nepájivém poli jsem naměřil tyto hodnoty na různých podstatných místech v obvodu:
Diodou optočlenu protéká proud 18.4 mA při napájení 5V.
Na bázi tranzistoru Q1 teče proud 415 uA při připojení na 3,3V GPIO výstup.
Na zenerově diodě je při vstupu 3.3V 2,81V, což je dostatečně nad hranicí, kdy Raspberry Pi rozpoznává vysokou hodnotu napětí na GPIO vstupu.
Na zenerově diodě je při vstupu 12V 3.75V, což by mělo stačit na ochránění GPIO vstupu před chybným zapojením.
Při špatném přepnutí destičky na vstup a připojeného GPIO jako výstup, teče zenerovou diodou proud 5.4mA, což nepoškodí GPIO pin.
8 současně zapojených výstupních GPIO pinů s připojenými destičkami, bude mít spotřebu cca 147.2mA z 5V napájení, což je v mezích možností Raspberry Pi. A spotřebu cca 3.32mA z 3.3V napájení, což je také v mezích možností.
8 současně zapojených destiček nastavených jako vstupní, ale se špatně připojenými výstupními GPIO piny, bude mít spotřebu cca. 43.2mA z 3.3V. To je také v mezích, i když na hraně, jelikož maximální proud z 3.3V větve je 50mA. Nicméně ke špatnému zapojení tolika pinů nedojde zase tak často.
Pokusem bylo zjištěno, že Raspberry Pi 2 rozpoznává na vstupním pinu hodnotu HIGH (logická 1), při cca 1.27V. Hodnota LOW (logická 0) je rozpoznána při cca 1.16V
Aby vstupní pin fungoval správně, je nutné použít vnitřní pull up nebo pull down rezistor, který je možné nastavit programově. Bez tohoto kroku je každý vstupní pin extrémně citlivý. I obyčejný kousek drátu připojený na takový pin, funguje jako anténa a reaguje na okolní šum.
Při nastavení pull up rezistoru, je na pinu 3.3V a je možné testovat na něm hodnotu LOW.
Při nastavené pull down rezistoru, je na pinu 0V a je možní testovat na něm hodnotu HIGH.