Чи можу я використовувати кабель I2C понад 2 м?


24

У моєму поточному проекті мені потрібно зв’язатись між мікроконтролером та деякими датчиками через I2C. Один з них - це датчик температури, його потрібно розмістити приблизно на відстані 2 метрів від мікроконтролера. Я не можу вибрати інший протокол (датчик знаходиться на модулі із заданим роз'ємом / контактами / протоколом).

Як ви вважаєте, чи можливо спілкуватися в цій конфігурації? Яку інформацію слід шукати, щоб переконатися, що це неможливо чи неможливо? Чи є у вас поради?

Це вперше спілкування з ІС за межами друкованої плати.


5
Будь ласка, додайте більше інформації. Якою була б швидкість i2c? Опір опору? Використовуваний кабель та його ємність? Що таке хост MCU і що таке датчик? Але в цілому I2C працює на кілька метрів над кабелями, як HDMI, тому він повинен працювати, коли все робиться належним чином.
Justme


6
"Я не можу вибрати інший протокол" Ви можете поставити другий мікроконтролер поруч із датчиком, прочитати дані та надіслати їх будь-яким протоколом, який вам подобається.
FooBar

1
У вас мінімальна швидкість в кбіт / с?
Щогла

2
Якщо ви сповільнити годинник вниз, ви можете пройти досить велику відстань.
мідь. Що

Відповіді:


36

I2C не призначений для використання на великих відстанях, але мені відомо кілька застосувань, де він фактично використовується на відстані близько 2 метрів. Я також знаю один із випадків, коли у них виникли проблеми з цим, і це було врегульовано подій, виправляючи петлі заземлення, я вважаю.

Щоб переконатися, що він буде функціонувати, слід використовувати розширювач шини I2C, як P82B715.

Однак у таблиці 8 PB2B715 в розділі 8.2 зазначено наступне:

Для типових кабелів із крученою парою або плоскою мережею, що використовуються для проводки телефонії або Ethernet (Cat5e), ємність становить приблизно від 50 пФ до 70 пФ / метр, тому теоретично кабель може бути довжиною до 50 м . З практичного досвіду, 30 м довели безпечну довжину кабелю, що рухається цим простим способом, до 100 кГц, із показаними значеннями. Більші відстані та більша швидкість можливі, але потребують більш ретельного проектування.

Тож експерти (NXP - колишній Philips, винахідник I2C) стверджують, що 30 метрів було доведено досяжною дистанцією. Як показує мій досвід, 2 метри - це допустима відстань, і досвід, про який було повідомлено мені, свідчить про те, що більш сильно завантажені автобуси I2C без будь-якого розширювача.

Ключовими моментами роботи автобусів I2C на великих відстанях є:

  • Використання кабелю низької ємності (кручена пара / Ethernet);
  • Обмеження швидкості шини;
  • Маючи підтягувачі правильного розміру.

Підрахунок витягування

Компанія Texas Instruments має хорошу примітку щодо додатків (SLVA689) щодо підрахунку підтягувань .

  • (3.6 V-1 V) / 20 мА=130 Ω
  • Rмах=тr/(0,8473Сб)тrСбСбтrRмах=2950 Ω. У примітці програми TI є графіки, завдяки чому можна швидко знайти відповідні значення.
  • Звичайно, значення для підтягування - це еквівалентне значення всіх підключень паралельно поєднаних. У вас може бути перетяжка на головній частині, підлеглий кінець та будь-який інший раб / господар у шині.
  • Чим більше ви "на межі", тим більше вам також потрібно буде враховувати "паразитиків", таких як падіння напруги в кабелі.

Маєте підкачки, які мають правильний розмір? Як визначити значення та потужність?
Quantum0xE7

Як Нік Б прокоментував іншу відповідь, будьте обережні щодо можливості розширення шини шини або будь-якого іншого, що нагріває датчик температури на пару градусів.
Пітер Кордес

14

Ви, як правило, обмежені максимальною ємністю шини 400 пФ.

Це повинно спрацювати, якщо знизити частоту до 1 кГц і забезпечити роз'єднання джерела живлення поруч із датчиком.

Якщо вам потрібно щось більш надійне, тоді ви можете використовувати диференціальні перетворювачі I2C на обох кінцях, як PCA9615 .


Я злегка згадую деякі датчики, що мають мінімальну частоту I2C (не знаю, чому).
Майкл

14

Можна, але це не рекомендується.

Різні автобуси різного призначення

I2C, як і SPI, призначений для спілкування всередині дошки або групи дощок (подумайте, Raspberry Pi та його шапки або ардуїно та його щити). Він може працювати на більшій відстані (див. Інші відповіді), але не повинен використовуватися в тих випадках, просто тому, що це не те, що було розроблено, оптимізовано та кваліфіковано.

Ризик, який ви берете на себе, полягає в тому, що ви, можливо, не зможете додати більше датчиків у майбутньому, або що ваша система не працюватиме скрізь, або вийде з ладу за певних обставин.

Що вам слід шукати - польова шина, щось на зразок 1-провідного, CAN, RS-485, ethernet тощо.

Бездротові системи, такі як Bluetooth або зигбі, також можуть стати варіантом.


9

Як зазначає @filo, I2C, як правило, обмежена ємністю шини. Однак існують способи подолати це:

  1. Використовуйте розширювач шини. P82B96 або PCA9600 б обидва хороші варіанти в вашому випадку.
  2. Якщо вам потрібні більші швидкості або надзвичайно довгі кабелі, ви можете використовувати диференціальний приймач I2C, як PCA9600 . Однак це зробить вашу схему значно складнішою, і вам потрібен ІМС на обох кінцях кабелю.

Погляньте на AN10658 та AN11084 з NXP для отримання додаткової інформації.


1
Це буде працювати нормально з розширювачем шини, як сказали кілька інших. Щось не відразу очевидне, на що слід звернути увагу, що розширювач шини на кінці датчика може розсіювати достатньо тепла, щоб підвищити показник температурних датчиків на пару градусів, якщо датчик і подовжувач шини знаходяться поблизу.
Нік Б

4

Мені подобаються відповіді філо та Калеба.

Іншим варіантом є використання одного або декількох головних мостів DS28E17 1-Wire-to-I2C на окремих датчиках та підключення шини як Onewire. Це добре для шин> 100 м і добре підходить для програм з датчиками низької пропускної здатності, як розподілена температура та управління акумулятором.


Цікава думка, хоча вона може ввести додаткові програмні накладні витрати, якщо майстер не має інтерфейсу 1-Wire.
Caleb Reister

Це здебільшого варіант, якщо у вас є хост Linux, оскільки він має повний стек драйверів для цього трюку. На Raspberry Pi, вам просто потрібно підключити GPIO4 до 1 Вт входу DS28E17 через ці 100 м дроту (плюс GND звичайно), відредагувати config.txt і ви закінчите. Він повністю прозорий, схожий на локальний I²C. Просто повільніше.
Янка

Спасибі. Я був дуже здивований, що 1-провід може зробити таку відстань. Я думаю, це має сенс, оскільки резисторів менше.
domen

Onewire не покладається на синхронізацію піднімаються кромки, але натомість, всі бітові синхронізації робляться стосовно до падаючої кромки, яка активно рухається. Ось чому він менш сприйнятливий до великого ємного навантаження. Кілька nF в порядку.
Янка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.