Posso usar cabos I2C acima de 2m?

24

No meu projeto atual, preciso me comunicar entre um microcontrolador e alguns sensores através do I2C. Um deles é um sensor de temperatura, que precisa ser colocado a aproximadamente 2 metros de distância do microcontrolador. Não posso escolher outro protocolo (o sensor está em um módulo com determinado conector / pinos / protocolo).

Você acha que é possível se comunicar nessa configuração? Quais informações devo procurar para garantir que elas possam ou não ser possíveis? Você tem algum conselho?

É a primeira vez que me comunico com o IC fora do PCB.

JackOfHearts
fonte
5
Por favor, adicione mais informações. Qual seria a velocidade i2c? Resistências à tração? Cabo usado e sua capacitância? Qual é o MCU host e qual é o sensor? Mas, em geral, o I2C trabalha vários metros sobre cabos como HDMI, portanto deve funcionar quando as coisas são feitas corretamente.
Justme
6
"Não posso escolher outro protocolo" Você pode colocar um segundo microcontrolador próximo ao sensor, ler os dados e enviá-los com qualquer protocolo que desejar.
FooBar
1
Você tem uma velocidade mínima em kbit / s?
Mastro
2
Se você desacelerar o relógio, poderá percorrer uma distância bastante longa.
copper.hat

Respostas:

36

O I2C não foi projetado para ser usado em longas distâncias, mas conheço várias aplicações em que ele é realmente usado a uma distância de cerca de 2 metros. Eu também sei de um caso em que eles tiveram problemas com isso e, eventualmente, foi corrigido através da fixação de laços de terra, acredito.

Para ter certeza de que funcionará, você deve usar um extensor de barramento I2C como o P82B715.

No entanto, a folha de dados do PB2B715 diz o seguinte na seção 8.2:

Para cabos trançados ou pares trançados típicos, como usado para telefonia ou fiação Ethernet (Cat5e), essa capacitância é de cerca de 50 pF a 70 pF / metro para que o cabo possa, em teoria, ter até 50 m de comprimento . Por experiência prática, 30 m provaram um comprimento de cabo seguro para ser acionado de maneira simples, até 100 kHz, com os valores mostrados. Distâncias maiores e velocidades mais altas são possíveis, mas requerem um design mais cuidadoso.

Portanto, os especialistas (o NXP é o ex-Philips, o inventor do I2C) afirmam que 30 metros já foram comprovados. Minha experiência diz que 2 metros é uma distância possível e experiências relatadas para mim indicam que também são possíveis barramentos I2C mais pesados, sem nenhum extensor.

Os pontos principais para o trabalho de barramentos I2C em longas distâncias são:

  • Usando um cabo de baixa capacitância (par trançado / Ethernet);
  • Limitando a velocidade do barramento;
  • Tendo pull-ups que são dimensionados corretamente.

Cálculo de pullup

A Texas Instruments possui uma boa nota de aplicação (SLVA689) sobre cálculo de pull-up .

  • (3.6. V-1 V) / 20 mUMA=130 Ω
  • Rmumax=tr/(0,8473Cb)trCbCbtrRmumax=2950 Ω. A nota de aplicação da TI possui gráficos para que você possa encontrar valores apropriados rapidamente.
  • Obviamente, o valor da pullup é o valor equivalente de todas as pullups em paralelo combinadas. Você pode ter um pullup no lado mestre, no lado escravo e em qualquer outro escravo / mestre no barramento.
  • Quanto mais você estiver "no limite", mais precisará também considerar "parasitas", como a queda de tensão no cabo.
le_top
fonte
Tendo pull-ups que são dimensionados corretamente? Como determinar o valor e a classificação de potência?
Quantum0xE7
Como Nick B comentou outra resposta, desconfie da possibilidade do chip extensor de barramento ou de qualquer outra coisa que aqueça o sensor de temperatura alguns graus.
Peter Cordes em
14

Geralmente, você é limitado pela capacidade máxima de barramento de 400 pF.

Deverá funcionar bem se você abaixar sua frequência para algo como 1 kHz e fornecer desacoplamento da fonte de alimentação ao lado do sensor.

Se você precisar de algo mais robusto, poderá usar conversores I2C diferenciais nas duas extremidades, como PCA9615 .

filo
fonte
Lembro-me vagamente de alguns sensores com uma frequência I2C mínima (não sei por que).
Michael
14

Você pode, mas não é recomendado.

Ônibus diferentes para diferentes fins

O I2C, como o SPI, é projetado para comunicação dentro de um quadro ou grupo de quadros (pense no Raspberry Pi e seus chapéus ou no arduino e seus escudos). Ele pode trabalhar em distâncias mais longas (consulte outras respostas), mas não deve ser usado nesses casos, simplesmente porque não é para isso que foi projetado, otimizado e qualificado.

O risco que você corre é que você poderá não conseguir adicionar mais sensores no futuro ou que seu sistema não funcionará em qualquer lugar ou falhará em determinadas circunstâncias.

O que você deve procurar é um barramento de campo, algo como 1 fio, CAN, RS-485, ethernet etc.

Sistemas sem fio como bluetooth ou zigbee também podem ser uma opção.

Sclrx
fonte
9

Conforme observado pelo @filo, o I2C geralmente é limitado pela capacitância do barramento. No entanto, existem maneiras de contornar isso:

  1. Use um extensor de barramento. O P82B96 ou PCA9600 seriam boas opções no seu caso.
  2. Se você precisar de velocidades mais altas ou cabos extremamente longos, poderá usar um transceptor I2C diferencial como o PCA9600 . No entanto, isso tornará seu circuito consideravelmente mais complicado e você precisará de um IC nas duas extremidades do cabo.

Dê uma olhada no AN10658 e AN11084 do NXP para obter mais informações.

Caleb Reister
fonte
1
Isso funcionará bem com um extensor de ônibus, como vários outros disseram. Algo que não é imediatamente óbvio a observar é que o extensor de barramento na extremidade do sensor pode dissipar calor suficiente para elevar a leitura dos sensores de temperatura em alguns graus se o sensor e o extensor de barramento estiverem próximos.
Nick B
4

Eu gosto das respostas de filo e Caleb.

Outra opção é usar uma ou várias pontes mestras DS28E17 1-Wire-I2C nos sensores individuais e conectar o barramento como Onewire. Isso é bom para barramentos de> 100m e é adequado para aplicações de matriz de sensores de baixo rendimento, como temperatura distribuída e gerenciamento de bateria.

Janka
fonte
Pensamento interessante, embora possa introduzir sobrecarga de software adicional se o mestre não tiver uma interface de 1 fio.
Caleb Reister
É principalmente uma opção se você possui um host Linux, pois possui a pilha completa de drivers para esse golpe. Em um Raspberry Pi, você só precisa conectar o GPIO4 à entrada de 1W do DS28E17 através desses 100m de fio (além de GND, é claro), editar o config.txt e pronto. É totalmente transparente, parece um I²C local. Apenas mais devagar.
Janka
Obrigado. Fiquei realmente surpreso que o 1-Wire pode fazer esse tipo de distância. Eu acho que faz sentido, já que os resistores são menores.
domen
A Onewire não depende do tempo da borda ascendente, mas, em vez disso, todo o tempo do bit é feito em relação à borda descendente, que é ativada ativamente. É por isso que é menos suscetível a altas cargas capacitivas. Alguns nF estão ok.
Janka