STM32F3 ADC Birimi Derinlemesine İnceleme -2-

Önceki yazımızın devamı olan bu yazıda referans kılavuzu üzerinden ADC birimini incelemeye devam ediyoruz.


Saat Sinyali 

ADC birimi ikili saat mimarisine göre tasarlanmıştır. Yani ADC saati AHB veri yolu saatinden bağımsızdır. Bu giriş saat sinyali iki farklı saat kaynağından seçilebilir.

ADC saati ADCxy_CK (xy = 12 ya da 34) olup bağımsız ve AHB veri yolu ile asenkron halde olabilir. Asenkron saat dediğimiz birinci seçecekte saat kaynağı PLL’nin 72MHz’e kadar çıkan çıkışına bağlı olup ön derecelendirici ile 1’den 256’ya kadar ikinin katları şeklinde bölünür. Bunu CubeMX programında da görebilirsiniz.

İkinci seçenek ise senkron saat olup eğer ADC zamanlayıcı ile tetiklenmesi gerekiyor veya senkronize ihtiyacı oluyorsa kullanılabilir. Senkron saatte AHB veri yolunun saati alınıp 1, 2 veya 4’e bölünebilir. Biz uygulamada senkron saati seçip doğrudan AHB veri yolunun saatine eşitledik. ADC saat şeması aşağıdaki gibidir.

Burada RCC’nin Reset ve saat denetimcisi olduğunu görüyoruz. RCC için HAL kütüphanesinde ayrı bir sürücü olduğunu unutmayalım. Yani ADC ayarlamasını yaparken RCC tarafından da bir ayarlama gerekecektir. Burada iki ADC grubuna ayrı  saat sinyallerinin gittiğini görmekteyiz. ADC1 ve ADC2’ye ayrı ADC3 ve ADC4’e ayrı sinyal gitmektedir. HCLK dediğimiz ise AHB veri yolunun saati olmaktadır. Görüldüğü gibi burada 1, 2 ya da 4′ bölünmektedir. ADC12_CK ve ADC32_CK adındaki saat sinyali asenkron saat sinyalidir ve kaynağı PLL’dir.

ADC saati ile AHB saati arasında genel olarak bir sınırlama olmasa da eğer bazı kanallar enjekte olarak programlanırsa şu kurallara uymak gereklidir.

  • Eğer tüm kanallar 12 ya da 10 bit çözünürlükte ise Fhclk, Fadc/4 ‘den büyük veya eşit olmalıdır.
  • Eğer kanallardan bazıları 8-bit ise Fhclk, Fadc/3’den büyük veya eşit olmalıdır.
  • Eğer bazı kanallar 6-bit ayarlanmış ise Fhclk, Fadc/2’den büyük veya eşit olmalıdır.

ADC Gerilim Regülatörü (ADVREGEN)

Aşağıdaki sıraya göre ADC çalışmaktadır.

  1. ADC’nin dahili gerilim regülatörü etkinleştirilir.
  2. Yazılım belli bir süre başlangıç zamanını beklemelidir. Ondan sonra kalibrasyon ve ADC’yi etkinleştirme sürecine girilir. Bu bekleme yazılım tarafından sağlanmak zorundadır. Tadcvreg_stup en kötü 10 mikro saniye olmalıdır.

ADC işlemi bittiğinde ADEN biti sıfır (0) yapılarak ADC kapatılır. ADC gerilim regülatörünü devre dışı bırakarak güç tasarrufu sağlanabilir.

Tekli ya da Diferansiyel Giriş Kanalları 

Tekli modda analog gerilim kanal ile Vref- arasındaki fark olarak ölçülür. Yani Vref- 0 ise ve Vref+ 3.3V ise tek bir ayaktan 0-3.3V olma durumuna göre 12 bitte 0 ile 4096 arasında değer alırız.
Diferansiyel giriş modunda ise kanal numarası ve kanal numarası + 1 olarak iki ayak arasındaki fark ölçülür. Örneğin 1. kanal pozitif giriş olarak 2. kanal ise negatif giriş olarak değerlendirilir. İki kanal arasındaki farkı ölçmeye diferansiyel giriş denmektedir.

Kalibrasyon 

Bütün ADC birimlerinde otomatik kalibrasyon birimi vardır ve bu kalibrasyon ADC’nin açılışında gerçekleşir. Çalışma boyunca ADC 7 bitlik bu kalibrasyon verisini saklamaktadır. Kalibrasyon süresi boyunca herhangi bir ölçüm yapılmaması gereklidir. Kalibrasyon offset hatalarını ortadan kaldırır. Bu hatalar çipten çipe farklılaşmaktadır. Kalibrasyon ADCAL bitinin bir yapılmasıyla uygulama tarafından yapılmaktadır. Kalibrasyon ADC devre dışı iken gerçekleşir.

Tekli Çevirim Modu ve Devamlı Çevirim Modu

Tekli çevirim modunda ADC birimi tek bir ölçüm yapar. Devamlı çevirim modunda ise tetiklemeye göre peş peşe ölçüm yapılmaktadır. Aynı anda tekli veya devamlı çevirim modu gerçekleşemez.

Analog Watchdog 

Analog watcdog birimleri bazı kanallardaki gerilimi denetlemektedir. Şekilde koruma altına alınan gerilim değerini görebilirsiniz.

Bu yapı belli bir sınır değer belirler ve bu değerler aşılması durumunda farklı işlemleri yürütür. Yazılımsal yaptığımız kontrol yapısı burada donanımsal olarak yürütülmektedir.

Sıcaklık Algılayıcısı 

Sıcaklık algılayıcısı aygıtın iç sıcaklığını ölçer. Aygıtın içerisinde doğrudan giriş kanalına bağlı olduğundan bu kanallar sıcaklık algılayıcısından çıkan gerilimi ölçmektedir. Kullanım dışı olduğunda devre dışı bırakabiliriz. Sıcaklık algılayıcısının değeri doğrusal olarak artmaktadır. Sıcaklık algılayıcısının kalibrasyon değeri sistem hafızasında saklanmaktadır. İsabetli bir ölçüm için bu değerler okunmalı ve buna göre hesaplama yapılmalıdır. Algılayıcı -40 ile 125 derece arasında ölçüm yapmaktadır ve isabetliliği +-2 derecedir. Aşağıdaki şemada sıcaklık algılayıcısının yapısı görülebilir.

ADC Kesmeleri 

STM32 mikrodenetleyicilerde kesmelerin oldukça zengin olduğunu söyleyebiliriz. ADC birimi için de AVR’de hiç olmayan kesmeler bunlarda vardır. Bu kesmeler madde madde şöyle sıralanabilir.

  • ADC’ye güç geldiğinde, ADC hazır olduğunda yürütülen kesme
  • Normal gruplardaki bir çevirim bitiminde yürütülen kesme
  • Normal gruplarda sıralı çevirim bitiminde yürütülen kesme
  • Enjekte gruplarda çevirim bitiminde yürütülen kesme
  • Analog watchdog algılama esnasında yürütülen kesme
  • Örnekleme aşaması bittiğinde yürütülen kesme
  • Veri aşımı sırasında yürütülen kesme
  • Enjekte sıra beklemesi taştığında yürütülen kesme

Buraya kadar gözüme çarpan ve ayrıntı olmayan bazı başlıkları seçerek buraya aktardım. Referans kılavuzunda şu bit şöyle yapılacak tarzında uzun uzun anlatılmakta. Buraya kadar yazmaçlara geldik fakat giriş seviyesinde yazmaçlarla çok uğraşmadan konuyu bitiriyoruz. Bu zamana kadar ADC donanımını, HAL sürücünü ve ADC ile okuma yapmayı öğrendik ve ADC için şimdilik bizim için yeterlidir.

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.