ADC okumalarında istenmeyen gürültü

ayşegülk

Yeni Üye
Katılım
8 Aralık 2025
Mesajlar
7
Okulda arkadaşlarla bir proje üzerinde çalışıyoruz ve sıcaklık ölçümü ile ilgili kısmı ben yapacağım.
Arduino ile analog girişlerden okuma yapıyorm girişe hiçbir sinyal bağlı değil iken bile yüksek değerler okuyorum.
STM discovery kart üzerinde de denedim yine benzer şekilde girişe sinyal bağlı değil iken sıfırdan farklı değerler okunuyor.
Sıcaklık ölçümünde iyi bir çözünürlük ve doğrulık yakalamamız gerekiyor nasıl bir çözüm uygulayabilirim?
 
Şemanız var mı?

Hangi sensörü kullanıyorsunuz?

Kodunuz nasıldır?
 
Son düzenleme:
Okulda arkadaşlarla bir proje üzerinde çalışıyoruz ve sıcaklık ölçümü ile ilgili kısmı ben yapacağım.
Arduino ile analog girişlerden okuma yapıyorm girişe hiçbir sinyal bağlı değil iken bile yüksek değerler okuyorum.
STM discovery kart üzerinde de denedim yine benzer şekilde girişe sinyal bağlı değil iken sıfırdan farklı değerler okunuyor.
Sıcaklık ölçümünde iyi bir çözünürlük ve doğrulık yakalamamız gerekiyor nasıl bir çözüm uygulayabilirim?
Boşta gürültü varsa her analog girişi ile gnd arasına direnç bağlanmalı.
Direnç değeri deneme yanılma ile bulunur.
10k ile başla.

Analog girişlere alçak geçiren pi filtre konulursa yüksek frekanslar elenebilir.
 
Son düzenleme:
Şu anda sadece arduino ide ile çalışıyorum devre şeması yok.
Kullandığım progrm aşağıda seri terminal ile bakınca 5 civarında değerler görüyorum bazan 20 gibi daha yüksek bir değer de görülüyor.
çoğunlukla 5 in altında değerler.

C++:
void setup() {
  Serial.begin(115200);
  pinMode(A0, INPUT);
}

void loop() {
  for(;;) {
    int deger = analogRead(A0);
    Serial.println(deger);  
    delay(100);
  }
}
 
Program kodunu "kod" bloğu içerisine alırsan daha okunaklı olur ve rastgele emojiler çıkmaz.

1765274536724.png


Program tipini de C++ olarak seçip program kodunu koyabilirsin

1765274629788.png
 
A0 girişini kısa bir kablo ile şaseye çekmeyi dene. O durumda nasıl değerler okuyorsun?
 
Şu anda sadece arduino ide ile çalışıyorum devre şeması yok.
Kullandığım progrm aşağıda seri terminal ile bakınca 5 civarında değerler görüyorum bazan 20 gibi daha yüksek bir değer de görülüyor.
çoğunlukla 5 in altında değerler.

void setup() {
Serial.begin(115200);
pinMode(A0, INPUT);
}

void loop() {
for(;;) {
int deger = analogRead(A0);
Serial.println(deger);
delay(100);
}
}
Birde parmaklarını analog girişlere değdirme. :)
 
Kodda önceki değeri saklayıp yeni okunana eşitse yazdırmayabilirsin. Ya da okuma aralığı biraz daha artırabilirsin.
 
A0 soketini GND soketine birleştirince okunan değerler biraz azaldı.
Çoğunlukla 0 - 3 arasında değerler alıyoruz bazan 10 ve üzerine çıkıyor.

Öncelikle olması gereken nedir öğrenebilir miyim?
 
Olması gereken şey kullanılan işlemci modeline, belli bir modelin spesifik bir örneğine, ortam gürültüsüne, ortam sıcaklığa, ortamdaki cisimlerin veya insanların hareketine bağlıdır. Bazı ADC lerde sadece gürültü oluyor, bazılarında hem gürültü hem de belli bir offset oluyor.

Mesela ben şimdi elimdeki orijinal Arduino ile senin programı denedim. Bağlantıyı yaparken rastgele değerler okunuyor, ama bağlantıyı yapıyorum, sonra da hiç kıpırdamadan bir süre değerlerin oturmasını bekliyorum. Sonrasında okuyorum değer hep sıfır. Demekki benim işlemci bir şekilde örneğinin iyileri arasında, ortam gürültüsü de minimum.

1765276732479.png


Eğer A0 sinyalini +3.3V a bağlarsam da ±1 değişkenlikle 682 okuyorum.

1765276869553.png
 
Şart değil ama voltaj uygularken 1k-10k aralığında herhangi bir direnç kullanırsan, analog pini koruma adına yarar sağlar.
 
Öncelikle iki şeyden emin olalım. Eğer sadece Arduino dersen, burada genel olarak anlaşılan kart, Arduino UNO R3 veya klonudur. Senin kartın modeli tam olarak nedir?

İkincisi A0 girişini şase yaparken olabildiğince kısa bir kablo kullanman lazım. Multimetre probu gibi uzun bir kablo kullanırsan o kablo dünyanın gürültüsünü kapar.

1765280425272.jpeg
 
Kartım Ardiuno UNO R4 WIFI.
İki ucu krokodil olan kablo kullanmıştım tel parçası ile tekrar deniyorum.
 
Hmm R4 teki MCU tamamen farklı R3 den.

R3 te Atmel ATMEGA328P, 10 bit ADC var.
R4 te Renesas R7FA4M1, 14 bit ADC var.

Elimde R4 olacaktı bir yerlerde. Bulabilirsem deneyeceğim. Ama çok da farketmemesi lazım. Neticede varsayılan modda Arduino kütüphaneleri gene 10 bit sonuç döndürecek ve gene sıfıra çok yakın olması lazım.
 
Neyse, sen ne yaparsan yap, ADC'de mutlaka hem DC offset hem de gürültü olacak. O yüzden şu anda gördüğün problemi çözsen bile gene bu iki sorun ile ilgili tedbir alman gerekecek.

Sıcaklık sensöründen okuma yaptığına göre, değerler oldukça yavaş değişecek, o yüzden hızlı değişen her şeyi yazılımsal olarak filtrelersen gürültüyü büyük ölçüde elimine edersin. Bunu da iki şekilde yapabilirsin:

1) Geçmişe dönük belli sayıda ADC örneğinin ortalamasını alırsın. Çok iyi bir filtreleme sağlamaz, ama algoritma çok hızlı çalışır ve performansı yeterli olabilir. Bunu internette araştır ("running average" veya "moving average")

2) Kesim frekansı 1 Hz olan bir dijital FIR filtre tasarlayabilirsin ve kesim bandında ne kadar zayıflama olacağını sen belirlemiş olursun. Okulda MATLAB vardır, kur bilgisayarına ve bunun nasıl yapıldığını öğren. Anlamadığını sor. FIR filtre çok etkili bir filtreleme sağlar, ama algoritma daha fazla işlemci gücü ister.

Bir kere gürültüyü uzaklaştırdıktan sonra, ADC girişini şaseye çekip o anda okuduğun (filtrelenmiş) değeri DC offset olarak kabul edersin ve yaptığın bütün ölçümlerden o değeri çıkarırsın. Bu şekilde çok gürültülü ortamlarda bile stabil sıcaklık ölçümü yapabilirsin.
 

Forum istatistikleri

Konular
8,642
Mesajlar
141,290
Üyeler
3,439
Son üye
halil ibrahim

Son kaynaklar

Son profil mesajları

Abdullah karaoglan falcon_browning Abdullah karaoglan wrote on falcon_browning's profile.
selamın aleyküm ses sistemindeki cızırtıyı hallettınızmi
"Araştırma, ne yaptığını bilmediğinde yaptığın şeydir." - Wernher von Braun
“Kendi yolunu çizen kişi, kimsenin izinden gitmez.” – Nietzsche
Kim İslâm’da güzel bir çığır açarsa (güzel bir alışkanlık başlatırsa), onun sevabı ve kendisinden sonra ona uyanların sevapları, onların sevaplarından hiçbir şey eksilmeksizin ona da yazılır.
erdemtr55 taydin erdemtr55 wrote on taydin's profile.
Merhaba Taydin bey,
Gruba spms serisi yapıcak mısınız?
ben 3 sargılı toroid ile 2 adet flyback sürücek bir devre yapmayı düşünüyorum.size soracak sorularım vardı?
Back
Top