Estoy usando un Arduino para comunicarme con sensores de magnetómetro I2C. A continuación se muestra la lista de piezas y un diagrama de bloques básico del cableado:
Magnetómetro HMC5883L:
Expansor TCA9548A I2C:
https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout/overview
Cable plano estándar de 4 pines:
https://www.digikey.com/product-detail/en/3m/8125-04-100/ML04G-100-ND/1107830
Cabezal rectangular estándar de 6 pines:
https://www.digikey.com/product-detail/en/sullins-connector-solutions/PPTC061LFBN-RC/S7004-ND/810145
Cabecera estándar de 4 pines:
https://www.digikey.com/products/en?keywords=3M9449-ND
simular este circuito : esquema creado con CircuitLab
Pido disculpas por el esquema, pero tuve que simplificarlo para hacerlo más claro. Esencialmente, estamos usando un Arduino Uno para leer de seis sensores de magnetómetro usando un multiplexor I2C. El multiplexor está conectado a una placa de circuito impreso hecha para Arduino, por lo que está muy cerca de él, y los sensores están a una distancia de 1,5 metros a través de un cable plano conectado a través de cabezales a la placa de circuito impreso. El esquema solo muestra un sensor, ya que incluir los seis lo complicaría, pero los otros sensores también están conectados de la misma manera.
Ahora, por lo que leí sobre I2C, hay algunos problemas con la diafonía y, según otra pregunta publicada, se recomienda colocar VDD y GND entre SDA y SCL para reducir o evitar que se produzca la diafonía. El HMC5883L falla en ese sentido, así que con mi cable plano, crucé los cables para que VCC y GND estén entre SDA y SCL. No es la solución más elegante, pero es la solución más simple. El cruce solo ocurre en el extremo del cable del sensor (menos de 1 pulgada), no en el medio, pero me preguntaba si esto sería un problema con la comunicación I2C. Para ser honesto, probé esto con dos sensores, por lo que estoy bastante seguro de que esta configuración funcionará con los 6 sensores, pero quería preguntar en caso de que pudiera surgir algún problema que nunca consideré.
Además, en caso de que se lo pregunte, tuve que agregar las resistencias pull up de 10k en las líneas SDA y SCL para que los sensores pudieran leerse a 1,5 metros de distancia. Inicialmente, cuando lo configuré en una placa de prueba, no respondían, y no fue hasta que agregué las resistencias que se podían leer desde una gran distancia. Los sensores en sí tienen resistencias de extracción de 10k, pero supongo que disminuir la resistencia permitió una distancia más larga. Las resistencias son resistencias SMD de 10k que se encuentran en la placa PCB.
¿Cuál es su velocidad I2C? Dependiendo de la velocidad y la distancia, I2C puede bajar hasta 1k para un bus de alta velocidad y baja impedancia. Consulte http://www.ti.com/lit/an/slva689/slva689.pdf
¿Qué quieres decir exactamente con:
El cruce solo ocurre en el extremo del cable del sensor (menos de 1 pulgada), no en el medio de este
Al "cruzar" los cables, la buena práctica consiste en no tener las dos líneas I2C corriendo una al lado de la otra. Por ejemplo, esta es una mala práctica para un cable plano largo:
- CCV
- TIERRA
- ASD
- SDL
Una forma "mejor" de hacer las cosas:
- CCV
- ASD
- TIERRA
- SDL
De esta forma, GND protege a SDA de SDL. Sin embargo, GND en sí mismo puede generar ruido si la derivación no es suficiente en ninguno de los lados del cable.
La mejor manera sería tener cables adicionales, con el único propósito de blindar las señales:
- CCV
- TIERRA
- ASD
- TIERRA
- SDL
- TIERRA
Esto se usa en todos los cables planos IDE, por ejemplo.
No tengo una opinión sobre el tema principal de su pregunta, que es la posible conversación cruzada, ya que no tengo experiencia con eso.
Pero tengo un comentario con respecto a las resistencias pull-up.
De la hoja de datos de la pieza , creo que está implícito que necesita resistencias pull-up en ambos lados del TCA9548A. También hay una pregunta relevante en el canal de soporte oficial de TI, donde TI dice que necesita tener resistencias en ambos lados, en los canales ascendentes y descendentes.
Sin embargo, tienes razón cuando dices
Supongo que disminuir la resistencia permitió una distancia más larga
No se aplica aquí, pero en general es cierto. Como puede ver en la hoja de datos de la pieza, sección 9.2.2, el valor máximo de resistencia de pull-up permitido está definido por
Cuanto más largos sean los cables, mayor será la capacitancia del bus y así cuanto menor sea la resistencia máxima que puede utilizar.
adam lorenzo
glen_geek
Sam Gibson
Sam Gibson
BestQualityVacío
el fotón
el fotón
Sam Gibson
BestQualityVacío