ADC okumasında yükselen veya düşen kenar algılaması algoritması

Başlatan tekosis, 18 Mart 2019, 01:12:58

tekosis

Bir analog kanaldan genliği 0.1V - 3.3V, frekansı 1hz - 150Khz aralığında değişebilen kare dalga bir sinyalden örnekler almak istiyorum. İlk okumaya kare dalganın yükselen(veya düşen) kenarından itibaren başlamak, tetiklemeyi buradan almak istiyorum. Bunu nasıl bir algoritma kurarak halledebilirim? Kesin ve basit bir yöntem arayışındayım. Bu arada cihaz üzerinde ilave donanım kuramam, sadece analog kanaldan gelen sinyali okuyarak bir tetikleme noktası almam gerekiyor.

aklıma gelen ilk algoritma:
* yaklaşık 100 örnek al,
* bu örneklerde min değerden max değere geçiş arasında kaç örnek var say.
* eğer geçiş hızlı ise(az sayıda örnekte geçiş sağlanmışsa) ve max değerde kalmaya devam ediyorsa(parazit değilse) bu bir yükselen kenardır.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Cemre.

ADC'den gelen verileri belirli bir değerin altında ise 0, üstünde ise 1 olarak değerlendirmeyi düşündünüz mü? Daha sağlıklı çalışması için schmitt trigger mantığını da implemente edebilirsiniz

Bundan sonrası zaten 0->1 veya 1->0 olma durumlarını taramaya kalıyor..

devrecii

Program başlar başlamaz bir adc örneği al bir değişkene at, daha sonra program döngüsünde aldığın adc örneğini her defasında ilk aldığın örnekle kıyasla eğer aradaki fark örnek -100 ise trigger up +100 ise trigger down dur. Trgger
gerçekleşmişse değişkene attığın değeri son  değerle değiştir. Böyle devam etsin gitsin.

Piklerden kurtulmak için tepe süresini test edebilirsin msela pik tepesinde anında up olacak ve hemen down olacak aradaki zaman farkı üç tane adc süresi o zaman bunu trigger olrak kabul etmeyeceksin,

Ortalama da alabilirsin piklerden etkilemenmek için mesela 100adc toplamının ortalaması.

1n4001

Hangi MCU kullanıyorsunuz bilmiyorum ancak STM32'den örnek vereyim. Kare dalgayı Timer'a harici clock olarak girip Timer ile de ADC çevrimini tetikletebilirsiniz diye düşünüyorum.

M.Salim GÜLLÜCE

Sanırım bu konu daha önce çok detaylı işlenmişti diye hatırlıyorum.
Arşivi taramakta fayda war sanırım.
Maximum ve minimum noktalarını bulmak başlığı ile idi sanki
Ancak aradım bulamadım..

tekosis

Alıntı yapılan: Cemre. - 18 Mart 2019, 16:55:53ADC'den gelen verileri belirli bir değerin altında ise 0, üstünde ise 1 olarak değerlendirmeyi düşündünüz mü? Daha sağlıklı çalışması için schmitt trigger mantığını da implemente edebilirsiniz

@Cemre. Gayet basit ve benim sistemim için yeterli bir çözüm teşekkür ederim.

Alıntı yapılan: iboibo - 18 Mart 2019, 17:03:08Program başlar başlamaz bir adc örneği al bir değişkene at, daha sonra program döngüsünde aldığın adc örneğini her defasında ilk aldığın örnekle kıyasla eğer aradaki fark örnek -100 ise trigger up +100 ise trigger down dur.

@iboibo giriş voltajım aşağı yukarı belli olsa, değişken olmasa dediğin gayet mantıklı bir sistem, denemeye değer. Teşekkür ederim.

Alıntı yapılan: 1n4001 - 19 Mart 2019, 10:07:44Hangi MCU kullanıyorsunuz bilmiyorum ancak STM32'den örnek vereyim. Kare dalgayı Timer'a harici clock olarak girip Timer ile de ADC çevrimini tetikletebilirsiniz diye düşünüyorum.

@1n4001 Mevcut devre üzerinde donanımsal bir değişiklik yapamıyorum. Yapabilsem başka türlü bir tetikleme devresi de kurabilirdim. Dediğiniz yöntem de sıfırdan kurulacak devrede uygulamak için mantıklı, hem donanımı oyalamaz hem istikrarlı olur. Teşekkür ederim.

@Mehmet Salim GÜLLÜCE Teşekkür ederim. Denk gelirse ben de buraya o başlığı buraya eklerim.

Sonuç olarak mevcut devremde ekran ve butonlar var idi. Ben de yazılıma dışarıdan set edilebilen bir trigger tetikleme voltaj seviyesi girdim. Yazılımdan bu noktayı kıyaslayarak tetikleme aldım. Ölçtüğüm kare dalganın yükselen ve düşen kenarlarının slew/rate oranı düşük olduğundan adc okuma hızı bu işlem için yeterli oldu.

Bir daha bu tarz bir işle yapmam gerekirse bir tetikleme devresi kuracağım yada entegrenin komparatör özelliği varsa bundan faydalanılabilir. araştırma yaparken aşağıdaki gibi comparator entegrelerine denk geldim. belki birilerine lazım olur.

http://www.tij.co.jp/jp/lit/ds/snos977f/snos977f.pdf
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.