STM32F3 ADC Birimi Derinlemesine İnceleme

Önceki yazılarımızda CubeMX programı sayesinde ilk programımızı çalıştırmış ve HAL kütüphanesinin ADC fonksiyonlarını derinlemesine incelemiştik. Şimdi ise sadece HAL kütüphane kılavuzu ile kalmayacak ve teknik veri kitapçığı üzerinden ADC donanımını öğreneceğiz. Unutmamak gerekir ki HAL kütüphanesi her ne kadar donanım soyutlaması konusunda bize eksiksiz yardımı verse de donanımı bilmediğimiz zaten donanım hakkındaki bu fonksiyonları kolay kolay kullanamayız. 32-bit mikrodenetleyiciler üzerinde çalışırken Arduino’da olduğu gibi donanımı bilmeme lüksümüz yoktur. HAL kütüphanesi bu konuda bize çok geniş donanım bilgisi olmadan program yazdırabilse de hiç donanım bilmeden program yazmamız mümkün olmaz. Çünkü biz mikrodenetleyici içindeki uygulamaları değil mikrodenetleyicinin donanımını çalıştırıyoruz. Belki daha üst seviye katmanları kullandığımızda donanım bilgisine ihtiyacımız olmasa da HAL seviyesinde yine donanım bilgisi gerekmektedir.

RM0316 numaralı STM32F3 referans kılavuzundan ADC bölümünü açıyoruz ve okumaya başlıyoruz.

Bizim kullandığımız mikrodenetleyicide dört adet ADC birimi bulunuyor ve bu birimler birbiriyle eşleştirilmiş haldedir. Yani ADC1 ve ADC2 ile ADC3 ve ADC4 çiftli modda çalışabilir. Bu çalışma esnasında ADC1 ve ADC3 birimleri ana aygıt görevinde olacaktır. Her ADC biriminin 19 kanala kadar kanal desteği vardır. Her bir kanal bir ayağa denk gelmektedir. ADC birimlerinin çevirim tarzı tekli, devamlı, tarama ve aralıklı modda olabilir. ADC okuma değeri 16-bitlik yazmaçta sola veya sağa hizalı saklanır.

ADC birimleri AHB yolunda haritalandırılmıştır. Analog watchdog giriş gerilimi üst veya alt eşik değerinde olunca uygulama tarafından saptanmasına yarar. Ayrıca düşük güç tüketimi modu bulunup düşük frekansta düşük güç tüketimi sağlamaktadır.

ADC biriminin başlıca özelliklerine geldiğimizde 4 adet ADC biriminin çiftli modda çalışabildiğini söylemiştik. Ayrıca 12, 10, 8 ya da 6-bit ayarlanabilir çözünürlüğe sahiptir. En önemli noktalardan biri ise ADC birimlerinin oldukça hızlı olmasıdır. Örneğin AVR mikrodenetleyicilerde 15 KSPS yani saniyede 15 bin örnek yani okuma yapılabiliyordu. Bu düşük frekanslı ya da durağan sinyalleri okumakta yeterli olsa da yüksek frekanslı sinyalleri okuyup bunları yorumlamakta yetersiz kalmaktaydı. STM32F3 mikrodenetleyicilerin 12-bit çözünürlükte hızlı kanalda 0.19us yani saniyede 5.1 milyon, yavaş kanalda ise 0.21us yani saniyede 4.8 milyon ölçüm yapabildiğini görüyoruz. Bu harici modüllerle elde edilemeyecek bir hızdır.  ADC biriminin bana göre en önemli özelliği yüksek hızıdır. ADC çevirim zamanı AHB veri yolu saat frekansından bağımsızdır. Üstelik çevirim hızı eğer çözünürlük 10 bite düşürülürse 0.16us yani saniyede 6.25 milyon ölçüme çıkabilir. Her kanal için tekli veya diferansiyel giriş seçilebilir ve bu programlanırken seçilir.

AHB uydu veri yolu hızlı veri işlemeyi sağlar ve birim kendi kendini kalibre edebilir. Kanal arasında programlanabilir örnekleme zamanı mevcuttur. GPI-DMA tarafından normal çevirimlerde idare edilebilir. Enjekte kanallarda 4 ayrı veri yazmacı bulunmaktadır.

ADC biriminin düşük güç özelliklerine baktığımızda hız uyumlu düşük güç modunda düşük frekansta çalışırken ADC’nin güç tüketimi düşer. Ayrıca veri yolunun frekansı düşük olsa da ADC performansından ödün vermez. AHB yolunun hızı kaç olursa olsun 0.19 mikro saniye çevirim zamanı hızlı kanallarda elde edilebilir.

Her 4 ADC birimini için 5 kanala kadar GPIO ayaklarında hızlı analog kanalı mevcuttur. Yavaş analog kanalları ise 11’e kadardır. Her bir birimde kaç adet kanal olduğu mikrodenetleyicinin tipine bağlı olarak aşağıdaki tabloda verilmiştir.

Ayrıca ADC birimlerinin bazı kanallarına mikrodenetleyicinin başka birimleri bağlanmış olabilir. Bunlar aşağıdaki tabloda verilmiştir.

Görüldüğü gibi benim kullandığım mikrodenetleyicinin ADC1 biriminde sıcaklık algılayıcısı, VBAT, VREFINT ve OPAMP1 referans gerilimi çıkışı için kanal bağlantıları mevcut. Diğer bağlantıları tablodan görebiliyoruz. Bu OPAMP, VBAT, VREFINT gibi tabirler mikrodenetleyiciyi incelediğimiz makaleleri okuyanlara tanıdık gelecektir. Öncelikle mikrodenetleyicinin datasheetini okuyarak bir parça donanım bilgisi edinmiştik. Fakat referans kılavuzunda bu donanım bilgisi bütün ayrıntısıyla yazmakta.

ADC’de çevirimin başlatılması normal ya da enjekte çevirim için yazılım ile başlatılabilir. Aynı zamanda ayarlanabilir kutupta donanım tetikleyicileri tarafından normal ve enjekte çevirimler için çevirim başlatılabilir.

Çevirim modları arasında tek kanal ya da sıralı kanal tarama şeklinde çevirim olabilir. Tekli modda seçilen girişler tetikleme başına bir defa ölçülür. Devamlı modda seçilen ayaklar peş peşe ölçülür. En hızlı ölçüm yolu budur. Bir de aralıklı (discontinious) mod vardır. ADC birimlerinin çiftli çalışabileceğini önceden söylemiştik. Ayrıca her çevirim bitince kesme üretilir. Bunun yanında sıralı ölçümde ve analog watchdog’da kesme üretilmektedir. Her ADC başına 3 adet analog watchdog bulunmaktadır. ADC besleme gereksinimi 1.8V – 3.6V arasında olup ADC giriş aralığı Vref- ve Vref+ arasındaki bir gerilimdir. Aşağıda ADC biriminin diyagramını görmekteyiz.

Kitapçıkta yer alan bütün diyagramlar AVR ile karşılaştırırsak oldukça karmaşık görünecektir. Fakat bunu öğrenmekten başka çaremiz yok. Başta dediğimiz gibi eğer yapacağımız uygulamalar basit olacaksa ve yüksek özellikli çevre birimleriyle işlem gücü gerektirmiyorsa AVR mikrodenetleyicilerde kalmak ve bu zahmete girmemek lazımdır. Fakat bizim yapacağımız uygulamalarda AVR mikrodenetleyiciler yetersiz kaldığı için bu zahmete giriyoruz.

Şimdi ADC ayaklarını ve iç sinyalleri açıklayan tabloya bakalım. Önceden dediğimiz gibi ADC birimi tamamen dışarıya yönelik bir birim değildi. Bazı kanallar içeriden başka birimlere bağlanmaktaydı. Mikrodenetleyicinin iç birimlerini beraber kullanmakla mikrodenetleyicinin gerçek gücünü kullanmış oluruz. O yüzden bunları iyice öğrenmemiz gereklidir.

İç Sinyal Adı Sinyal Tipi Açıklama
EXT [15:0] Giriş 16’ya kadar harici tetikleme girişi. ADC ana ve ADC uydu aygıtlar arasında paylaşılır. Bu girişler çip üzerindeki zamanlayıcılara bağlanabilir.
JEXT[15:0] Giriş 16’ya kadar dış tetikleme girişi enjekte çeviriler içindir. Öteki normal çeviriler için kullanılmaktadır.
ADC1_AWDx_OUT
ADC2_AWDx_OUT
ADC3_AWDx_OUT
ADC4_AWDx_OUT
Çıkış İç analog watchdog çıkışı çip üzerindeki zamanlayıcılara bağlıdır. (x = analog watchdog numarası 1, 2, 3)
Vrefopamp1 Giriş Dahili opamp için referans gerilimi çıkışı 1
Vrefopamp2 Giriş Dahili opamp için referans gerilimi çıkışı 2
Vrefopamp3 Giriş Dahili opamp için referans gerilimi çıkışı 3
Vrefopamp4 Giriş Dahili opamp için referans gerilimi çıkışı 4
Vts Giriş Dahili sıcaklık algılayıcısının gerilim çıkışı
Vrefint Giriş İç referans geriliminin gerilim çıkışı
Vbat Giriş Besleme Harici batarya gerilim beslemesi

ADC ayaklarının görevleri de tabloda şu şekilde verilmiştir.

Ad Sinyal Tipi Açıklama
Vref+ Giriş, Analog referans + ADC’nin pozitif referans bağlantısı. 1.8V ile VDDA arasındadır.
Vdda Giriş, Analog Besleme Analog beslemesidir. 1.8V ile 3.6V arasınadır.
Vref- Giriş, Analog referans – Analog negatif referans gerilimidir. Vref- VSSA’ya eşit olur.
Vssa Giriş, analog besleme şase Analog besleme şasesidir ve Vss’ye eşittir.
Vinp[18:1] Pozitif analog giriş kanalları Dahili veya harici kanallara bağlanabilir.
Vinn[18:1] Negatif analog giriş kanalları Vref-‘ye ya da dış kanallara bağlanabilir.
ADCx_IN15:1 Harici analog giriş sinyali 16’ya kadar analog giriş kanalı olabilir. 5 hızlı kanal ve 10 yavaş kanal.

Teknik veri kitapçığında bu saydığımız özellikler ayrıntısıyla anlatılmaya devam etmektedir. Fakat bizim bunların hepsinden bahsedecek zamanımız olmadığı için bir başlangıç yapıyoruz. Ayrıca ADC yazmaçları da oldukça fazla olup uzun uzun anlatılmaktadır. Kısacası bir ADC birimi bile bazı mikrodenetleyicilerin datasheetinden uzun tutmaktadır.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.