W

Analog girişteki gürültü sorunu

Başlatan wishes, 25 Mayıs 2012, 09:30:54

wishes

iyi günler.

PIC16f877a'da LM35DZ ile ısı ölçerken ekranda sürekli dalgalanmaya maruz kalıyorum. Aynı sorunu başka bir sensörle nem ölçerken de yaşıyorum. A0 bacağına gelen voltaj değeri binde bir gerilime kadar sabitken (mesela 2.104 V) ısı değerim sürekli oynuyor (mesela 70-71 Fahrenheit civarı). A0 ile eksi arasına 22pF filtre görevini üstlensin diye kondansatör koydum. diğer kondansatör değerleriyle de denedim ama sorun devam ediyor. Bu gürültüyü yok etmenin yolu nedir acaba. fikir vermesi açısından kullandığım kodları yazıyorum:

ISIBAK:
IF ADCON1.0=1 THEN ISIBAK     'A0 portuna bağlı. her değişimde analog değeri oku

       ISIOLC=(HAM*50)/57   'formülün aslı ham*100/114. o da 0-50 dereceye karşılık gelen 122F-32F=90F. 1024/90=11.37. formül buradan geliyor
       FAHR=ISIOLC+320    'fahrenheita cevir.
       ONDA=FAHR//10        'ondalık kısmı al
       ISI=FAHR/10              'tamsayı kısmı al
RETURN

---------------
bu da A1 portuna bağlı nem ölçümü:

NEMBAK:
IF ADCON1.1=1 THEN NEMBAK     'A1 portuna bağlı. her değişimde analog değeri oku
          P1=(HAMN*40)/41               'NEM FORMÜLÜM.
         U2=P1//10            'en sağdaki basamağı ondalık olarak kabul et.
         U1=P1/10 
RETURN

Mucit23

1. çözüm örnekleme frekansını düşürmek.
Eğer pic sürekli ard arda ölçüm alıyorsa her seferinde farklı bir ölçüm alınması normal. 10 bit, 12 bit ve üzerinde bu durum çok daha net görülür.
2. çözüm ise yazılımsal filtre
Bende zamanında bir voltmetre yaptım sürekli ölçüm alınca aldığım ölçümün birler hanesi sürekli hareket halinde oluyordu. Yazılımsal olarak aldığım ölçümlerin aritmetik ortalamasını aldım. Bu şekilde aradaki riplikler birazda olsa azaldı.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

wishes

#2
DEFINE ADC_BITS     10                  'A/D  çevirim sonucu 10 bit olacak
DEFINE ADC_CLOCK    1                   'Clock  kaynağı 1 (4 Mhz kristal frekansı için Tcevirim=8/4=2.. bit başına çevrim süresi 1.6 mikrosaniyeye en yakın değer)
DEFINE ADC_SAMPLEUS 100                 'Örnekleme zamanı 100 mikrosaniye

----

DEFINE ADC_SAMPLEUS 100. bunu 500 yapıp deneyeyim bakalım sonucu bildiririm.

aritmetik ortalama almayı biraz daha açabilir misin mucit kardeşim. nasıl bir formül uygulamam gerekiyor.


edit: 500 yapınca da sorun devam ediyor.

Mucit23

ADC_SAMPLEUS Parametresi farklı bir görev yapar. Ete hoca 5. dersinde anlatmış.
Örnekleme frekansını düşürmek dedim. Bunu derken şunu kastettim.
Pic kendi programı içerisinde bir döngü içerisinde çalışır. Bu döngü içerisinde sürekli olarakADC okuması yapıyor anladığım kadarıyla.
Picin OSC frekansına bağlı olarak 1sn içerisinde 100lerce ölçüm alabilir.
Eğer 1Sn içerinsinde 100 ölçüm alıyorsa her 10ms de bir ölçüm alıyor demektir. Buda okunan değerin çok sık bir şekilde değişmesi demek. Eğer 1 sn içerinde 100 ölçüm alacağına 10 ölçüm alsaydı veya 4 ölçüm alsaydı okunana değer daha yavaş değişirdi.

Aritmetik ortalama ise ADC den N kadar ölçüm alıp bu alınan ölçümleri toplayıp N sayıya bölünmesi işlemidir.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Powered by EzPortal