Sıfırdan STM32F0 Dersleri – ADC

  • 3 sene önce, Baran EKREM yazdı.
  • 0 Yorum
  • 421 Kişi Okudu

stm32f0discoveryBu yazıda ADC örneği yapacağız.ADC ölçümü için potansiyometre ile gerilimi ölçüp USART ile bilgisayara aktaracağız. ADC bildiğiniz üzere Analog Dijital Converter. ADC de bilinmesi gereken özelliklerden biri çözünürlük. STM32F0 da 12-10-8-6 bit seçenekleri mevcut.Değerleri dijital olarak alacağımızdan olabildiğince hassas olarak alabilmek için 12 bit çözünürlük kullanıyoruz.Seçtiğimiz çözünürlük bize kaç adım(Step-ADC Value) verecek bunu hesaplayalım.Oldukça basit 2^(bit) 12 bit için 2^(12) = 4096 eder.

 

Şimdi işlemci 3.3V seviyesinde çalışıyor peki her adc adımı kaç volta denk geliyor buna bakalım.
3.3/4096 = ( 0,0008056640625 )
Yani gerilimi ölçmek için bu değeri okuduğumuz adc değeri ile çarpacağız ve gerilimi elde edeceğiz.Kite bir adet potansiyometre bağlayalım.Orta bacağı GPIOA.2 bağlayalım ve diğer bacakların birini VDD diğerini GND ye bağlayalım.
Şimdi önceki derslerden hatırladığımız üzere RCC, GPIO, USART, TIM3, NVIC çevre birimlerini hazırlayalım. TIM3 kesme olarak kullandım.1/2 saniyeye ayarlıyoruz.Kesme geldiğinde ölçüm yapıp gönderme işlemini yapacağız. Sırayla başlayalım.

Buradaki tek farklı durum A.2 yi AN yani Analog olarak ayarlamamız.

UART’ı ayarlıyoruz.TX modda olması yeterli, zaten belirli aralıklar ile sadece gönderme yapacağız.

Kesmemiz için TIM3 ve NVIC’i unutmuyoruz.

ADC değerlerimiz float olacak.Bu float veriyi USART üzerinden bilgisayara atmak için string’e çevirmek daha mantıklı olacaktır.Bu stringleri yollayacak basit bir fonksiyon oluşturdum.Global olabilmesi için registerlerden yaptım.

Tabi float değerleri stringe çevirmek için de sprintf’i kullandım.

Önemli Not ! : Sprintf ile float’ı kullanabilmek için projede build options >Debug>Compiler Settings>Other Options’a gelerek ilk tırnak arasındaki değeri eklemelisiniz.  “-u _printf_float”
Sağ olsun Muhittin ağabey çözmüş bende kendisinden öğrendim.

Şimdi ADC kurulumuna geçebiliriz.İşlemler oldukça basit. Structure tanımlıyoruz ve parametreleri giriyoruz.Önemli bir kaç noktayı değinmekte fayda var.Önce çözünürlüğü belirtiyoruz.Alacağımız data’nın sağa mı sola mı yaslanacağını belirtiyoruz.Diğer ayarlar ise spesifik.Detayları inceleye bilirsiniz(Sağ tıkla kaynağına git şeklinde) Ayarları yükleyip init ettikten sonra.ADC pinin belirtiyoruz.Ben ADC1 deki ADC_Channel_2 yi kullandım.Yani GPIOA.2 cmd.CMD ile çalıştırarak ADC_FLAG_ADRDY ile hazır olana kadar bekliyoruz.ADC kesmesini kullanmadığımdan kapattım.Ve okuma işlemi için ADC hazır.

Basit bir fonksiyonda kuma yapabiliriz.

Main içerisinde bayrağı kontrol ederek okuduğumuz gerilimi bilgisayara aktaralım.

Kodların tamamı.

Uygulamanın videosu aşağıdadır.

 

Bir Yorum Yazın