AREF | Arduino ADC Referans Değerini Değiştirme

    Arduino ile ADC ölçümlerinde hep 5V kullanıldığı dikkatinizi çekmiştir. İşin aslı AVR 'nin bize sunduğu analog reference voltage değişikliğini Arduino ile de yapmak mümkün. Bu değişiklik için 3 farklı seçeneğimiz var, birincisi herkesin bildiği 5V olarak kullanmak (DEFAULT), ikinci seçenek AVR çip üzerinde gömülü halde gelen 1.1V 'luk referans voltajı(INTERNAL), diğeri de AREF pini üzerinden harici bir değeri analog referans olarak belirleyebiliyor olmamız(EXTERNAL).

    Peki analog referans değerini neden değiştirmeye ihtiyaç duyarız? ADC kaç bit oluşuyla bağlantılı olarak referans voltajını 2^n (2 üzeri n) sayısına böler, ADC kanalındaki ölçülmek istenen gerilim ile bu bölmeden elde ettiği aralıklardan hangisine uygunsa o dönüşümü sayısal olarak çıkartır. Bu arduino UNO için 10 bitlik bir değerdir. Referans voltajımız 5v ise, her adımımız yaklaşık olarak 5mV olacaktır:

5V/1024 = 0.0048828125

0.0048828125 / 2 = 0.00244140625

Bunun anlamı da ADC için 0.5 LSB 'lik  bir kuantalama hatası olduğuna göre ölçtüğümüz her değer için yaklaşık yine 2.5mV 'luk hata payımız var demektir. Eğer ki ölçeceğimiz gerilim, bulunduğu noktada ASLA 1.1V 'u aşmıyorsa, bu durumda referans voltajını 1.1 'a değiştirmek hata payımızı 1/5 oranında düşürür ve daha az hatalı bir sonuç okumamızı sağlar:

1V/1024 = 0.0009765625

0.0009765625 / 2 = 0.00048828125



Eğer ki 1.1 V yeterli değilse ve 5v da uygulamanız için fazlaysa ve hassasiyetin önem arzettiği noktada kendi analog referans voltajınızı üretip (bir voltaj bölücü yardımıyla mesela) AREF pinine bağlayabilirsiniz, bu durumda AREF pinine uyguladığınız voltajı 1024 'e bölerek hesaplamalarınızı yapabilirsiniz:    

ADC = (Vin*1024) / AREF

bizim durumumuz için ADC bilinen Vin hesaplanmak istenen olduğu için :

Vin = (ADC * AREF)/1024 

olacaktır. Burada

Vin : okunmak istenen voltajı

ADC : dönüşüm sonunda elde edilen ADC değerini

AREF : analog referans voltajını

1024 ise 2^10, 'dan ADC 'nin 10 bit olması dolayısıyla elde edilen sabittir. 12 bit bir ADC 'miz olsaydı bu sabit 4096 olacaktı.



Gelelim uygulamaya ve detaylara; normal şartlar altında ADMUX registerinin 7 ve 6. bitleri [REFS1:0] bu ayarlamayı yapmamızı sağlıyor, ancak siz Arduino kodu içerisinde bu register ile bu ayarlamayı yaptıktan sonra analogRead fonksyionunu kullanıyorsanız, -bu fonksiyon her çağırıldığında AREF i default olarak 5V 'a ayarlıyor- yaptığınız bu değişikliği fonksiyon tekrar değiştirmiş olacak ve kullanamıyor olacaksınız. Bu noktada ya dönüşümü kendiniz yazmaçları kullanarak yapacaksınız ya da yine arduino wiring_analog.c dosyasında yer alan analogReference fonksiyonunu ADC okumanızı yapmadan önce kullanacaksınız.

Arduino Analog Referans Voltajını 1.1V a ayarlamak için analogRead fonksiyonundan hemen önce:

  analogReference(INTERNAL);

External ayarlamak için:

  analogReference(EXTERNAL);

5V ' a ayarlamak için

  analogReference(DEFAULT);

şeklinde kullanabilirsiniz. Hatırlatmakta fayda var bu fonksiyon analog referans voltajını değiştirdikten sonra tüm adc okumaları bu ayar üzerinden yapılır, eğer ki başka bir kanalda 5V kullanırken bir diğer kanalde 1.1V kullanmak isterseniz, her okumadan önce mutlaka bu fonksiyonla referans voltajını ayarlamanız gerekiyor. Bir diğer önemli konu da INTERNAL olarak set ettiğinizde AREF pinine herhangi bir voltaj uygulamadığınızdan emin olmanızdır.

EXTERNAL olarak ayarladığınızda da söylememiş olmayalım diye yazıyorum, AREF pinine uygulayacağınız voltaj 5v ' geçmemelidir. Yani oraya 20V uygulayıp 0-20V arası ölçüm yapayım diyemiyorsunuz, böyle bir ihtiyacınız varsa : Arduino İle Yüksek Voltaj Ölçme konusunu okumanızı öneririm.





Yorumlar

Bu blogdaki popüler yayınlar

Arduino DHT11 Kullanımı - Arduino Kod - Arduino Termometre yapımı

Arduino ile voltaj okuma | Arduino ile voltmetre | Arduino ADC örnek Kod

Arduino Oled Ekran Kullanımı | SSD1306 Detaylı Tüm Fonksiyonlar

Arduino 16x2 (2x16) LCD Ekran Kullanımı | 4bit parallel mode - 16x2 LCD ekran pin bağlantıları

Arduino ile Yüksek Voltaj Ölçme | SMPS DC Bara Ölçümü

Arduino UNO güç özellikleri

Arduino LM35 Sıcaklık Sensörü İle Sıcaklık Ölçme

16x2 Lcd Türkçe Karakter Sorunu Çözüldü! Arduino LCD ekrana yazı yazma - Arduino 16x2 Lcd ekran kullanımı

Arduino Röle Modül Kullanımı

DMD2TUR | Arduino P10 Led Panel için Türkçe Karakter Desteği | Arduino P10 Led panel Türkçe yazı yazma