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.
i2c
communication
cables
JackOfHearts
fonte
fonte
Respostas:
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:
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:
Cálculo de pullup
A Texas Instruments possui uma boa nota de aplicação (SLVA689) sobre cálculo de pull-up .
fonte
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 .
fonte
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.
fonte
Conforme observado pelo @filo, o I2C geralmente é limitado pela capacitância do barramento. No entanto, existem maneiras de contornar isso:
Dê uma olhada no AN10658 e AN11084 do NXP para obter mais informações.
fonte
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.
fonte