Çok sayıda ADC okuma Algoritması

Başlatan fractal, 03 Mayıs 2013, 14:59:47

fractal

4 adet adc okumam gerekiyor ama nasıl okuyacağım üzerine karar veremiyorum.örneğin bir tane timer kurup her 10ms dolunca hepsini kesme rutinindemi okusam yoksa.runtime döngümde kesme oluştumu oluşmadımı diye kontrol edip sıra ilemi okusam.adc girişlerim akım gerilim ısı şeklinde.akım okuma için rms hesaplayacağım ısı için ntc algoritmalarını kullanacağım.bunların hepsini ortak bir algoritmada nasıl toplarım.şu an öncelik benim için önemli değil yani akımı yada ısyı daha önce okumuşum sorun değil.hepsi için ring buffer kullanmayıda düşünüyorum.acaba her kesme heldiğinde ilgili adcleri bu kesme rutuninde buffuramı göndersem teker teker...kafam karıştı..runtime kısmını kontrol işlemlerini azaltmanın bir avantajı varmıdır.
Restantum cogniscutur Quantum deligutur

Erol YILMAZ

ADC için, sinyallerin NTC den yada akım sensöründen gelmesi de önemli olmadığına göre,

Sıra ile teker teker okumakta fayda var.

fractal

belli bir periyotla kesme rutuni içindemi yoksa ana döngümde kemse oldumu olmadımı kontrolü yaparakmı yoksa ana döngüde  sırası ile sürekli okumamı hangisini kastettiniz anlamadım?
Restantum cogniscutur Quantum deligutur

pisayisi

Timer kurup kesme rutini ile okumak en mantıklısı, eğer stm serisi işlemcilerle çalışıyorsanız systick timer bu işler için ideal...
Murat

fractal

hocam ben stellaris kullanıyorum.nedir bu systick ne işe yarar?
Restantum cogniscutur Quantum deligutur

Erol YILMAZ

timer ile belli periyotlarla kurarsınız, çevrim bitince de okursunuz.

Döngü zamanınız değişken olacağı için döngü içinde değişken periyotlarla çevrim bence çok hoş olmaz.

ARM cortex serisi için bir timer a ortak bir isim verdi, Systick...
belli periyotlarla kesme işlemi oluşturmak amacı ile kullanılıyor.

STM32, LPC ve diğerlerinde var...

fractal

 bu systick güzelmiş direkt çalıştı.evet kesme oluşunca  hemen adc leri okumak daha mantıklı.yoksa diğer türlü ana döngünün içinde adc kesme oldumu olmadı kontrol ederken hep aynı sürelerde işlem yapılmaya bilir.buda olumsuz bazı sonuçlara neden olabilir...

    SysTickPeriodSet(SysCtlClockGet());

    //
    // Enable interrupts to the processor.
    //
    IntMasterEnable();

    //
    // Enable the SysTick Interrupt.
    //
    SysTickIntEnable();

    //
    // Enable SysTick.
    //
    SysTickEnable();
Restantum cogniscutur Quantum deligutur

fractal

peki her kesmede tek tek örnek alıp belli sayıda kesme oluşuncamı rms hesaplamak daha doğru yoksa her kesme oluştuğunda belli sayıda örnek alıp tüm işi tek seferdemi yapmak?
Restantum cogniscutur Quantum deligutur

MrDarK

Bu kullandığın analog komponentlere göre değişir, ısı sensörü (NTC) nin sıcaklık karşısında olağan davranışını incelemen gerekir. Eğer çıkışı çok fazla değiştiriyorsa 3-5 örnek alıp bunların ortalamasından sonuca gitmen daha mantıklı olur. Ama temiz çıkış veren analog sensörlerin varsa eğer böyle birşeye ihtiyacın olmayabilir ;)
Picproje Eğitim Gönüllüleri ~ MrDarK

fractal

kafama takılan başka bir soru ise şu..

4 tane adc kanalım olsun.3 tanesini aynı sıklıkla okuyacağım diğerini ayrı.şimdi bu ayrı okuduğum benim ,için cok önemli olsun.bunu okuma zamanı geldiğinde diğer 3 tanesinin okuma işlemi bitmemişse benim okuma frekansım değişmiş olucak.tam terside olabilir.rms hesaplayacağım için bu örnekleme kaymaları benim değerlerimi bozabilir.bunu engellemek için ne yapabilirim.
Restantum cogniscutur Quantum deligutur

Erol YILMAZ

Alıntı yapılan: fractal - 20 Mayıs 2013, 09:13:37
kafama takılan başka bir soru ise şu..

4 tane adc kanalım olsun.3 tanesini aynı sıklıkla okuyacağım diğerini ayrı.şimdi bu ayrı okuduğum benim ,için cok önemli olsun.bunu okuma zamanı geldiğinde diğer 3 tanesinin okuma işlemi bitmemişse benim okuma frekansım değişmiş olucak.tam terside olabilir.rms hesaplayacağım için bu örnekleme kaymaları benim değerlerimi bozabilir.bunu engellemek için ne yapabilirim.

Bazı şeylerin cevabını bulabilmek için çalışmak lazım.

Bu bozulma ne seviyede oluyor ?

Senin ne kadarlık bozulmaya müsaaden var ?

İhtimaller:
Bahsettiğin bozulma %0.1 in altında ise problem etmeye değmeyebilir.
Bozulma kesinlikle farkedilmeyecek seviyede gerçekleşebilir.
Misal örnekleri 20 mS de bir alırken 2. örneği 40. mS + 50 uS noktasında almış olman hiç bir anlam ifade etmeyebilir.

GreeN

STM32F407 adc üzerinde "n adet veri oku ve kesme oluştur." şeklinde...
hatta dma'yıda kullanarak "n adet veri oku ve adc[x] değişkenine at işlem bitince dma kesme oluştur."

gibi senaryolar yapabiliyorsun. zamanlamalar çok önemli ise ve adc prescaller ile ayarlayamıyorsanız timer ile yapabilirsiniz.

dsPIC33FJ16GSxxx , dsPIC30F40xx gibi MCU'larda da var bu tip özellikler.(bu iki örnekte dma yok)

Kullandığınız işlemcide de vardır.
Terörü Lanetliyoruz.

fractal

@Green hocam ben stellaris kullanıyorum onda da udma var ama bahsettiğiniz senaryoları ne kadar ferçekleyebilirim bilmiyorum.söz konusu senaryoda dma ile tek seferde çok sayıda adc de den aynı sayıda okuma yapılıp ring buffera gönderilebilirmi?
Restantum cogniscutur Quantum deligutur