GPIO Input Akım Kaçağı

7 May 2021

Mikrokontrolcü uygulamalarındaki en popüler konu olan GPIO'ları kullanırken "Ben pinMode(x, INPUT); dedim arkadaşım! Gerisine karışmam, okuyor mu okuyor!" demeyin. Yeni öğrendiğim bir bilgiyi sizinle paylaşayım.

Sürdürülebilir enerji, GPIO'lardan kaçırdığınız akımı yok etmekle başlar. Güç mikrokontrolcü ile olsun!

Bir mikroişlemcinin (Kontrolcü mü, işlemci mi artık karışıyor valla. Yeniyiz, affedin.) pin ayağının hemen içinde neler olduğunu anlatacağım şimdi sizlere. Tabi bunun için biraz elektronik arkaplanı sosu da ekleyeceğim yazıya. İyi okumalar şimdiden :).

CMOS

CMOS devresi, bir NMOS ve bir PMOS'un bağlanması ile oluşan güzelliktir. Aşağıdaki devre şemasından da göreceğiniz üzere, PMOS kısmı $V_{dd}-V_{in}-V_{out}$, CMOS kısmı ise $V_{ss}-V_{in}-V_{out}$ kısmıdır. Eğer ki $V_{in}$'den $0$ gelirse $V_{dd}$ bacağı ile $V_{out}$ bacağı bağlanır. $1$ gelirse $V_{ss}$ ile $V_{out}$ bacağı bağlanır. Bu görselde her iki MOSFET'e de bağlı olan ve $V_{in}$'in gittiği yola gate denir. Görselin biraz büyük olduğunun farkındayım, Ghost ayarı düzeltmeme izin vermedi malesef.

CMOS Devresi, Kaynak Vikipedi TR.
CMOS Devresi, Kaynak Vikipedi TR.

Pin Girişi Hikayesi: CMOSinverta, CMOSverta!

Şimdi sizden $V_{in}$ bacağına bağlı bir inverter ve PMOS'un "gate"ine (Gate kelimesi yerine kapı kullanabilir miyim bilmiyorum. Henüz MOSFET dersi almadım. Türkçeleri hakkında bilgim yok.) bağlı bir inverter düşünmenizi istiyorum. İşte bir pinin içerisindeki mekanizma budur.

Bir simülasyon yapalım hızlıca kafamızdan. Varsayalım programımızdan $1$ verildi pine. Bu sinyal ilk olarak inverterımıza gelecek. Burada 0'a dönüştürülecek. Daha sonra CMOS'umuzun içine girecek ve iki kola ayrılacak. Üstteki kolda, PMOS kolu, yine bir inverter ile karşılacak. Bu inverter bizim 0'ımızı 1'e çevirecek. PMOS'umuza gelen 1 sinyali tabi ki güç kaynağımız ile çıkışımızı birbirine bağlayacak. Bu sayede pinin çıkışında güç kaynağının voltajını göreceğiz. Vâla! Fark edeceğiniz üzere NMOS koluna giden 0 sinyali, NMOS tarafından işlenmeyecek ve toprak ile çıkış bağlantını yapmayacak.

Tersini hayal edelim. Program bu sefer 0 veriyor olsun. Sinyal inverterdan geçti ve 1 oldu. Yine iki kola kırıldı. PMOS'a giden sinyal invertardan geçtiği için yine 0'a dönüştü ve PMOS'u aktive etmedi. NMOS'a giden sinyal ise 1 olduğu için çıkış ile toprak arasındaki bağlantıyı yaptı. Bu bağlantı sayesinde çıkış pininde biz insanlar 0 volt okumaya başladık.

E hani 'input'tu?

Haklısınız. Kendimi kaptırıp outputu anlatmışım. Input hikayesine göre ise olay aynı sokette yalnızca CMOS'taki mosfetlerin ters bağlanması ile gerçekleşiyor. Ayna efekti gibi düşünebilirsiniz. Artık MOSFET'lerin gateleri pinin çıkışına bakıyor halde. Tahmin edebileceğiniz gibi artık MOSFET'lerin aktive edilip edilmemesi mikroişlemciye giden kolu güç kaynağına veya toprağa bağlayacak.

Şimdi, biliyoruz ki, çıktıdan (Evet, input'a döndüğümüz için çıktı oldu.) gelen 1 sinyali PMOS'u aktive eder ve güç kaynağını girdiye bağlar. 0 sinyali ise NMOS'u aktive eder ve toprağı girdiye bağlar.

Eğer böyle güzel bir devreniz varsa, yani pinin çıkışında (veya input pininizin girişinde, kafalar karıştı...) bir sabit bir güç kaynağınız varsa veya direk toprak bağlantısı yapıldı ise hiçbir şekilde akım kaçağınız yoktur. Buraya kadar her şey tamam. Peki ya giren voltaj değeri değişken ise?

Bu yanardönerli voltajımız kimi zaman PMOS'u açacak, kimi zaman NMOS'u açacak, hızlıca bir birini bir diğerini açacak, ve ikisini birden bile açabilecek. Burada sorun o voltaj değerini bilmememiz. Eğer ikisini birden açarsa, güç kaynağından toprağa ($V_{dd}$'den $V_{ss}$'ye) bir akım geçmeye başlayacak. Şimdi diyebilirsiniz ki ortada bir empedans yok, nasıl akım var? Buna cevabım pek tabi ki MOSFET'ler ideal mi ki?

Bu sıradışı durum sizin pilinizi veya güç kaynağınızı minik minik ancak sürekli tüketecek. Bu da pek tabi ki enerji israfı demek oluyor.

Dünyayı kurtarmak için ne yapabiliriz?

Azıcık kaliteli bir mikrokontrolcü alabilir ve Otto Schmitt hocamıza dua edebilirsiniz. Schmitt, henüz üniversite yıllarındayken kendi adı ile anılan tetikleyici devresini tasarlamış - Vikipedi'nin yalancısıyım. Ben size bu satırları yazıp yan sekmede bu devre nasıl çalışıyor onun için GIF arıyor iken, adam benimle (belki sizinle de) aynı yaşta, elektronik dünyasında tanınır bir insan olmanın en büyük yolunu almış.

Schmitt Tetikleyici Devresi, aldığı bir sinyali düşük veya yüksek şekline iki sinyale (kare sinyal) indirgeyen bir devredir. Yine Vikipedi TR'den aldığım aşağıdaki görsel sayesinde yaptığı işi çok daha kolay bir şekilde anlayabilirsiniz.

Schmitt Tetikleyici Devresi için sinyal girişi (en üstte) ve sinyal çıkışı (alttakiler).
Schmitt Tetikleyici Devresi için sinyal girişi (en üstte) ve sinyal çıkışı (alttakiler).

$U$ ile gösterilmiş sinyal tam olarak size anlatmak istediğim o düzensiz voltaj. Bu sinyal bazı durumlarda sizin iki mosfetinizi de aktive edebilir ve güç kaynağı ile toprak arasında istemsiz bir akım oluşmasına sebep olabilir. Bunu engellemenin yolu ise, gatelere bakan yola bir tane Schmitt Tetikleyicisi eklemek. Bu sayede giriş voltajı ne kadar değişirse değişsin, gatelerimize gelen sinyaldeki voltajın iki durumu olacağını bileceğiz. Bu iki duruma göre devremizin tepkisini de tahmin edebileceğiz. Tetikleyiciden çıkan sinyal ya PMOS'u ya NMOS'u açacak ve ikisini birden açamayacaktır. Bu sayede istemimiz dışında oluşan bir akıma asla sahip olmayacağız.

Bu yazıyı da burada sonlandırıyorum. Hatalarım var ise bana iletişim ile ulaşın, düzeltmek boynumun borcu. İyi günler dilerim herkese.