PIC16 tabanlı digital alçak geçiren fiitre

Başlatan PROTECH_, 15 Kasım 2009, 01:19:48

PROTECH_

@Allegro

Allegro hocam tecrübeleriniz sayesinde sölemek istediklerimi çok iyi anlamışsınız,
Beni bu filitreyi tasarlamaya iten temel sebep adc gürültüsüydü
ilk başta onu gidermek için tasarlamıştım. Daha sonra uygulanabilirliğindeki rahatlık ve verimini görünce formulize edip hesaplarını çıkardım ve genel amaclı bir digital filitre elde ettik...
Gönül rahatlığıyla projelerinizde kullanabilirsiniz :)
Multi-Core ,RTX,ThreadX, FreeRTOS, MODBUS  RTOS - Electronic-Hardware -- BERLIN

hasangurlek

AD çevrimciler doğrusal olmayan, ofset ve kazanç hata değerlerine sahiptir. Hiç bir gürültü içermeyen bir analog hatta yapılan her bir ölçümde örneğin +2 kazanç, +1,5 ofset ve +0.5 doğrusallık hatası var ise toplam hata +4 tür. ADC in markasına göre max değerlerle toplam hata birimi 10 a kadar çıkabilir. Bu nedenle sar tipi çevrimciler ile yapılan ölçümün son 3 bitinde sürekli değişik değerler okunur. Bu hatayı gidermenin tek yolu sağa bit kaydırma yöntemidir. Genelde iki bit sağa kaydırıp datayı bu şekli ile işlemek hatasız sonuçlar elde etmeye yeterlidir. Analog hattın gürültüden arındırılması ise sadece ve sadece donanımsal filtrelerle sağlanabilir. Sensörler vs. için düşük geçirgen yapı gerekirken ses sinyali gibi kaynaklar için band geçirgen kullanmak zorunludur. Ancak bunlar sağlandıktan sonra yazılımsal filtreler kullanılabilir. Yazılımsal fitreler ise sürekli değişim halinde olan veya çok kısa sürelerde değişiklik gösterebilecek basınç vb. değerlerin ölçümünde kullanışlıdır.

Ms. Bonnie Baker ın Dijital tasarımcılar için gerçek analog çözümler diye bir kitabı var. Onlarca kaynak taranıp 13 bölüm ve 3 ek halinde yayınlanmış bir kitap. Bu konudaki en iyi anlatım, en iyi kitap diyebilirim.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

Maxim

Alıntı yapılan: "hasangurlek"Bu nedenle sar tipi çevrimciler ile yapılan ölçümün son 3 bitinde sürekli değişik değerler okunur. Bu hatayı gidermenin tek yolu sağa bit kaydırma yöntemidir. Genelde iki bit sağa kaydırıp datayı bu şekli ile işlemek hatasız sonuçlar elde etmeye yeterlidir.

hocam burayı biraz daha anlatabilirmisiniz acaba ?

hasangurlek

Alıntı yapılan: "MCP32xx"Differential Nonlinearity (DNL) is specified at
±1 LSB, and Integral Nonlinearity (INL) is offered in
±1 LSB (MCP3202-B) and ±2 LSB (MCP3202-C) versions.

(Resim gizlendi görmek için tıklayın.)


Katalogda verilen tabloya göre tek kanal ölçümde tipik olarak 3,5 birimlik bir toplam hata söz konusudur. Hataların tümü + yönde veya bazıları + bazıları - yönde sonucu etkileyebilir. Hatanın sebep olduğu bu fark LSB yani düşük değerli bit tarafında etki eder.  Aynı MCP32xx serisinin B ile C versiyonu arasında bile hata oranı farklıdır. Ölçülen sinyal ne kadar düzgün olursa olsun elde edilecek sonuç bu hataların etkisi ile farklı çıkar. Ofset ve kazanç hataları geri besleme ile kalibre edilebilir ancak kalibrasyon değerlerinin hesaplanmaları çok zordur ve aşırı zaman alır. Çevrim biriminden kaynaklanan bu mecburi donanımsal hataların giderilmesi için en kestirme yol yapılan ölçüm sonucundaki düşük değerli 2 veya 3 bit görmezden gelinerek yani ölçümün çözünürlüğü düşürülerek giderilmesidir. Kısaca ölçüm 12 bit çözünürlükte yapılır ama işlenmesi 10 bit çözünürlük ile yapılır. 2 bit kayıpla donanımsal hata oranı neredeyse sıfırdır.

10 bit dahili ADC e sahip PIC16/18 serisi içinse ADFM biti kullanılarak sonuç sola bitişik alınır, bu durumda ADRESL kaydedicisine düşük değerli 2 bit kaydedildiğinden sadece ADRESH kaydedicisindeki 8 bitlik bilgi kullanılır.

Çoğu uygulama için 8 bit yeterli olmakla birlikte eğer bit eleme yapıldığında çözünürlüğün yetmemesi gibi bir problem sözkonusu ise başlıkta bahsedilen "average out" yani ortalama alma methodu kullanılabilir. Ancak yapılan ölçüm sayısı en az max hata biriminin 2 katı olmalıdır.  Örnekleme sayısı ne kadar fazla ise doğruluk o kadar artar. MCP32xx-C için tek kanal max hata oranı 11 birim ise ortalaması alınacak ölçüm sayısı en az 22 olmalıdır.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

azimli

işlemcinin adc kanalı girişi için donanımsal olarak uygun bir filtre olduğunu varsayalım genelde bu filtreyide herkes bilir ve kullanır.

işlemci konfigürasyon ayarlamaları ve yazılımındada ilgili adc kanalı uygun bir şekilde peş peşe çoklu okunup okuma adedi sayısında ortalaması alınıp değerlendirildiğinde nasıl bir sorun çıkabilir.

displeye basmada rakamların oynaması olayında ise  (genelde en sağdaki basamaklar yani birler basamağı ve yakınındakiler oynar) işlemci yine en ideal çalışmasını ve kontrolünü gerçekleştirir ama sırf ekran oynamasın diye iş yaptırılan gerçek adc değeriyle oynanmayıp ekrana basılacak değeri için bu adc bufer içeriği ekstra bir değişkene alınıp döngünün herseferinde değişkenin bir önceki değerinin durumu gözetlenip bir veya bir kaç altı yada üstü ise ekran modu korunabilir ben genelde böyle yaparım burda kullanıcı için daha şık dursun diye ekran sabitlenmeye çalışılır aslında adc çevrimi geri planda ideal değerinde çalışır ve iş görür sorun yoktur yani.

mesajı takip ediyorum yazılanlar iyi bilgiler ama kendi adıma kullanmayı düşünmüyorum.

hasangurlek

Yukarıda hata birimin ne olduğunu açıklamayı unutmuşum. Yarım kalmasın LSB den kasıt;

LSB = Vref+ / Çözünürlük

Mesela;

LSB = 5 Volt / 1024 = 4,8828125 mv (Hassasiyet)

Yukarda bahsettiğim donanımsal tipik 3.5 birimlik hata sinyal değişmediği halde ölçümde 3.5 x 4.88 = 17 mv değerinde bir değişim varmış gibi sonuca sebep olur.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

Klein

Alıntı yapılan: "hasangurlek"AD çevrimciler doğrusal olmayan, ofset ve kazanç hata değerlerine sahiptir. Hiç bir gürültü içermeyen bir analog hatta yapılan her bir ölçümde örneğin +2 kazanç, +1,5 ofset ve +0.5 doğrusallık hatası var ise toplam hata +4 tür. ADC in markasına göre max değerlerle toplam hata birimi 10 a kadar çıkabilir. Bu nedenle sar tipi çevrimciler ile yapılan ölçümün son 3 bitinde sürekli değişik değerler okunur. Bu hatayı gidermenin tek yolu sağa bit kaydırma yöntemidir. Genelde iki bit sağa kaydırıp datayı bu şekli ile işlemek hatasız sonuçlar elde etmeye yeterlidir.
Sağa iki bit kaydırma yaptınız yani 10 bit adc oldu size 8 bit.  Yani full skalanız 1024 idi şimdi tam skalanız 256.

toplam +-4 puanlık bir hatayı kaybetmek için 762 puanı gözden çıkardınız.
Bu şekilde hatasız sonuç almadınız. Sadece sonucun istemediğiniz bölümünü müşteriden gizlediniz.
Halbuki
sonuç = (sonuç*0.9)+(yeni_adc_değeri*0.1)  , adc biraz hızlı ise (sonuç*0.99)+(yeni_adc_değeri*0.01) gibi basit bir filtre , belki biraz da ortalama almak suretiyle 762 puanı gözden çıkmadan sonuca varacaktınız.
hatta bu filtre yerine konunun açılmasınan sebep olan filtreyi kullansaydınız her şart altında bit kaydırmaktan daha iyi sonuçlar alacaktınız.
Sizin gerçek ihtiyacınız kullandığınız ADC'nin  çözünürlüğünün çok altında ise, ancak o zaman bu yöntem işe yarar. Genellikle 20 bit ve üzerindeki ADC lerde 2-4 bit kaybetmeyi göze alarak , 16 bite razı olup bu şekilde kullanmayı tercih ederim. Ama 16 bit ve altı ADC ler için aynı şeyi söyleyemeyeceğim.

hasangurlek

Alıntı yapılan: "Klein"Sağa iki bit kaydırma yaptınız yani 10 bit adc oldu size 8 bit. Yani full skalanız 1024 idi şimdi tam skalanız 256.

Burada büyük bir çoğunluk gibi yanılıyorsunuz, bu dediğiniz yüksek değerli bitlerin kaybedilmesi durumunda geçerlidir. Burada müşterinin aldatılması gibi bir durum ise hiç söz konusu değildir.

1- VREF = 4096 mv ve çözünürlük 12 bit ise, hassasiyet 1 mv olur. Bu durumda ölçüm sonucu elde ettiğiniz değer 2048 ise ölçtüğünüz voltaj 2048x1mv=2048 milivolttur.

2- VREF = 4096 mv ve çözünürlük 10 bit ise, hassasiyet 4 mv olur. Bu durumda aynı voltajı yani 2048 milivoltu ölçerseniz elde edeceğiniz değer 512 dir. Ama donanımsal hata yine bu değerin içindedir. Yani hatayı +/- 3,5 birim kabul edersek sabit voltajın ölçüm değeri 508 ile 516 arası olabilir.

Şimdi gelelim donanım kaynaklı hatayı sağdan bit eleyerek gidermeye;

Yine VREF = 4096 mv ve ölçüm sonucu 2048 yani 12 bit çözünürlükte normal ölçüm işlemini hallettik. Diyelimki ağırlık ölçüyoruz ve her 1 milivolt = 1 KG.

1- Eğer bit kaydırma yapmadan bu değeri direk kullanırsak çarpanımız olan hassasiyet 1 mv. Ama donanım bize diyorki tipik olarak bu sonuç +/- 3,5 birim hatalı. Bunu biz 4 birim kabul edelim. Bu durumda ölçülen sabit voltaja rağmen eldeki değer 2044 veya 2052 milivolt aralığında çıkıyor. Bu durumda ölçülen ağırlık aynı olduğu halde tartı aleti hem müşteriye hem satıcıya her denemede bazen 2044 kilo, bazen 2052 kilo olduğunu gösteriyor.

2- Şimdi sağdan iki biti eleyerek sonucu dörde bölüyoruz. Böylelikle 2 bitte 4 birim hata devre dışı kalıyor. 2048 değeri elimizde 512 oldu ama bu değer içinde artık donanımsal hata yok. Çarpanımız ise dörde bölümden dolayı ters yönde ve artık 1 değil 4. Bu durumda ölçülen ağırlık yine aynı ama tartı aleti hem müşteriye hem satıcıya ağırlığın 512x4=2048 kilo olduğunu gösteriyor hemde her denemede.

Sizce hangi yazılıma sahip kantar satar ve piyasada tutulur ?

Bu genel yanılgı umarım düzelir ve yine umarımki anlatmak istediğimi net biçimde yazabilmişimdir.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

hasangurlek

Donanımsal filtre konusuna gelince ADC girişinde filtre kullanılmazsa veya pasif filtre ile geçiştirilirse veya aktif filtrede filtre hesabı düzgün olduğu halde direnç değerleri gereğinden yüksek veya kapasitör değerleri gereğinden düşük kullanılmış ise masa başındaki alet gayet düzgün çalışır. Ama yukarıda bahsettiğim kantarın dibinde bir kaynak makinesi çalıştırırsanız sonuç 1000 kg da olabilir 5000 kiloda :)
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

PROTECH_

Alıntı yapılan: "hasangurlek"
Burada büyük bir çoğunluk gibi yanılıyorsunuz, bu dediğiniz yüksek değerli bitlerin kaybedilmesi durumunda geçerlidir. Burada müşterinin aldatılması gibi bir durum ise hiç söz konusu değildir.

1- VREF = 4096 mv ve çözünürlük 12 bit ise...

Hocam genele ait bir yanılgıdan bahsediyorsunuz, fakat merak ettiğim bir kaç birşey var;

1-) -+3, veya her adc nin modeline bağlı olan bu hata payı miktarı ile alakalı olarak, az çok elektronik ile ilgilenmiş herkes datasheet te belirtilen bu değer için; yapılan her örneklemede kesinlikle +3 veya -3 hata payı bulunacak diye birşeyin olmadığını cok iyi bilir. Bu muhtemel olabilecek hata limitidir. ama kesin olur die birşey söylenemez.
Aksi takdirde madem öyle bir durum söz konusu neden bunu üreten firmalar 10 bitlik olarak piyasaya sürüyorlar?   akıllarına "8 bit +-0" olarak piyasaya sürmek gelmemişmidir  :?:  

2-) Genelde adc girişine duruma göre küçük çaplı bir filitre yerleştirilir benim bildiğim kadarıyla. Üstüne yine istenen dijital filitreyi uygulayıp tam verimi alınır..
ama gördüğüm kadarı ile siz ikisi bir araya gelemez sadece donanımsal olması gerek gözü ile bakıyorsunuz madem öyle DSP neden bu kadar önemli ve uygulanan bir konu :?:

3-)şahsen  adc gürültüsünü gidrmek namına hiçbirşey yapılmasa bile
bit kaydırma yerine bir çok örnek alıp ortalamasını almak daha sağlıklı bana göre. Sonuç olarak hata oranı frekansa bağlı olrak değişim gösteriyor. Belkide örnekleme aldığımız frekans, hata miktarı en az olan frekanstır, neden kalan 2 biti direk kaydırıp çöpe atalımki madem direk çöpe atacaktık neden 10 bit olarak ürettiler  :?:

cevaplarınız için şimdiden teşekkür ediyorum
Multi-Core ,RTX,ThreadX, FreeRTOS, MODBUS  RTOS - Electronic-Hardware -- BERLIN

hasangurlek

Sayın PROTECH_

Evet bu genele yakın bir düşünce hatasıdır. Bunu duyanların büyük bir çoğunluğu çözünürlüğün boşa harcandığını iddia eder. Ama yukarıdaki örnek karşısında olayın düşünüldüğü gibi çözünürlük kaybı olmadığı ortaya çıkar.

1- Sanırım bir önceki sayfadaki mesajımı görmediniz. Üreticinin açıkladığı hata oranındaki "tipik" ten kasıt her ölçümde genel olarak olacağına, "max" dan kasıt her ölçümde muhtemelen olabileceğine işarettir. Zaten max değerleri alırsanız sağdan 4 biti ekarte etmeniz gerekir. 7805 kataloğuna bakarsanız tipik çıkış değeri 5 volttur ama min 4.80 ve max 5.20 olarak gösterilir. Ama bugüne kadar kimse benim 7805 5 volt vermiyor diye şikayet etmemiştir, çünkü sonucu etkileyecek bir durum söz konusu değildir. Tüm 5 volt cihazlar bu aralıkta çalışabilir. 7805 üreticileride, ADC lerin 10-12-13 bit olarak piyasaya sürüldüğü gibi 7805i 5 volt olarak piyasaya sürmüştür.

2- Yazılımsal filtre elbette kullanılabilir ve kullanılmalıdır. Hiç bir zaman donanımsal filtre ile beraber kullanılamayacağına dair bir yazım olmadı. Donanımsal filtre kullanmaksızın yazılımsal filtre kullanılması mantıksızdır. Sizin başlığı açtığınız ilk şemanızda opamp girişine prob atıp, analiz sonucunu paylaşmanızı isteme sebebimde buydu. Çünkü verdiğiniz şemadaki gürültü kodda yapılan 8 ölçümün ortalaması ile giderilemeyecek kadar fazla ve çıkışı yazılım değil opamp düzeltiyor. Bunu paylaşabilirseniz durum daha iyi anlaşılacaktır.

3- Her ölçümde donanımsal hata +4 ise istediğiniz kadar hatta milyonlarca ölçüm yapıp, ortalamasını alın elinizdeki sonuç yine +4 hataya sahip olacaktır. Çünkü üreticiler bu hata bazen + yönde bazen - yönde olacak diye bir kural koymuyor. Örnekleme aldığınız zaman dilimi; mümkün olmamakla birlikte dışarıdan herhangi bir nedenle herhangi bir zaman diliminde ve herhangi bir frekansta oluşabilcek bağımsız gürültü oluşmasına etki edebilse bile 2 biti ekarte etme ile alakası yoktur. Bu donanımsal hata aynı 7805 olayında olduğu gibidir. Farkı ise kararsız olmasıdır yani bazen tamamen aynı yönde, bazen + yönde bazen - yönde bazende her iki yönde olabilmesidir. Ve dikkat ederseniz asla ve asla 2 biti çöpe atmak gibi bir olay yok. Bu ekarte edilen 2 bit donanımsal hatayı üzerine alarak görevini yapmış ve işi bitmiştir. Lütfen yukardaki hesaplamaları tekrar gözden geçirin ve her iki yöntemde sonuç doğruluğuna tekrar bakın. Bu arada sizin verdiğiniz yazılımda aslında bunu yapıyor, sizce sizin 2 bit nerde ?

Bayan Bonnie 'in tavsiye ettiğim kitabını okursanız veya en azından ADC üreticilerinin sitelerindeki SAR tipi ADC lerin uygulama notlarına göz atarsanız pek çok olay yerli yerine oturacaktır. Gerçek analog çözümlerin bir bölümünde bir müşterinin 32 bit SAR tipi ADC isteğinden, başka bir bölümünde ise tartıştığımız bu hata konusunun yanında çalışan mühendisin kafasını nasıl karıştırdığından bahsediyor. Gerçekten ilginç iki konudur :)

Konu açılmışken filtreleme konusunda bakış açısını biraz değiştirmek isterim. Ortalama almak filtreleme yapmak değildir sadece hata oranını düşürür. Diyelimki 1024 defa ölçüm yaptınız ve çok fazla gürültü, işlemci osilatörünün normal dışı davranması vs. bir şekilde anormal bir hata meydana geldi  ve 1024 adet normal olmayan veriye sahipsiniz. Hesaplamak kolay olsun diye en düşük ölçüm değeri 1024 ve en yüksek ölçüm değeri 1024 olsun. Ortalama aldığınızda varsayım olarak elinizdeki sonuçda bu ikisinin ortalaması olan 1536 değeri olsun. Yine ağırlıktan gidersek 1024 kilo ile 2048 kilo aralığındaki değerlerin ortalamasından ağırlığın 1536 olduğuna karar verdik. Peki bu sonuç doğrumu ? İşte bunu ne yazılım, ne müşteri, nede satıcı bilmiyor. Belki satıcı işinin uzmanı ise malın durumuna göre göz kararı sonucun hatalı olduğu kanaatine ulaşabilir.

Peki bu hatalardan nasıl bir filtreleme tekniği ile kurtulabiliriz ? Buna cevap verebilmek için öncelikle bazı cevaplar gerekli;

1- Öncelikle ölçümüm % kaçı değerlendirmeye alınacak, diyelimki %50 si
2- Filtrelemede hata oranı % 50 den fazla olursa ne yapılacak ? Diyelimki sonuç doğru kabul edilecek (veya donanım sıfırlanıp belli sayıda tekrarlanabilir, belli sayı sonunda hala hata varsa arıza verilir)
3- Filtrelemede ölçüm sonuçlarında en düşük ile en büyük ölçüm değerleri arasındaki yüzdesel fark ne kadar olacak ? Diyelimki bu özellik kullanılmayacak (veya ölçülen değerler arasındaki fark belirlenmiş yüzdenin dışında ise ilgili ölçüm kaydedilmeden tekrar belli sayıda denenebilir ve yine yüzdesel fark fazla ise donanım sıfırlanıp belli sayıda işlem tekrarlanabilir, belli sayı sonunda hala hata varsa arıza verilir)
4- Bu iş için ne kadar bellek alanına sahibiz ? Diyelimki 80-100 bayt
5- Bu filtreleme yazılımı koşarken CPU başka işle uğraşacakmı ? Diyelimki hayır (Cevap evet olsaydı bu sefer ölçüm değerinin değişme hızı sorulacaktı, bu cevaba görede olabilirliğe bakılacaktı)
6- Ne kadar zamanımız var ? Diyelimki zaman bol, 200-300 milisaniye kadar bir zaman bu işe ayrılabilir. (zamana göre ölçüm sayısı belirlenebilir.)

Şimdi basit bir yapıyı birlikte oluşturalım, kusura bakmayın algoritma çizecek zaman yok :)

ADC
1- UST_RUTİNİ ÇAĞIR
2- SONUCU KULLAN veya ÇAĞRILDIĞIN YERE GERİ DÖN

UST_RUTİN
1- ALT_RUTİNİ ÇAĞIR
2- ALT_RUTİNDEN GELEN SONUCU ALT_RUTİNİN KULLANMADIĞI BAŞKA BİR BELLEK ALANINA KAYDET, BELLEK ADRESİNİ ARTIR
3- SAYACI ARTIR
4- SAYAC DEĞERİ 64 OLMUŞMU ?
4- HAYIR, 1E GİT
5- EVET, BELLEKTEKİ 64 BAYT DEĞERİ SIRALA
6- 16. BAYTTAN SONRA 32 BAYTI TOPLA, ORTALAMASINI AL, SONUÇ İLE ÇAĞRILDIĞIN YERE GERİ DÖN

ALT_RUTIN
1- ADC ölçüm yap, sağdan 2 biti çıkart, belleğe kaydet, bellek adresini artır
2- Sayacı artır,
3- 32 ölçüm yapıldımı ?
4- Hayır = 1e git,
5- Evet, bellekteki 32 bayt değeri sırala
6- 8. bayttan sonra 16 baytı topla ortalamasını al, sonuç ile çağrıldığın yere geri dön.


Böyle bir yapı ile toplamda 98 bayt bellek alanı kullanılarak toplamda 2048 ölçüm yapılır.

Toplamda 80-100 bayt kullanılabilir olması sebebiyle alt rutinde 32 bayt data+1 sayaç ile 33 bayt bellek alanı kullanılmıştır. Alt rutinde her defasında 32 ölçüm yapılır, donanımsal hata giderilir, 32 ölçüm küçükten büyüğe veya tersine sıralanır, sıralama sonucu ortada kalan 16 baytın ortalaması alınarak üst rutine döndürülür. Bu şekilde olası hataların neredeyse tümü giderilmiştir. Ama bir ihtimal hala ortalama sonuç biraz hataya sahip olabilir.

Üst rutin ise alt rutinden elde edilen sonucu başka bir bellek alanına kaydeder. Toplamda 80-100 bayt kullanılabilir olması sebebiyle alt rutini çağırma işlemi 64 ile sınırlandırılmıştır. bu şekilde 64 bayt +1 sayaç ile 65 bayt bellek alanı kullanılmıştır. Alt rutinden alınan tüm değerlerin sayısı 64 olduğunda alt rutindeki sonuçlardan elde edilmiş bu 64 bayt bellekte sıralanır ve yine ölçümün %50 si kullanılacağı için 16. bayttan itibaren 32 bayt toplanır ve ortalaması alınır.

Bu filtreleme yöntemi ile ölçümde neredeyse hiç hata kalmaz. Bellek kullanımı, zaman gibi faktörler müsait ise bir üst veya alt rutin daha kullanılabilir. Rutinler içinde ölçüm sayısını artırmak sonucu biraz daha doğrular ancak fazlaca etkilemez. Ancak çağrılacak her alt rutin sonuç doğruluğuna büyük etki yapar.

Özellikle basınç değerleri gibi çok hızlı değişen bilgilerin ölçümünde sonuçlar hatasız olsa bile anlık gerçek değerin tespiti için en etkili yöntemlerden biri budur.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

Klein

Alıntı yapılan: "hasangurlek"
Çarpanımız ise dörde bölümden dolayı ters yönde ve artık 1 değil 4. Bu durumda ölçülen ağırlık yine aynı ama tartı aleti hem müşteriye hem satıcıya ağırlığın 512x4=2048 kilo olduğunu gösteriyor hemde her denemede.

Sizce hangi yazılıma sahip kantar satar ve piyasada tutulur ?

Bu genel yanılgı umarım düzelir ve yine umarımki anlatmak istediğimi net biçimde yazabilmişimdir.

512*4=2048
511*4=2044
510*4=2040
509*4=2036
Sanırım  ölçtüğünüz değerin her bir değişimine karşlık  sonuç değerinizin 4 değiştiğini farketmişsinizdir.
Örn. ADC çözünürlüğünüz 10 bit.
tam skalada 1024 kg ölçüyorsunuz. ve 1 kg çözünürlük ile göstegeye aktarıyorsunuz.  Bu durumda bit kaydırarak 1kg aralıklarla gösteremezsiniz.  bunu yapmak için 12 bit adc kullanıp 2 bit kaybedip 10 bite razı olmanız gerekir. Bu genel bir yanılgı falan değildir. Ortada matematik var. Buna yanılgı diyebilmek için matematik bilmiyor olmak gerek.
Şunu iddia edebilirsiniz. Eğer bu yöntemi kullanmazsanız son sayınız zaten 3-4 puan dalgalanacak. bu yüzden siz de doğru değer gösteremezsiniz diyebilirsiniz. İşte ortalama almak veya dijital filtre kullanmak tam da bu işe yarar. Son dijittekidalgalanmanın ortalaması veya filtreden geçmiş hali gerçek değerine en yakın değer olacaktır. Evet gerçek değer değildir. ama  dörder dörder de atlamaz.

hasangurlek

Sanırım ben anlatma özürlüyüm çünkü bir konu daha açık nasıl anlatılır bilemiyorum.

1 kg hassasiyet isteniyor ama sonuçta +/- 3,5 ile 11 KG arasında bir hata kabullenilip ortalama alma yöntemine başvuruluyor ve hatta kesin doğruluğu sağlayacak 2 bit fazla çözünürlüğe sahip bir ADC ye fazladan 10-20 cent vermek yerine ortalama almak suretiyle bazen alıcının, bazen satıcının hakkının yenilmesine göz yumulup her tartımda bunların veballeri yükleniliyor ve tartı ömrünü tamamlayana dek bu böyle devam ediyor. Halbuki satışı yapılan aletin tanıtımda hassasiyet +/- 4 KG denseydi veya üst sınıf bir ADC kullanılarak hassasiyet +/- 1 KG denseydi böyle bir sonuç doğmayacaktı. Microchip bile bu mantıktan daha dürüst davranıp, AD konvertörün hata oranlarını net bir biçimde açıklıyor ve donanımsal hatanın ya geri bildirimle kalibre edilmesini yada hatasız KULLANILABİLİR bitlerin değerlendirilmeye alınmasını, çözünürlük yetmiyorsa daha yüksek çözünürlüğe sahip bir ADC kullanılmasını tavsiye ediyor.

Uygulamada doğru sonuçlar için doğru ADC seçimi nasıl yapılabilir ? Delta sigma tip ADC kullanmam durumunda ölçüm hızının çok düşük olması ama sonucun garanti edilmesi ve sonucun yüksek çözünürüğe sahip olması bu proje için uygunmu ? Yoksa SAR tipi ADC kullanıp yüksek hızlarda örnekleme yapmak, olası hataları donanım ve/veya yazılımla gidermekmi bu proje için uygun ve ayrıca 16 bite kadar çözünürlük bu uygulama için yeterlimi ? SAR tipi kullanacaksanız ve "Ben ofset ve kazanç hatalarını düzeltme yeteneğine sahibim, yazılımı ve donanımı bu şekilde dizayn edebilir, hesaplarını sürekli yapabilirim diyebiliyorsanız" size ihtiyacınız olan çözünürlüğü verebilen bir ADC kullanabilirsiniz. Bu durumda tartıştığımız örnek için 1 kg hassasiyet için 12 bit size yeter, çünkü hataları düzeltebiliyorsunuz. Sonuçta vebal mevzuu üreticiye ait, bana değil.

Evet ortadaki matematik gerçeğidir;

xxxx * 4 ler ile elde ettiğiniz sonuç size 4 kg hassasiyete sahip fakat hatasız sonuç elde etme imkanı verir. xxxx *1 ler ile çözünürlüğü direk kullandığınızda ise 1 kg hassasiyete sahip fakat +/- 4 kg hata payına sahip sonuçlar elde edersiniz. Peki ne değişti ? 12 bit çözünürlükte çevrim yaparak minumum 4 kg hata oranı ile 1 KG hassasiyetmi iyidir, yoksa ihtiyacınız olan 1 KG hassasiyeti hatasız sağlayabilecek 14 bit çözünürlüğe sahip ADC kullanıp donanım hatasını taşıyan 2 bitin ekarte edilmesimi iyidir ? veya tartı aletinin +/- 4 KG hassasiyete sahip olarak satmakmı iyidir ? İşte proje aşamasında karar verilmesi gereken budur.

Filtrelere gelince; Bunun için fazlaca seçenek kullanılabilir. Herkes kendine göre bir yöntem geliştirebilir, netten bulduğu yazılımları tadil edip kullanabilir vs. vs.

Öncelikle donanımsal ve yazılımsal filtrelemenin ne olduğuna bakmak gerekir. Bunu su örneği ile açıklayalım.

Donanım filtresi gelen suyun içindeki lağım suyunu, baraj suyunu, tesis artıklarını, ölmüş kedi köpek vs. leşlerin bıraktığı artıkları, ağır metalleri, hafif maddeleri vs. içilebilecek kalitedeki sudan ayırmaya ve yazılımsal filtreye mümkün olduğunca temiz su vermeye çalışır. Kullanmadığınız takdirde bu karma suyun tümü yazılımsal filtrenizin içine girer. İşte bu nedenle donanım filtresi kullanmaksızın yazılım filtresi kullanmak mantıklı değildir. Donanım filtresi kullanıldığında belediyenin su arıtma tesisi görevini görür ama orada çalışanın kloru zamanında ve oranında vermemesi, su ihtiyacı nedeniyle yeterince dinlendirilmemesi, arıtmadan sonraki yolda şebekeye başka şeylerin suya karışabilecek olması gibi nedenlerle hala yazılım filtresine gönderilen su içilecek kalitede olmayabilir.

Sıra geldi yazılımsal filtreye, bunuda evlerdeki su filtre cihazı olarak düşünelim ve bu başlıkta bahsedilen ve filtre olarak adlandırılmış 3 yöntemi ele alalım. Bir su filtre cihazı alacaksınız, satıcı size cihazların özelliklerini anlatıyor;

1- (AD=(n[0]+.....+n[63]) / 64 ) Efendim bu cihaz şebekeden, damacanadan, lağımdan, fabrika artıklarından vs. karışmış 64 litre suyu alıyor, 64 litre kapasitedeki aynı haznede toplayıp, sallayıp karıştırıyor ve size 1 litresini veriyor. Bu cihazın filtre mantığı işte bu.

2- (sonuç = (sonuç*0.9)+(yeni_adc_değeri*0.1)) Efendim bu cihaz ilk giren su kaynağı lağım, şebeke vs. hangisi olursa olsun 1 lt olarak %100 ünü alıyor, ardından haznesindeki sudan %10 unu boşalıp yeni gelen her suyun yine kaynağına bakmaksızın %10 nunu yani 100 mililitresini alıyor. Toplamda istendiği kadar su girişi yapılabilir ama (örnekte 64 defa) haznesi sadece 1 litre ve bu mantıkla filtreleme yapar. Siz son su girişinden sonra kalan bu bir litre suyu içersiniz.  Ya ilk etapta aldığınız %100 kapasitedeki su komple lağım suyu ise ? Veya tersine ilk etapta %100 içme suyu aldığınız halde her yeni gelen su lağım suyuysa ve bunların %10 unu sürekli temiz suya karıştırıyosa ?

AFİYET OLSUN HER İKİ FİLTREDE GERÇEKTEN İÇME KALİTESİNDE SUYU SAĞLAYABİLDİ  :)

3- (Yukarıda verdiğim basit örnek, 64 bayta göre değiştirilerek) her defasında 8 litre suyu alıyor, suyun ağır kısmını dibe çöktürüyor, hafif kısmını yüzeye çıkartıyor ve ortada kalan 4 litre suyun ortasından 1 litresini başka bir kaba aktarıyor. Bu işlemi 8 defa tekrarlıyor. 8 işlemden sonra oluşan 8 litre içinde ağır kısmı, pisliği vs. dibe çöktürüyor, hafif kısmını yukarı taşıyor ve ortada kalan 4 litrenin ortasından 1 litresini alarak size içme suyu olarak veriyor. Peki içilebilirmi ? Yukarıdaki 2 yönteme göre nispeten evet ama bence yine içilemez ! Ben içmeden önce birazda kimyasal işlem uygulayıp, kalabilecek mikropları öldürme işi yapıyorum :)

Ortadaki gerçek matematik olduğuna göre şimdi bunu matematikle açıklayalım, diyelimki 64 birim suyumuz var ve bu suyun yazılım filtresine giriş sırası ve değerleri aşağıdaki gibi;

2.760,113,512,512,512,512,165,12,512,512,768,512,512,512,512,4.096,
4.096,512,512,512,1.040,512,512,512,512,3.840,2.530,512,512,512,740,
512,4.096,512,512,512,512,165,12,512,512,768,512,512,512,512,4.096,
4.096,512,512,512,365,512,512,512,512,3.840,2.530,512,512,512,740,
512,317

Yanlış saymadıysam 64 birim içindeki 42 birimin değeri 512, yani içme kalitesindeki suyumuz aslında bu ama donanım filtresi olmadığı için her türlü pislik içine karışmış. Elektriksel açıdan bu pisliğin sebebi fabrikadaki çok bilmiş elektrikçimizin kontrol kalemi, ölçü aleti ile anlık olarak panodaki cihazımızın ADC portunu ölçmeye kalkması, 380 prizinden çekilen uzatmanın bir kaç metre sizin ADC kablonuza paralel gitmesi gibi nedenlerle geçici olabileceği gibi, yine işgüzar elemanlarımızın hava kompresörü ile püskürttüğü havanın içinde su olduğunu bilmeden belli aralıklarla panoları temizlemesi veya panoya ilave edilen bir floresan aydınlatmanın balastının sizin ADC cihazının üstüne monte edilmesi gibi kalıcı bir çok sebebi olabilir.

1. Yönteme göre suyu filtre ederseniz alacağınız sonuç 979,51 dir ve  - 512 = 467,51 birim ne olduğunu bilmediğiniz su, içme suyunuzun içinde.
2. Yönteme göre suyu filtre ederseniz alacağınız sonuç  928,80 dir ve  - 512 = 416,80 birim ne olduğunu bilmediğiniz su, içme suyunuzun içinde.
3. Yönteme göre suyu filtre ederseniz alacağınız sonuç  518,81 dir ve  - 512 = 6,81  birim ne olduğunu bilmediğiniz su, içme suyunuzun içinde.

Israrla ortalama almak vs. filtrelemek değildir dememdeki kasıt budur ! İÇMEK SİZE KALMIŞ  

Süper bir donanım filtresi tasarladınız, her elemana bir tane by-pass kapasitör eklediniz, hatta + besleme çizimin yıldız bağlantı şeklinde ve yüzlerce saniye boyunca harika bir filtreleme işlemi yapan yazılım hazır. Sonuçlar harika olacak değilmi ?

HAYIR OLMAYABİLİR !

PCB yi nasıl tasarladınız ? Bunuda burdan öğrenin : microchip.com AN688.pdf

Ayrıca yine tekrarlamak isterim ki LÜTFEN OKUYUN, bu sayede ADC ler piyasaya niye bit sayısı ile tanıtılarak sürülüyor ? Bu tip hatalar nasıl engellenir ? Filtreleme nedir ? Bit ekarte etmek çözünürlüğü düşürmekmidir ? vb. bir sürünün cevabını bulabilirsiniz. Aksi takdirde boşuna tartışmalarla bir yere varılmaz.

Bakınız tavsiye ettiğim kitaptan konuyla ilgili bir bölüm; Yazarın arkadaşı olan mühendis x marka 12 bit çözünürlükteki ADC nin ofset ve kazanç hataları nedeniyle (aslında ADC nin bit gönderim sıralaması nedeniyle) kullanılabilir 7 bite sahip olduğunu söylüyor. Peki sizce niye bit sayısından KULLANILABİLİR diye bahsediliyor ?

Alıntı yapılan: "Bonnie Baker  - Real Analog Solutions for Digital Designers"
What do the least significant bit (LSB) specifications mean when you are looking at ADCs? One day a fellow engineer told me that a 12-bit, Converter X (manufacturer will emain unnamed) had just 7 usable bits. So essentially, the 12-bit converter was only a 7-bit converter. He based this conclusion on the device's offset and gain specifications. The maximum specifications were:

Offset error = ±3 LSB,
Gain error = ±5 LSB,

At first glance, I thought he was right. From the list above, the worst specification is gain error (±5 LSB). Applying simple mathematics, 12-bits of resolution minus five is equal to 7-bits, right? Why would an ADC manufacturer introduce such a device? The gain error specification motivates me to purchase a lower-cost, 8-bit converter.  However, that doesn't seem right. Well, as it turned out, it wasn't right. Let's start out by looking at the definition of LSB. Think of a serial 12-bit converter; it produces a string of twelve ones or zeros. Typically, the converter's first transmitted digital bit is the MSB (or LSB + 11). Some converters transmit the LSB first. We will assume that the MSB is first in this chapter. The second bit is MSB – 1 (or LSB + 10); the third bit is MSB – 2 (or LSB + 9), and so on. At the end of this string of bits, the converter finally transmits as MSB – 11 (or LSB). The terminology, LSB, is very specific. It describes the last position in the digital stream. It also represents a fraction of the full-scale input range. For a 12-bit converter, the LSB value is equivalent to the analog full-scale input range divided by 212 or 4096. If I put this in terms of real numbers, I have an LSB size of 1 mV with a 12-bit converter that has a full-scale input range of 4.096 V. However, the most instructive definition of LSB is that it can represent one code out of the 4096 codes possible. Going back to the specifications and translating them into a 12-bit converter that has an input FSR of 4.096 V:

Offset error = ±3 LSB = ±3 mV,
Gain error = ±5 LSB = ±5 mV,

These specifications actually claim that the converter can have (worst case) an 8 mV (or 8 code) error introduced through the conversion process. This is not to say that the error occurs at the LSB, LSB – 1, LSB – 2, LSB – 3, LSB – 4, LSB – 5, LSB – 6 and LSB – 7 positions in the output bit stream of the converter. The errors can be up to eight times one LSB, or 8 mV. Precisely stated, the transfer function of the converter could have up to eight codes missing out of 4096 codes. These codes will be missing at the lower or upper range of the codes. For example, a converter with an error of +8 LSB ((+3 LSB offset error) + (+5 LSB gain error)) will produce possible output codes of zero to 4088. The lost codes are from 4088 up to 4095. This is a small, incremental error of 0.2% at full-scale. In contrast, a converter with an error of –3 LSB ((–3 LSB offset error) – (–5 LSB gain error)) will produce codes from 3 up to 4095. The gain error in this situation produces an accuracy problem, not a loss of codes. The lost codes are 0, 1, and 2. Both of these examples illustrate the worst possible scenario.

Analog dijital çevrim konusu; besleme regülasyonundan başlayıp, PCB tasarımına kadar uzanan ve arada çok fazla değişken içeren uzun bir süreçtir. Elbette isteyen istediği tip beslemeyi, filtreyi, yazılımı, PCB u kullanır, ve elbette isteyen istediği matematik bilgisini istediği gibi yorumlayıp kullanır. Benim için gerçek tektir ve konu kapanmıştır. Bu saatten sonra anlatmak istediğimi daha açık bir şekilde anlatabilecek bir yazıya vakit ayırmaya niyetim yok.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

Klein

Evet hocam mesele anlaşılmıştır. Yukarıda güzel bir matematik hesabı yapmışsınız. Haklısınız.
Eğer 12 bit ADC'den  örneklerde verdiğiniz değerleri alıyorsam , yani değerlerim 113 ile 1024 arasında geziniyorsa Ne kadar filtre etsem hikaye.  Aslında filtreden ziyade ne kadar çalışsam hikaye. Bu mesleği bırakmam daha mantıklı olur.  Çünkü 12 bit ADC'den böyle değerler almayı başarabiliyorsam bu işten hiç ama hiç anlamıyorum demektir. Yazınız çok uzun bu yüzden tamamnını okuyamadım. Ama muhtemelen diğer kısımlarda da haklısınızdır. Kolay gelsin.

hasangurlek

Alıntı yapılan: "Klein"Evet hocam mesele anlaşılmıştır. Yukarıda güzel bir matematik hesabı yapmışsınız. Haklısınız.
Eğer 12 bit ADC'den  örneklerde verdiğiniz değerleri alıyorsam , yani değerlerim 113 ile 1024 arasında geziniyorsa Ne kadar filtre etsem hikaye.  Aslında filtreden ziyade ne kadar çalışsam hikaye. Bu mesleği bırakmam daha mantıklı olur.  Çünkü 12 bit ADC'den böyle değerler almayı başarabiliyorsam bu işten hiç ama hiç anlamıyorum demektir. Yazınız çok uzun bu yüzden tamamnını okuyamadım. Ama muhtemelen diğer kısımlarda da haklısınızdır. Kolay gelsin.

Sayın Klein, yazılarım nedeniyle darılmanıza, sitem etmenize gerek yok. Forumdaki amacımız birilerinin birşeyleri yanlışsız olarak ve tam doğru bir şekilde öğrenmesi, yazılan yazılar nedeniyle mesleği bırakmak değil.

Zaten bahsettiğim problemin temeli OKUMAMAK ve tabiidirki hiç kimse başka birini okumaya zorlayamaz.

Anormal değerler uğraşılsada alınamaz, çünkü normal olmayan bu değerler başka bir unsur tarafından oluşturulur ! Böyle olmasaydı herşey güllük gülistanlık olurdu.

8-10 yıl önce bir cihazın anormal çalıştığı gerekçesiyle bir arkadaşımla fabrikaya gittim. Arıza tanınmış bir markaya ait cihazın her gün bir birbini tutmayan belirsiz sayılarda anormal davranışıydı. Ölçülen değerler o kadar farklıydı ki yukarda rastgele ürettiğim dizi yanında çok masum kalır. Ama cihaz işini yapıp büyük bir çoğunlukla doğru değerlere yakın sonuçlar yakalayabiliyordu.

Sebep neydi biliyormusunuz ? Vatandaşlar bir makinenin yerini değiştirmişler, 8 belkide 16 khz e kadar anahtarlama yapabilen motor sürücünün uzattıkları ekransız kablosunun 4 metrelik bir bölümünü plastik kelepçelerle ekranlı olan ADC kablosunuda içine alacak şekilde diğer kablolarla toplayıp güzelce derlemişler. Kıyma frekansı 3-5 khze çıktığında kablo adeta bir radyo verici gibi etrafa parazit yaymaya başlıyor ve her şeyi alt üst ediyordu. Özellikle ADC kanalındaki voltaj değeri sıfır veya sıfıra yakın olduğunda kablo ekranlanmış olduğu halde ölçüm sonucu ters bakiye verir gibi +5 e dayanmış çıkabiliyordu.

Yani işler her zaman masa başında hesaplandığı gibi veya montajı yapıp bıraktığınız durumda devam etmiyor. Bu karmaşa içinde günde bir kaç kez sapıtsada işini yapabilen bu cihaza helal olsun demekten kendimizi alamadık. Çünkü gerçekten büyük bir çoğunlukla içme suyu kalitesini yakalayabiliyordu.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!