Melhor maneira de fazer I2C / TWI a longa distância

9

Eu tenho um projeto que requer I²C / I2C / TWI a uma longa distância (30 a 40 metros).

Eu já vi algumas pessoas sugerindo baixar a freqüência para algo em torno de 500 Hz, para mitigar os efeitos da capacitância de uma linha tão longa, presumo? Os componentes que estou usando requerem pelo menos a taxa de clock padrão de 100 kHz. Eu fiz algumas pesquisas adicionais e encontrei entre as respostas para outra pergunta uma sugestão para usar um deslocador de nível P82B96. Na folha de dados, eles dão exemplos de como usá-los em linhas de até 100 metros:

I2C_longDistance

deparei-me com outra maneira de alterar os níveis através de uma placa de fuga da adafruit , que é apenas um mosfet (bss138) com dois resistores pull-up (um para cada lado / tensão). Eles tiveram a ideia deuma nota de aplicação do NXP (AN10441) e dois dos canais lá poderiam ser usados ​​assim:

mudança de nível mosfet

Agora eu me pergunto: qual a melhor solução? Ou há algo que eu tenha esquecido? E também, 5V é suficiente para garantir uma boa conexão? Haveria uma vantagem em usar uma tensão ainda mais alta como 12V?

DaJF
fonte
Como está escrito, sua pergunta provavelmente é muito ampla para o formato deste site. Tente restringir sua pergunta e torná-la muito específica.
Joe Hass
Eu adicionei um resumo, é estreito e específico o suficiente?
DaJF
Você também deve especificar o comprimento máximo do fio para os sensores e ter uma idéia do que "baixo custo" significa para você. Você espera fornecer energia aos sensores pelo mesmo cabo?
Joe Hass
@JoeHass A pergunta agora é estreita o suficiente? Caso contrário, o que mais eu preciso fazer?
DaJF
Oi, eu sei que essa é uma pergunta antiga, mas o que você acabou fazendo no final? Eu tenho exatamente a mesma pergunta que você, distâncias semelhantes envolvidas e taxa de clock mínima de 100kHz. Eu ficaria interessado em saber o que funcionou para você, obrigado.
pcdev

Respostas:

1

Eu acho que você está no caminho certo com algo como o NXP P82B96. Se você der uma olhada na Figura 14 e no texto associado, a folha de dados discute o uso de comprimentos de cabo de até 250 m com taxas de dados acima de 100 kHz.

Existem muitos sensores de temperatura I2C disponíveis que podem fornecer precisão de alguns graus Celsius sem calibração e sem nenhum circuito analógico adicional. Como você está trazendo os dados de volta para processamento, filtrar o ruído seria muito fácil.

Se você está preocupado com a capacitância da fiação, pode ser melhor usar um par trançado não blindado em vez de um cabo blindado.

Joe Hass
fonte
O P82B96 poderia ser substituído pela alternativa mosfet? Pelo preço de um P82B96, posso literalmente comprar 100 mosfets bss138 (posso fornecer os links, se você quiser). De fato, como você disse, eu achei o que parece ser um sensor de temperatura adequado: LM75A. Quanto à escolha entre um cabo blindado ou não blindado, parece que é uma questão de qual problema você deseja: possível interferência (não blindada) ou capacitância de linha (blindada), essa é uma suposição correta? Um é mais proeminente que o outro? Não tenho ideia de como determinar isso. Obrigado btw!
DaJF
Eu não acho que você pode substituir o P82B96 pelos MOSFETs para longas filas. Parece que o IC do repetidor realmente fornece alguma amplificação, onde os MOSFETs estão fornecendo principalmente uma mudança no nível de tensão. Receio não ter certeza de como fazer a ligação pelo cabo ... observe a nota de aplicação NXP AN255. Eles falam sobre o uso de fios de par trançado, mas não mencionam um escudo. Para sinais digitais, o ruído pode ser menos problemático que a capacitância.
Joe Hass
2

Provavelmente você pode se safar dos sensores DS18B20 usando um cabo blindado CAT5 ou similar. São apenas medições térmicas, portanto, se algumas leituras forem corrompidas, você poderá tornar seu programa robusto o suficiente para lidar com isso (é uma boa prática de qualquer maneira).

Para uso em restaurantes em cadeia, projetei os chamados controles RTU (unidade na cobertura) que funcionam em vários sensores passivos (eles usam termistores NTC intercambiáveis , que não requerem calibração para aquecimento confortável). É muito mais fácil filtrar o ruído de um sensor passivo. Outro conjunto de instalações (um grande complexo automotivo norte-americano) usava RTDs de platina com condicionadores de sinal - dispositivos muito precisos e estáveis. Você deve decidir primeiro o sensor e depois verificar como ele pode estar em interface - qualquer uma dessas opções de sensor é adequada para a sua aplicação (embora os RTDs possam ser um exagero).

Caso não esteja claro, estou sugerindo uma configuração "estrela" de sensores em torno do seu processador.

Se você realmente deseja usar um "barramento" (que não seja um fio ou I2C), precisará de inteligência nas extremidades, o que significa um processador de alguma forma. Se você estiver louco, considere o uso de sensores sem fio que se comunicam por meio de uma banda ISM legal em sua localidade. Como alternativa, você pode usar um sensor por Pi e fazer com que eles conversem através da intranet WiFi.

Spehro Pefhany
fonte
No momento, estou no estágio "determinando o que comprar", para que o ônibus ou o sensor possa determinar o outro. Os únicos requisitos que tenho para esses são fáceis de usar e extensíveis. A razão para escolher um barramento é que prefiro não passar um cabo para cada sensor (o que você parece sugerir ou interpretei a "estrela" errada?). O I²C é um protocolo viável para uso em um cabo que pode ter 30M / 90FT?
DaJF
Sim, é isso que uma "estrela" liga do controlador para cada sensor. I2C a 30m. Bem. Ouvi dizer que é possível em velocidades muito baixas, mas eu não contaria com isso funcionando bem.
Spehro Pefhany