I2C'yi 2m kablolar üzerinde kullanabilir miyim?


24

Mevcut projemde, bir mikrodenetleyici ile I2C üzerindeki bazı sensörler arasında iletişim kurmam gerekiyor. Bunlardan biri bir sıcaklık sensörüdür, mikrodenetleyiciden yaklaşık 2 metre uzağa yerleştirilmesi gerekir. Başka bir protokol seçemiyorum (sensör verilen konektör / pimler / protokol ile bir modül üzerinde).

Bu yapılandırmada iletişim kurmanın mümkün olduğunu düşünüyor musunuz? Mümkün veya mümkün olamayacağından emin olmak için hangi bilgilere bakmalıyım? Bir tavsiyen var mı?

PCB ile IC ile ilk kez iletişim kuruyorum.


5
Lütfen daha fazla bilgi ekleyin. İ2c hızı ne olur? Pull-up dirençleri? Kullanılan kablo ve kapasitans? Ana MCU nedir ve sensör nedir? Ancak genel olarak, I2C HDMI gibi kablolar üzerinde birkaç metre çalışır, bu yüzden işler doğru yapıldığında çalışması gerekir.
Justme


6
"Başka bir protokol seçemiyorum" Sensöre yakın ikinci bir mikrodenetleyici yerleştirebilir, verileri okuyabilir ve istediğiniz herhangi bir protokolle gönderebilirsiniz.
FooBar

1
Kbit / s olarak minimum hıza sahip misiniz?
Direk

2
Saati yavaşlatırsanız oldukça uzun mesafelere gidebilirsiniz.
copper.hat

Yanıtlar:


36

I2C uzun mesafelerde kullanılmak üzere tasarlanmamıştır, ancak gerçekte yaklaşık 2 metrelik bir mesafede kullanıldığı çeşitli uygulamaları biliyorum. Ayrıca bununla ilgili sorunları olan bir vakayı da biliyorum ve nihayetinde inanıyorum ki yer döngülerine karar verdim.

Bunun çalışacağından emin olmak için, P82B715 gibi bir I2C veri yolu genişletici kullanmalısınız.

Bununla birlikte, PB2B715'in veri sayfası bölüm 8.2'de aşağıdakileri söylemektedir:

Telefon veya Ethernet (Cat5e) kablolarında kullanılan tipik bükülmüş çift veya düz kablolar için, bu kapasitans yaklaşık 50 pF ila 70 pF / metre civarındadır, böylece kablo teorik olarak 50 m uzunluğa kadar olabilir . Pratik deneyime göre, 30 m, gösterilen değerler ile 100 kHz'e kadar bu basit şekilde sürülecek güvenli bir kablo uzunluğu kanıtlamıştır . Daha uzun mesafeler ve daha yüksek hızlar mümkündür ancak daha dikkatli tasarım gerektirir.

Bu yüzden uzmanlar (NXP, I2C'nin mucidi olan eski Philips'tir), 30 metrelik bir mesafe olduğunu kanıtladı. Tecrübelerim 2 metrelik bir mesafe olduğunu söylüyor ve bana bildirilen deneyimler, herhangi bir genişleticisiz daha ağır yüklü I2C otobüslerinin de mümkün olduğunu gösteriyor.

Uzun mesafelerde çalışan I2C veri yollarının kilit noktaları:

  • Düşük kapasitans kablosu kullanarak (bükümlü çift / Ethernet);
  • Veri yolu hızını sınırlamak;
  • Doğru boyutta pull-up'lar olması.

Pullup hesaplama

Texas Instruments, pull-up hesaplaması hakkında iyi bir uygulama notuna (SLVA689) sahiptir .

  • Çekme işleminin alt sınırı (minimum değer), veri yolu üzerindeki en zayıf çevresel akım ve herhangi bir çevre birim için 0'ı temsil eden maksimum voltaj tarafından belirlenir. Eğer 1V hala 0 ise, VCC'niz maksimum 3V6'dır ve en zayıf cihazınız sadece 20mA çekebilir, direnciniz direnç üzerindeki voltaj kaybı ve o cihazın çektiği akım tarafından belirlenir: (3.6 V1 V) / 20 mA=130 Ω .
  • Rmax=tr/(0.8473Cb)trCbCbtrR,mbirx=2950 Ω. TI'nin uygulama notunda grafikler bulunur, böylece uygun değerleri hızlı bir şekilde bulabilirsiniz.
  • Tabii ki, geri çekme değeri, paralel olarak bütün geri çekilmelerin eşdeğer değeridir. Master ucunda, slave ucunda ve otobüste başka herhangi bir slave / master üzerinde bir çekme olabilir.
  • Ne kadar çok “sınırda” olursanız, kablodaki voltaj düşmesi gibi “parazit” de hesaba katmanız gerekir.

Doğru boyutta pull-up'lar mı var? Değer ve güç derecesi nasıl belirlenir?
Quantum0xE7

Nick B'nin başka bir cevaba yorum yaptığı gibi , veri yolu genişletici yongası olasılığına veya sıcaklık sensörünü birkaç derece ısıtan başka bir şeye dikkat edin.
Peter Cordes

14

Genellikle 400 pF maksimum veri yolu kapasitansı ile sınırlandırılırsınız.

Frekansınızı 1 kHz gibi bir şeye düşürürseniz ve sensörün yanında güç kaynağı ayrıştırması varsa, iyi çalışmalıdır.

Daha sağlam bir şeye ihtiyacınız olursa, PCA9615 gibi her iki ucunda da diferansiyel I2C dönüştürücüleri kullanabilirsiniz .


Asgari I2C frekansına sahip bazı sensörleri kısaca hatırlıyorum (neden olduğundan emin değilim).
Michael,

14

Yapabilirsin, ama tavsiye edilmez.

Farklı amaçlar için farklı otobüsler

SPI gibi I2C, bir pano veya pano grubu içinde iletişim için tasarlanmıştır (Ahududu Pi ve şapkalarını veya arduino ve kalkanlarını düşünün). Uzun mesafelerde çalışabilir (diğer cevaplara bakın) ancak bu durumlarda kullanılmamalıdır, çünkü bunun için tasarlanmamıştır, optimize edilmemiştir ve kalifiye değildir.

Alacağınız risk, gelecekte daha fazla sensör ekleyemeyeceğiniz veya sisteminizin her yerde çalışmayacağı veya belirli koşullar altında başarısız olabileceğidir.

Aramanız gereken bir saha otobüsü, 1 telli, CAN, RS-485, ethernet vb. Gibi bir şeydir.

Bluetooth veya zigbee gibi kablosuz sistemler de bir seçenek olabilir.


9

@Filo tarafından belirtildiği gibi, I2C genellikle veri yolu kapasitansı ile sınırlıdır. Bununla birlikte, bu sorunu çözmenin yolları var:

  1. Bir otobüs genişletici kullanın. P82B96 veya PCA9600 hem sizin durumunuzda iyi seçenek olacaktır.
  2. Daha yüksek hızlara veya çok uzun kablolara ihtiyacınız varsa, PCA9600 gibi bir diferansiyel I2C alıcı-verici kullanabilirsiniz . Ancak bu, devrenizi oldukça karmaşık hale getirecektir ve kablonun her iki ucunda da bir IC'ye ihtiyacınız vardır.

Daha fazla bilgi için NXP’den AN10658 ve AN11084’e bakın .


1
Bu, birçoğunun söylediği gibi, bir otobüs genişletici ile sorunsuz çalışacaktır. İzlenmesi hemen belli olmayan bir şey, sensör ve veri yolu genişleticisinin birbirine yakın olması durumunda, sensör ucundaki veri yolu genişleticisinin sıcaklık sensörlerini birkaç derece yükseltmek için yeterli ısıyı dağıtabilmesidir.
Nick B

4

Filo ve Caleb'in cevaplarını seviyorum.

Başka bir seçenek, tek tek sensörlerde bir veya daha fazla DS28E17 1-Tel-I2C Ana Köprü kullanmak ve veri yolunu Onewire olarak bağlamaktır. Bu,> 100m'lik otobüsler için iyidir ve dağıtılmış sıcaklık ve batarya yönetimi olarak düşük verimli sensör dizisi uygulamalarına uygundur.


İlginç bir düşünce, ancak ana 1 telli bir arayüze sahip değilse, ek yükü ekleyebilir.
Caleb Reister

Bu dublör için tam sürücü destesine sahip olduğundan, bir Linux sunucunuz varsa çoğunlukla bir seçenektir. Bir Raspberry Pi’de, GPIO4’u DS28E17’nin 1W girişine bağlamanız yeterlidir, bu 100m telden (tabii ki GND’den), config.txt’yi düzenleyin ve bitirdiniz. Tamamen şeffaf, yerel bir I²C'ye benziyor. Sadece daha yavaş.
Janka

Teşekkürler. 1-Wire'ın bu kadar mesafeyi yapabilmesine şaşırdım. Dirençlerin daha küçük olması nedeniyle mantıklı olduğunu düşünüyorum.
domen

Onewire yükselen kenar zamanlamasına dayanmaz, bunun yerine tüm bit zamanlaması aktif olarak sürülen düşen kenara göre yapılır. Bu yüzden yüksek kapasitif yüklemeye daha az hassastır. Birkaç nF tamam.
Janka
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.