+/- 1 digit oynama sorunu

Mikro Step

Kıdemli Üye
Katılım
25 Eylül 2022
Mesajlar
5,898
Bir olcu aleti yaptim. Ekrandaki veride +/- 1 digit oyama oluyor ve bu durum beni rahatsiz ediyor.

Filitreleme yaptigimda oynama azaliyor fakat bu kezde cihazin tepki suresi uzuyor bu durumdan daha cok rahatsiz oluyorum.

Filitreleme harisicinde bir yontem ariyorum.

Akilli bidik bazi onerilerde bulundu ama burda da bir konusalim.
 
Ölçü aleti MCU tabanlı ise digital filtre yapabilirsin.
 
daha yüksek çözünürlükte bir adc ile okuma yaparak, kayar ortalama alınabilir. ya da yaşanan +/-1 hatası istenmeyen bir frekans bileşeninden kaynaklanıyorsa mesela 50/60hz şebeke gürültüsü gibi. bu gürültüye özel bir notch filtre tasarlanabilir.

aslında bu sorunun benzerini ben hareket kontrol sistemlerinde yaşadım, accelerometre ve gyroskopdan gelen sinyalin gürültülerden arındırılmış olması gerekiyor ama gürültü filtrelerken tepki süresinden de kaybetmemesi lazım. alçak geçiren dijital filtrelerin kesim frekansını ayarlayarak ve yüksek sample rate + kısa bir buffer içine kayar ortalama alarak çözmüştüm.
 
Son hanenin sürekli değişim yapması, ölçüm açısından bir anlamı var, o da ölçülen voltajın iki ADC basamağının sınırında olduğu. Ben bu şekilde anlamlandırmayı tercih ederim ve bu değişimi engellemek istemem. Elimdeki tüm ölçü aletlerinde bu değişimi gözlemliyorum ve beni rahatsız etmiyor.
 
Ister analog olsun ister digital, filtre kondugunda degisimler de yavaslar bu yuzden filitre isime gelmiyor.

Ote yandan +/- 1 degisim evet sonucun ekrandaki oynayan iki deger arasinda oldugu anlamina geliyor ama mesela uzunca 100 ardindan kisa sureligine 101 gosterimi ile uzunca sure 101 kisa sureligine 100 gosterimi farkli anlam tasiyor.

Esasen ben bunu servo mekanikte kullanacagim. Eger hedefe ulastiysam fakat pozisyon olcumunde 1 digit degisim oluyorsa mekanige +/-1 hareket yaptirmak istemiyorum.
 
Ister analog olsun ister digital, filtre kondugunda degisimler de yavaslar bu yuzden filitre isime gelmiyor.

Ote yandan +/- 1 degisim evet sonucun ekrandaki oynayan iki deger arasinda oldugu anlamina geliyor ama mesela uzunca 100 ardindan kisa sureligine 101 gosterimi ile uzunca sure 101 kisa sureligine 100 gosterimi farkli anlam tasiyor.

Esasen ben bunu servo mekanikte kullanacagim. Eger hedefe ulastiysam fakat pozisyon olcumunde 1 digit degisim oluyorsa mekanige +/-1 hareket yaptirmak istemiyorum.
digital filitrede neden gecikme olsunki.
Analog okumadan hemen sonra low bitleri atarsan hızlıca filitrelenmiş olmazmı.?
 
Olmaz. Mesela

Gosterilen deger 0 ise +/- 1 degisim 0001, 1111 demek. -1 de sagdan kac bit atarsan at atmadigin bitlerde gene +/- 1 oynama oluyor.

3 olsa 3 4 arasinda gidip gelse, 0011 0100 sag iki biti atsan bile bu kez arta kalan bitte gene oynama oluyor.
 
Bir olcu aleti yaptim. Ekrandaki veride +/- 1 digit oyama oluyor ve bu durum beni rahatsiz ediyor.

Filitreleme yaptigimda oynama azaliyor fakat bu kezde cihazin tepki suresi uzuyor bu durumdan daha cok rahatsiz oluyorum.

Filitreleme harisicinde bir yontem ariyorum.

Akilli bidik bazi onerilerde bulundu ama burda da bir konusalim.
+/- 1 mikron seviyesinde ise normal. :)

Cihazın ölçebileceği en küçük ölçü birimi ne?
 
20 um.

Bu cok kucuk bir mesafe gibi gorunse bile mekanikten tislama, tikirti gibi kulagin duyabilecegi seslere neden oluyor.

Kalitesiz step motor suruculerdeki motor donmedigi halde motordan cikan tislama sesi gibi.
 
Son düzenleme:
digital filitrede neden gecikme olsunki.
Analog okumadan hemen sonra low bitleri atarsan hızlıca filitrelenmiş olmazmı.?
low bitleri atmak sadece çözünürlüğü düşürür, filtreleme sağlamaz. şöyle düşünelim çözünürlüğü o kadar düşürdük ki 1 volt adımlar ölçen bir multimetremiz var değer 1.49 ile 1.51 arasında gidip geldikçe bu defa ekran 1 ile 2 arasında gidip gelir.
 
Olay sadece olcu aleti yapmak olsaydi +/-1 seklinde degisen verilerden N tane olcum yap N tanesi de bir birine esit se goster degilse gosterme ise yarardi.

Fakat benimkisi sensor uygulamasi ve uretilen bilgiler kontrol sinyalinde kullanilacak.
 
En son biti test ediyorsun 0 mı 1 mi 0 ise _sıfır++; 1 ise _bir++; (_sıfır>_bir) ise 0 değilse 1

Kod:
int _sıfır=0 ,_bir=0;



dongu()
{
if(Deger&1)    _bir++;  else _sıfır++;

if(_bir>_sıfır)  Deger|=1; else Deger&=~1;

if((_bir>1024)||(_sıfır>1024)) { _bir>>=6;  _sıfır>>6;  }  //// belli aralıklarda temizleme   

}

Akıllı bıdık ne diyor :D
 
Olay sadece olcu aleti yapmak olsaydi +/-1 seklinde degisen verilerden N tane olcum yap N tanesi de bir birine esit se goster degilse gosterme ise yarardi.

Fakat benimkisi sensor uygulamasi ve uretilen bilgiler kontrol sinyalinde kullanilacak.
Bu +-1'den kaçış var mı? Bence örnekleme frekansını artırıp hareketli ortalama almak ve suni de olsa kontrol döngüsünde bunu kullanmak çözüm olabilir. Kontrol sinyalinin de çözünürlüğü artmış olur.
 
Bu +-1'den kaçış var mı? Bence örnekleme frekansını artırıp hareketli ortalama almak ve suni de olsa kontrol döngüsünde bunu kullanmak çözüm olabilir. Kontrol sinyalinin de çözünürlüğü artmış olur.
Hareketli ortalama alırken topladığım veri orta değer etrafında orta değere yakın örneklerden okuşuyorsa, yani orta değerden uzak, extrem, alakasız değerler almıyorsam, kontrol denklemini örnek toplamına göre kuruyorum. Kontrol denleminin girdi çözünürlüğü örnek sayısı kadar katlanmış oluyor. Gerçekten de işe yarıyor. Float değişken kullanmamış da oluyorum.
 
Konuyu tam okumamışım ben de , filitreleme hızın yavaşlamasına neden oluyor..

O zaman pid kontrolunun bir kısmını dışarı alırsan sorun çözülür, bu benim stm8 güç kaynağında yaptığım gibi işlemcinin hesaplayamadığı değerleri dışarıdaki kondansatörler hesaplar ve gürültü tamamen kesilir.
 
En son elde ettigim veri +/-1 oynuyor. Arada farkli degerler yok.
 
Benzer bir durumda 1 puan hatayı kabullenerek yeni ölçülen ile eskisinin farkı 2 den büyükse güncelle gibi bir koşul yazmıştım. Oynama falan kalmamıştı. Ama 1 puan hatalı takip ediyordu.
 
Sadece 1 bit değişim oluyorsa 2 bitlik yukarı yönlü histeresiz benzeri bir yapı probleminizi çözermi.
Şöyle açıklamaya çalışayım.

Önceki değer <= Şimdiki değer + 2 ise Önceki değer = Şimdiki değer
Önceki değer == Şimdiki değer + 1 ise Önceki değer = Önceki değer
Önceki değer > Şimdiki değer ise Önceki değer = Şimdiki değer

Değer 100 ve 101 arasında gidip gelsin.

Küçük değeri referans alıp, +2 ve üzeri bir değişim varsa gösterge güncellenebilir. (102 ve daha büyük değerler)
Yukarı yönlü +1 değer hep göz ardı edilir. Bu örnekte 100 den 101 e geçişlerde 101 gözardı edilir.
Aşağı yönlü değer değişimi hemen işleme alınır. Okunan değer 99 ve daha küçük ise yeni önceki değer 99 olarak kabul edilir.

Bu mantık uygulamanın tepkisine göre yukarı yönlü değil aşağı yönlüde kurgulanabilir.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
6,951
Mesajlar
118,748
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top