STM32 ADC Biriminini Anlamak

Son iki gündür ilk defa STM32’nin ADC birimiyle tanışmış olduk ve açıkçası yeni özellikleri ve modları çok da iyi anlayamadık. Tam anlamıyla anlamak için daha fazla araştırma ve zaman gerekse de ST firması bir uygulama notunda bunu basitleştirerek bize anlatmış durumdadır. Bir anda tamamını anlamayı ve öğrenmeyi kimse beklemesin çünkü piyasadaki en karmaşık ADC birimlerinden birine sahip bir mikrodenetleyiciyi öğreniyoruz. Şimdi ADC özelliklerine bir daha bakalım.

Tek Kanal Tek Çevirim Modu

Bu mod en basit ADC modudur. Bizim Arduino’da da analogRead() fonksiyonuyla yaptığımız iş tek kanal modu ile yapılmaktadır. Örneğin bir LDR, sıcaklık algılayıcısı ya da batarya gerilimi ölçmek kadar basit analog işlem yapacaksanız sizin kullanacağınız mod budur. Fakat analog işlemler her zaman bu basitlikte olmayabilir. Bunun için gelişmiş özelliklerle beraber gelmektedir. Bu tek kanal ve tek çevirim modunu Arduino kullanıcıları bile rahatça anlayabilir. Şemada da gösterildiği gibi ADC başlar, tek bir kanaldan tek bir değer okur ve durdurulur.

Çoklu Kanal Tek Çevirim Modu

Bu mod birden çok kanalda bağımsız modda çevirim yapmaya yarar. ADC sıralayıcı ile 16 kanala kadar farklı örnekleme zamanı ile farklı sırada çevirim yapabiliriz. Böylelikle çevirim süreci içerisinde ADC’yi durdurup tekrar başlatmadan sırasıyla ölçüm yapabiliriz. Bu mod işlemci ve yazılım yükünü hafifletmektedir. Aşağıda ADC sıralayıcısı 7 kanalı farklı örnekleme zamanında çevirmektedir.

Burada anlamanız gereken nokta ADC biriminin başlatılışı ve bitişi arasında farklı kanallardan tekli ölçüm yapıldığı ve bunun belli bir sırayla gerçekleştiğidir. Şemadan daha iyi anlayabilirsiniz.

Burada farklı kanallardan farklı değerleri elde ettiğimiz için yapacağımız uygulamanın karmaşıklığı biraz artacaktır. Tek bir batarya durumu veya sıcaklık algılama değil çoklu algılayıcıların beraber kullanıldığı sistemlerde kullanma ihtiyacı duyarız. Örneğin el hareketi algılayıcıları her bir parmak için bir algılayıcı şerit kullanmaktadır. Bunun direnci her parmakta farklı olduğu için her parmağa bağlı olan flex algılayıcıyı sırayla ölçmek gereklidir. Bunun gibi farklı değerleri ölçmemiz gerektiğinde tek çevirim ve çoklu kanal modunu kullanırız.

Tek Kanal Sürekli Çevirim Modu 

Bu tek kanal sürekli çevirim modunda bir kanal üzerinden belirsiz bir sayıda sürekli çevirim yapar. Bu mod ADC’nin arka planda çalışabilmesine olanak tanır. ADC sürekli çevirim yaparken asla işlemciyi meşgul etmez. Ayrıca bu modda DMA kullanılarak işlemci yükü de azaltılabilir. Bu mod ADC’nin sonsuz bir döngüye girmesi gibidir.

Görüldüğü gibi tek bir kanaldan sürekli olarak ölçüm yapılıp ADC çalışmaya devam etmektedir. Bu sürekli ölçümü boş yere yapmanın bir anlamı yoktur elbette. DMA yani doğrudan bellek erişimi ve kesmeler ile kullanıldığında oldukça hızlı ve verimli bir kullanım olur. Bu sürekli ölçüm arka planda olduğundan sürekli güncel veri depolanmaktadır. O yüzden değer / zaman olarak ölçüm yapacaksak bunu kullanmamız gereklidir.

Çoklu Kanal (Tarama) Sürekli Çevirim Modu 

Burada birden fazla kanal sürekli olarak sırayla okunup çevirim yapılmaktadır. Sıralayıcı ile 16 kanala kadar sıralama yapıp farklı örnekleme zamanları ve sıraları belirleyebiliriz. Bu mod çoklu kanal ölçümüne benzer çalışsa da sürekli sırayla ölçüm yapıp sonra baştan tekrar ölçüm yapmaktadır. Tarama dediğimiz olay da budur.

Bunun örnek bir uygulaması olarak birden fazla pili şarj ettiğimiz bir cihazda pil durumlarını bu şekilde okuyabiliriz.

Enjekte Çevirim Modu 

Bu modda çevirim harici bir olay tarafından ya da yazılım tarafından tetiklenmektedir. Enjekte grubun normal kanal grubuna göre önceliği bulunmaktadır. Mikrodenetleyici normal çevirim modundaki çevirimi bırakıp enjekte çevirim moduna geçmektedir.

Şemada görüldüğü gibi ADC1 biriminin 0 ve 1 numaralı kanallarından sırayla normal çevirim yapılırken enjekte çevirim tetikleyicisi tarafından çevirim yarıda kesilir ve ADC1 biriminin 10 numaralı kanalından okuma yapılır. Bu çevirim bittikten sonra normal moda dönerek çevirime devam eder. Mikrodenetleyicilerdeki kesme özelliği gibi düşünebiliriz. Bu mod belli bir zamanda yapılacak ölçümü garantilemek için kullanılır. Zamanlayıcı tarafından tetikleme sağlayabiliriz.

Çiftli Mod

Çiftli mod en az 2 ADC birimini bulunduran mikrodenetleyiciler tarafından desteklenmektedir. İki ADC birimi de aynı anda ölçüm yapmaktadır. Her ADC sıralı ya da tekli olarak ölçümü yapar ve bu ölçüm yazılım tarafından veya dış tetikleyici tarafından başlatılabilir. ADC1 ve ADC2 birimlerinin ölçüm sonucu ADC1’in veri yazmacında saklanır ve bu 32-bit formattadır. Şekilde eş zamanlı olarak iki birimin ölçüm yaptığını görebiliriz.

Bu çiftli modu iki farklı sinyalin aynı anda okunması gerektiği uygulamalarda kullanabiliriz. Örneğin gerilim ve akımın aynı anda okunup gücün hesaplanmasında bu kullanılabilir. Aynı zamanda farklı kanallar vasıtasıyla tek faz ya da üç faz AC sinyali okuyabiliriz. Şekilde bunun bir örneği vardır.

Çiftli Yavaş Aralıklı Mod

Bu mod tek bir kanaldan çevirim yapmak için meydana gelmiştir. ADC1 ve ADC2 seçili kanalı 14 ADC saat çeviriminde okumaktadır. He ADC 28 ADC saat çeviriminde kanalı çevirir. Bu çevirim dış tetikleme veya program tarafından başlatılır ve ADC1 ve ADC2’nin çevirim sonucu 32-bit veri yazmacında saklanır. Sonraki çevirimin üzerine yazmamak için azami çevirim zamanı 14 ADC saat çevirimi olmaktadır. Bu da örnekleme zamanının 1.5, 7.5 ve 13.5 çevirim olmasıyla sonuçlanır.

Çiftli Alternatif Tetikleme Modu

Bu mod sadece enjekte kanal grubu ile kullanılabilir. Bu modda ADC1 ve ADC2 enjekte kanalları aynı dış tetikleyici ile çevirmektedir. İlk tetikleyici oluştuğunda bütün ADC1’deki bütün enjekte grup kanalları çevrilir. İkinci tetikleyici oluştuğunda ise ADC2’deki bütün enjekte edilmiş grup kanalları çevirilir. Gruptaki  azami enjekte kanal sayısı her ADC için 4 adettir.

Bu özellik örnekleme noktalarını birbirine oldukça yaklaştırmaktadır. Motor kontrol uygulamalarında kullanılmaya müsaittir.

Çiftli Kombine Normal/Enjekte Sürekli Mod

Bu mod çiftli halde normal devamlı modu enjekte özelliği ile beraber kulllandırır. Enjekte kanallar da sürekli olarak çevrilmektedir.

Bu mod 3 fazlı akımı belli bir zamanda okuyabilir. Örneğin iki akımı okuduğumuzda üçüncüsünü arasındaki ilişkiye göre nerede okuyacağımızı belirleriz.

Çiftli Kombine Enjekte Sürekli ve Aralıklı Mod 

Bu mod çiftli aralıklı mod ile çiftli enjekte sürekli modun birbiriyle birleştirilmesidir. Normal kanal tetiklendiğinde çiftli aralıklı çevirim başlar. ADC2 ilk çevirimi yapar ve sonrasına ADC1 kanalı çevirir ve böyle devam eder. Enjekte kanal tetiklendiğinde aralıklı kanal çevirimini durdurur ve iki ADC birimi enjekte kanalları çevirmeye başlar. Enjekte çevirim bittiğinde normal çevirime geri dönülür.

Bu çiftli kombine modu UPS sistemlerinde kullanabilirsiniz. Batarya gerilimi ADC watchdog ile görüntülenir ve çiftli aralıklı modda çevirilir. ADC ayrıca ne kadar güç tüketildiğini gerilimi ölçerek çiftli enjekte sürekli çevirim modunda görüntüler.

Görüldüğü gibi ADC birimlerinin özelliklerini oldukça iyi anladık ve kafamızda karanlık nokta pek kalmadı. Fakat tam anlamıyla öğrenmek için yine yazmaçları ve bitleri ve diğer ayrıntıları öğrenmemiz gerekiyor. Yine de bu noktaya kadar gelebildiysek işin çoğunu öğrenmişiz demektir.

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.