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.
Şekil 1: Örnek Alma-Tutma İşlemi
Ş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.
Ş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.
Şekil 4: INA122P Entegresi
Şekil 5: Örnek INA122P Amplifikatör Datasheet’i
INA122'nin kazancı, tek bir harici direnç (RG) bağlanarak ayarlanır:
Ş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).
Ş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.
Ş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.
Ş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