Eszamanli veri alimi ?

Başlatan gumush, 16 Kasım 2015, 17:17:06

gumush

Merhaba ,

i2c ile baglandigim birden cok sensorden(IMU ve MEMS Mikrofon) gelen verileri toplamak istiyorum. Ancak gelen verilerin olabildigince senkronize olmasini istiyorum. Toplamda 16-24 gibi sensor sayilarindan bu bilgileri almak istiyorum.

Alternatifler


  • I2C cogalticilar bir cesit siwtch gorevi goruyor birini bekletip digerinden okuyor bu nedenle istemedigim bir durum bu.
  • Her sensore bir MCU eklemek bunlardan bilgileri seri baglanti ile almak , boylece ana MCU' ile verileri toplayabilirim. Ancak bu durumda da 1. ile 24. sensor arasinda okuma icin gecen surenin toplami kadar fark olacaktir.
  • Her sensore bir MCU eklemek , bunlari microsecond duzeyinde senkronize etmek ( farkli protokoller var ) merkeze aktarirken zaman bilgisi ile aktarmak bu sekilde olabildigince yakin eszamanli veri elde etmek.
  • Vucut uzerinde ana bir unite bulundurmak yerine her bir sensoru BL ile ana sisteme baglamak bu sekilde yine once zaman senkronizasyonu yaparak bilgileri bilgisayara aktarmak , bilgisayar uzerinde islemek. 


Hikmet Gumus  izmir

OG

Hocam "gelen verilerin olabildigince senkronize olmasini istiyorum" dan kasıt olabildiğince hızlı demek olsa gerek. Çünkü I2C de aynı anda 1 unite ile iletişim mümkün.

Ayrıca I2C unitelerin data, clock yollarını çok fazla uzatmak mümkün değil.

Alınacak data boyutu ne kadardır bilmiyorum ama her üniteye 1 MCU ve RS485 uzaktan daha hızlı iletişim.
Konu sanki şuna benziyor, https://www.picproje.org/index.php/topic,61976.0.html
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

gumush

Yanit icin tesekkur ederim,  aslinda sorun su her sensorden gelen verinin olabildigince ayni ana ait olmasi. Bu durumda temel ozellik hizli okuyabilmek oluyor.

RS485 ikinci kez karsima cikiyor , bu sefer gidip biraz okuyayim. ( Unitelerin vucut uzerinde tasinmasi nedeniyle olabildigince az komponent ve kucuk boyutlu olmasi onemli )

Aslinda bu birazda multitasking gibi bir istek. Bir sensorden analog bir veri geldigini bunun 2000hz'de orneklendigini dusunelim. Bunu yaparken farkli bir sensorden yine ayni sekilde 2000hz'lik bir veriyi nasil okuruz ?

Hikmet Gumus  izmir

OG

2000Hz de örneklenen veri 0,0005sn (500usn) de bir örneklenen bir veri şeklinde anladım. Bu verinin boyutu nedir, yani iletilecek verinin boyutu nedir?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

gumush

Sensor Sayisi x 16bit x 6   ,  bu durumda 16 yada 24 X 16bit X 6
Hikmet Gumus  izmir

OG

Hocam biraz açmanız gerek, benim anlayışımın kıtlığından.

Ayrıca bu sensorler aynı body uzerindemidir, farklı mı?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Salih

Eğer mümkünse haberleşmesiz direk analog değer olarak ölçün.
Hızlı ölçmek için daha uygun olur.

gumush

Tamamdir , biraz daha detayli anlatayim. Ilk asamada 16 adet IMU'nun verilerini es zamanli olarak almak , unitelerin senk. saglamak icin unitelere bir mic. eklemeyi dusunuyorum. Boylece ses kullanarak uniteleri senkronize edebilecegim. Ancak bunun ne kadar basarili olabilecegini bilmiyorum. Bu nedenle simdilik sadece tasari asamasinda.
Sensorlerin tamami bir kisinin uzerinde olacak , amac farkli noktalara ait verilerin alinmasi.  IMU 'dan gelecek bilgilerin ornekleme hizlari farkli ama 400hz maksimum i2c degeri. Bu durumda magnetometer , accelerometer ve gyroscope'dan gelen bilgileri her eksen icin 16bit olarak alabilirz. Bu durumda 9 x 16bit veri oluyor. Ama almak istedigimiz tek veri bu degil , bazi noktalarda basinc ,bazi noktalarda loadcell'den gelen verileri , bazi noktalarda direnc degisiklikleri ve bazi noktalarda yine i2c ile farkli sensorlerden gelen bilgileri bir noktada toplamak.

Iki temel engel var 
Bunlardan biri unitelerin zamanlarini eslestirmek boylece veriler olabildigince ayni zamana ait olacak.( ses ile senkronize etmek , kablosuz olarak senkronize etmek alternatiflerim arasinda ) 
Bilgilerin aktarilmasi icin en istenen yol kablosuz aktarim olmaz ise vucut uzerinde bir noktaya kablo ile ileterek bu noktadan kablosuz olarak bilgisayara aktarmak , oda olmaz ise vucut uzerinde bir yere verileri sonra islemek uzere kaydetmek.

Hikmet Gumus  izmir

OG

Sensorler hakkında bilgim olmadığımdan varsayımla gidiyorum,

Sensorler +- içeren 2 hat ile beslenir, her sensorun bir ID si vardır.
Sensorlere senkron olcum için 1 adet IRQ uzanır, hat pullup veya pulldown dır. IRQ hattı takip edilir, LOW (veya H) olduğu anda ölçümler yapılır. Ölçümü başlatma yetkisi herhangi bir sensore verilebilir. O sensor hattı ceker ve bırakır, bıraktığı gibi tüm sensorler ölçme işlemlerini başlatılır. Ölçme bitince ilk ID ye sahip sensor bilgileri gönderir, ilk ID bitirince ikincisi ... sona kadar devam.

Bunları alıp loglayan veya RF ile veya kablo ile dış dünyaya ileten bir unite de yeterli hızda iletir. Mesela 2Mbit hız için 1 byte süresi 5usn dir, 2000Hz (500us) refresh içinde 100 byte gidebilir.
Gibi.

2Mbit hız hem RS485 hem RF üniteler ile sağlanabilir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Ersin

illa i2c olma şartı yoksa spi kullanabilirsiniz, google da   spi daisy chain   diye aratın.Hem spi da hızlar i2c ye göre daha yuksek olabiliyor.

gumush

i2c olma sarti yok bu nedenle dediginiz gibi spi'da kullanilabilir. Ancak her sensorde ayri mcu olmayacak ise o zaman ana unitede select pini icin sorun olabilir diye dusunmustum.

Gordugum kadariyla sensor uzerinde IRQ yok. Ancak her node icin bir MCU olacaksa IRQ yontemi kullanilabilir. Eger fiziksel baglanti kullanmak durumunda kalirsam bunu kullanabilirim.

Hikmet Gumus  izmir

tekosis

#11
Her sensore bir mcu bağlanır. Ana mcu hatta oku sinyalini yollar. Tüm mcu lar o anda kendilerine ait sensörün değerlerini okur, hafızasına alır. Bu arada ana mcu önceden belirlenen okuma beklemesi sonunda hatta bilgilerinizi yollayın der, her mcu daha önceden belirlenmiş protokole bağlı olarak kendi bilgilerin kısa surede hatta basar... pardon zaten bahsedilmiş.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

sadogan


Karamel

Gumus hocam. Microcontroller birsey yaparken peripheral unitleri sayesinde baska isler yapabiliyor.

Mesela usart unit i olan bir microcontroller. Islerini yaparken. Bilgi geliyor. Bilgi tamamen alininca interrupt olusuyor. Bunlar microcontrollerin kapaaitesine gore degisiklik gosterebiliyor. 30 un uzerinde interrupt sekli olan microcontrollerlar var(daha fazlada vardir)

Microcontrollerda dma unit denen bir birim varsa o zaman microcontroller tamamen baska isler ile ugrasirken. Peripheral units dma sayesinde kendi kendine verileri alip gonderebiliryor.

Message larinizdan benim aklimda hicbirsey olusmadi. Anladigim kadarila gelen yanitlarda sizin istekelrinizi karsilamadi.

Bu biraz seye benzedi. Ben 4km yolu gitmek istiyorum diyorsunuz. Ucakla git diye yanit geliyor.

Burada kimse suclu degil. Yapilmasi gereken seyi daha detaylica anlatirsaniz. Hocalarim cok daha iyi bir sekilde size yardimci olabilirler.

iyildirim

Bahsedilen sensörler muhtelemelen digital. Kompakt birşey ise de  MPU 9xxx serisi gibi birşey.   
Eğer zaman senkronizasyonu mikrosaniyeler cinsinden isteniyorsa, bunu  sağlamak gerçekten zor.
Sensöre oku dediğiniz zaman, bir süre önce ölçülmüş, bufferındaki hazırda duran veriyi gönderir. Yani sensör bant genişliğinin altına inmek zor.
Ancak veri hazır kesmesi kullanıp, oku dendiği ana göre ne kadar + - offset süresi ile okunduğu bilinebilir.

Bu yetiyorsa 9DOF * 16 bit * 24 sensör, denildiği gibi saniyede 1000 kere okunacaksa 3.5Mbit gibi bir bant genişliği çıkar. Ki bu Raw veri. Protokol vs. fazlalıkları dahil değil.

Bunu bir mcu ya aktarmak sorun olmasa bile PC ye aktarmak da sorun.
Ya bu değerler makul mesela 2Mbit seviyelerine çekilmeli. Yani daha düşük tazeleme hızları kullanılmalı.

Yada aktarım için makul bir yol bulunmalı.
Kablosuz tercihi için ucuz ESP modüller olabilirdi ama bu hızlara yetişemez. NRF modüller de yeterli olmaz.

@Ersin hocamın söylediği şekilde daisy chain bağlantı ile (ki paralel SPI hatlarıda olabilir). Ve sensör SPI olsa bile bu tip bağlantı desteklemeyeceğinden ayrıca bir mcu kullanarak (Ki sensörün SPI olması zorunluluğunu da kaldırır.) bilgiyi bir noktada toplayıp yüksek hızlı bir bağlantı ile (Prof Wi-fi modül veya  USB2 hi-sp destekli UART-TTL. mesela FT2232x) PC ye gönderilmesi bana mantıklı yol gibi geliyor.