Soru:
Aynı adrese sahip birden fazla I2C sensörü
Łukasz Kidziński
2017-01-05 02:26:32 UTC
view on stackexchange narkive permalink

Birden çok (tercihen yaklaşık 10-20) IMU sensörünü tek bir denetleyiciye bağlamanın en basit yolunu bulmaya çalışıyorum. İki kısıtlama var: 60 Hz'de örnekleme ve kıyafetlere giydirmek istediğim için makul ölçüde basit kablolama.

Arduino dünyasında tamamen yeniyim, lütfen diğer hangi ayrıntıları sağlamam gerektiğini bana bildirin.

Görünüşe göre I2C veri yolunda birden fazla IMU'ya sahip olmak harika işe yarayacak, ancak genellikle hepsi aynı adresle geliyor.

Şu ana kadar bulduğum çözümler:

  • Farklı şirketlerden birkaç farklı IMU kullanmak - bunlardan 20 tanesini bulmak zor
  • Çoklayıcı kullanmak yıldız benzeri kablolama topolojisi gerektirir.
  • Birden çok denetleyici kullanmak - verimsiz ve doğru görünmüyor.

Şimdilik, bir çoklayıcı ile çözüm bana en mantıklı görünüyor, ama kaçırdığım başka bir yol var mı? Örneğin 16 farklı adrese sahip IMU'lar üretip hepsini bir I2C'ye bağlayabilir miyim?

Yardımınız için teşekkürler!

Ayrıca bkz. Http://arduino.stackexchange.com/questions/18790/how-to-set-address-for-using-more-than-mpu9250/18793#18793
üç yanıtlar:
dda
2017-01-05 12:50:20 UTC
view on stackexchange narkive permalink

MPU6050 IMU'ları kullanıyorsanız, kolay bir numara var: hepsini I2C veriyoluna koyun ve her bir IMU'nun AD0 pinini Arduino [*] üzerindeki ayrı bir dijital pin'e bağlayın. Belirli bir IMU'dan okumak istediğinizde, DÜŞÜK olarak okumak istediğiniz hariç tüm AD0 ’ları YÜKSEK olarak ayarlayın. AD0 ile HIGH olarak ayarlanmış tüm IMU'ların I2C adresi 0x69 iken, DÜŞÜK üzerindeki tek bir 0x68 adresine sahip olacaktır.

Hepsini okumak istiyorsanız, bir döngüden geçip DÜŞÜK , diğerlerini YÜKSEK olarak ayarlamanız yeterlidir ve hazırsınız.

[*] 20 IMU istiyorsanız, bir Mega veya daha iyisi bir Maple alsanız iyi olur. Küçük form faktörü, oldukça fazla güç, çok sayıda pin ve flaş ve bazı klonların neredeyse hiçbir maliyeti yoktur; Örneğin, Itead Maple klonlarını 6 dolara satıyor. ElecFreaks bunları 9 dolara satıyor. AD0s.

için alttaki 16 pini kullanabilirsiniz.

Bu numara, bir veya daha fazla pim aracılığıyla özelleştirilebilir bir adres şemasına sahip her tür I2C cihazında çalışır. Bunu 0x50-57 adres aralığı olan AT24Cxx EEPROMS ile yapıyorum. Sekizden fazla yongaya sahip olmak istediğinizde, biri hariç tümünü 0x50'ye ve birini 0x51'e ayarlamak sorunu hemen çözer.

Referans: https://github.com/PaulStoffregen/FreeIMU_original/blob /master/documents/PS-MPU-6000A-00v3.4.pdf

Bu oldukça akıllıca bir fikir!
Ve senden gelmek güzel bir iltifat, Nick!
MayBee
2018-05-24 14:03:09 UTC
view on stackexchange narkive permalink

Ayrıca, bir I2C hattını 4 otobüse bölebilen TCA9545A gibi I2C Çoklayıcılar da edinebilirsiniz. Bununla bir hatta 9 MPU9150'ye kadar bağladım.

Jeromy Adofo
2020-02-01 18:23:18 UTC
view on stackexchange narkive permalink

Diğer bir yol, dijital I / O pinlerinden herhangi birinin bir I2C pini olarak işlev görmesi için I2C arayüzünün yazılım öykünmesini kullanmaktır. Bunun için kullanabileceğiniz iyi yazılmış bir kitaplık Steven Marple tarafından yazılan SoftWire 'dir. Arduino Kitaplık Yöneticisi aracılığıyla veya doğrudan GitHub deposundan buradan yüklenebilir.

Bununla, her I2C için SDA ve SCL olarak işlev görmek üzere rastgele pin çiftleri seçebilirsiniz. ardından her cihazla ayrı ayrı iletişim kurabilirsiniz.

Bu yöntemle, her I2C cihazı için iki dijital pime ihtiyacınız olduğunu unutmayın. Bu anlamda, söz konusu IMU'lar açısından @ dda'nın yanıtının en iyisi olduğuna inanıyorum.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...