Blog'a Dön

Mikrodenetleyicinin ADC Özelliğini Kullanarak Veri Okumak

ADC Proje Uygulaması

Giriş

Bu çalışmadaki amaç bir sensörden ya da bir komponentten -10mV ile 10mV arasında analog sinyal çıkışı almak ve bu sinyali gerekli opamp devresi kurarak yükseltmek, yükseltilen değeri bir mikrodenetleyicinin ADC özelliğini kullanarak okuyabilmektir.

Çalışmada -10mV ile 10mV arasında sinyal üretmeyi dirençler kullanarak gerilim bölücü devresi ile elde ettim. Elde ettiğim değeri RC devresi ile filtreledim. Daha sonra INA122 opampı ile sinyali yükselterek mikrodenetleyicinin analog girişine verdim. Kullandığım mikrodenetleyici Arduino UNO olduğu için harici bir ADC modülü kullanmadım. Çıkışı seri port ekranından okuyarak elde etmek istediğim verilere ulaşmış oldum.

ADC Nedir?

ADC (Analog-to-Digital Converter), analog sinyali dijital sistemlerin algılayabileceği sayısal verilere dönüştürür. Mikroişlemcilerde bulunan ADC'ler genel olarak 10-12 bit çözünürlüktedirler. Bu çalışmada Arduino üzerindeki 10 bitlik ADC kullanılmıştır.

Örnek Alma Şekil 1: Örnek Alma-Tutma İşlemi Örnek Alma Grafiği Şekil 2: Örnek Alma Grafiği

Örnek Kod Yapısı

Örnek olarak alınan voltaj değerinin seri port ekranında nasıl okunduğunu gösteren kod yapısı şöyledir:


void Loop () {
  okunan_deger = analogRead(sensordegeri); // Sensörden gelen bilgi okundu
  
  Serial.print("Okunan Deger = "); 
  Serial.println(okunan_deger); 
  
  Serial.print("Voltaj = "); 
  // Voltaj değeri hesaplanıp ekrana yazıldı (5V referans, 10 bit)
  Serial.println((okunan_deger * 5) / 1023.0); 
  
  delay(250); 
}
                

Op Amp Nedir?

Op Amp (Operational Amplifier), elektronik devrelerin işlevselliklerini artırmak amacıyla kullanılan, sinyal yükseltme gücü çok yüksek olan entegre devrelerdir. DC ile beslenirler; akım ve gerilim kazancı sağlarlar.

Op Amp Sembolü Şekil 3: Op Amp Sembolü

INA122 Op Amp

Ina122 doğrusal düşük gürültülü diferansiyel sinyal alımı için hassas bir amplifikatördür. Çok düşük ve durgun bir akıma sahip olup, taşınabilir enstrümantasyon ve veri toplama sistemleri için idealdir.

INA122 Şekil 4: INA122P Entegresi INA122 Datasheet Şekil 5: Örnek INA122P Amplifikatör Datasheet’i

INA122'nin kazancı, tek bir harici direnç (RG) bağlanarak ayarlanır:

RG Direnci Şekil 6: INA122 RG Direnci Bağlantısı

Arduino ile ADC Uygulaması

Arduino kartında, analog voltajları okuyabildiğini belirtmek için etiketlerinin önünde 'A' bulunur (A0 - A5).

Arduino Analog Pinler Şekil 7: Arduino Analog Pinler

Devre Tasarımı ve Kodlama

Çalışmamda devre tasarımını Proteus üzerinden yaptım ve çıkışı sanal terminalden gözlemledim.

Devre Tasarımı Şekil 8: Proteus Devre Tasarımı

Arduino Proje Kodu:


#define loadcell A5
int duty_suresi = 100;

void setup() {
  Serial.begin(9600);
  pinMode(9, OUTPUT);
}

void loop() {
  analogWrite(9, HIGH);
  delayMicroseconds(duty_suresi); // Yaklaşık %10 duty cycle @ 1KHz
  
  analogWrite(9, LOW);
  delayMicroseconds(1000 - duty_suresi);
  
  int sensorValue = analogRead(loadcell);
  Serial.println(sensorValue);
  
  delay(500);
}
                

Sonuçlar

Seri port ekranından alınan veriler aşağıdaki gibidir. Ortalama 120 okuduğumuzu düşünürsek: 120 * 5 / 1023 = 0,58651 V elde etmiş oluruz.

Seri Port Ekranı Şekil 9: Seri Port Ekranında ADC Verileri

Kaynakça

  • Ege University, http://tec.ege.edu.tr/dersler/2014_B5_ADC.pdf
  • Peter Beshay, Benton H. Calhoun, Joseph F. Ryan, "A Digital Auto-Zeroing Circuit..."
  • ST. Life.augmented Company, st.com
  • Analog Devices INC (ADI) Company
  • Sparkfun Virtual Company, learn.sparkfun.com