7 votos

Arduino: Fiable y práctica manera de conectar un dispositivo I²C (1 m)

Esta es una combinación de un mecánico/eléctrico de que se trate. Es principalmente acerca de la obtención del I2C conexión fiable; esta pregunta no se refiere a sí mismo con el lado del software (es decir, cómo manejar un I2C fallo en el microcontrolador).

Tengo un Arduino Pro Micro) y un dispositivo esclavo I2C (MPU 6050 sensor). El Arduino ya está allí (feliz haciendo otras cosas, conectado a un PC a través de USB) y alrededor de 1 m de distancia de donde el esclavo será colocado. El esclavo es el habitual pequeña tabla similar a la https://www.sparkfun.com/products/11028. Proporciona algunos condensadores y 10k I2C resistencias pull-up.

Tan lejos, tan bueno. En los buenos viejos "obtener er hecho" espíritu, me han hackeado todo junto con algunos conectores RJ45 y 1 m Cat 5 cable que tenía por ahí (la realización de VCC, GND, INT, I2C). Es el tipo de obras que, hasta que no. La comunicación I2C rompe con regularidad (después de unos pocos cientos o a veces miles de transacciones).

Tengo que admitir que todavía tengo que averiguar quién es exactamente el culpable es; es decir, voy a conectar el esclavo directamente al PCB y ver si todavía ocurre (que descartar el cable de conexión). La parte de software es probablemente muy bien; dicho problema ocurre con varios firmware diferente, incluso las más triviales. He jugado un poco con las resistencias pull-up (es decir, con/sin el Arduino resistencias pull-up; y con extras externas 4.7 Ohm resistencias), y que no ha cambiado nada. El medio ambiente no es especialmente ruidoso, creo. Yo por desgracia, no tienen equipo para medir lo que pasa en las líneas.

Mientras tanto: Puedes sugerir una práctica y confiable para hacer tal conexión? Lo que yo pensaba:

  • La "fácil" sería conseguir un segundo Arduino, colóquelo justo al lado del esclavo, conectarlo con el USB directamente a la PC; que eliminaría todo el problema, pero yo realmente preferiría no hacerlo, si puedo evitarlo.
  • Intenta dividir el SCL/SCA líneas en pares diferenciales; no veo la manera de que funcione con el I2C de drenaje abierto protocolo de aunque. No quiero seguir con I2C necesariamente; no hay necesidad de corrección que si hay una alternativa más fácil.
  • P82B715PN línea de búferes
  • Algo parecido PUEDE o RS-485 es probable que me obligan a añadir al menos dos más fichas, o incluso más por cada lado (para la conversión de protocolo y controladores).

Hay una práctica (por un aficionado), simple, solución para este tipo de problema (que parece surgir de vez en cuando...)? Realmente estoy abierto a cualquier cosa aquí.

He comprobado los cables de mi... yo antes tenía (INT+nada), (SCL+nada), (SDA+nada), y (VCC+GND). He añadido el GND para todas las parejas, por lo que es ahora (INT+GND), (SCL+GND), (SDA+GND), y (VCC+GND) como por @FiddyOhm 's respuesta. Desafortunadamente, no hay ningún tipo de cambio :( Que no lo era.

23voto

FiddyOhm Puntos 711

Su 1 la conexión del medidor debe de funcionar bien si usted toma las siguientes precauciones para su situación en particular.

A. Una buena conexión de tierra entre las dos tablas es esencial. Usted puede ser capaz de cumplir con este requisito, con su cable CAT-5. Si llegas a tener problemas después de probar todos los de la siguiente, ejecute un extra de 20 AWG de alambre a lo largo de lado el cable CAT-5 ( empate se envuelve en uno o dos lugares.

B. es mejor que utilice una fuente de Vcc ( supongo que esto es de 5 voltios en la aplicación). Que implica esto en su descripción con la inclusión de "Vcc" en el CAT-5 cableado descripción. La cosa peor que usted puede hacer en este sentido es atar dos fuentes separadas de Vcc junto con el cable. De hecho, este puede ser tu problema, para empezar. Caída de voltaje en el cable de 1 metro realización de la Vcc podría ser un problema. Usted tendrá que probar esto con un DVM en el extremo de carga del cable para asegurarse de que está dentro del alcance del dispositivo periférico.

C. NO se tuerza I2C Reloj y las líneas de Datos juntos! Twist cada uno con un cable de tierra, pero no el uno con el otro. En otras palabras, elegir los pares trenzados dentro de su cable CAT-5 con cuidado. Permitir que los cables de tierra a la doble función de servir como alimentación adicional de motivos - es decir, conectar a GND en los respectivos consejos en ambos extremos. (Si el problema persiste, intente recorte de estas líneas, uno por uno.)

D. HACER giro Vcc y GND cables juntos. Si usted tiene dos pares después de hacer "C" anterior, el uso de dos pares trenzados de Vcc y GND y conectarlos en paralelo en ambos extremos ( es decir, en los respectivos Pcb. )

E. el Uso de la más pequeña de las resistencias pull-up posible. Esto es probable 1.0 K. Si usted tiene un O-Ámbito de aplicación, puede realizar una prueba simple para determinar la práctica más baja resistencia para su aplicación específica. Ámbito de aplicación las señales, ya que la aplicación se está ejecutando y disminuir el valor de la resistencia hasta que la señal muestra signos de estar cargado de abajo aceptables niveles lógicos ( aprox. 3.2 voltios 5 voltios del sistema). Usted puede encontrar que CLK y DATA va a tolerar los diferentes valores de resistencias, esto está bien.

F. Si la velocidad de comunicación no es un problema, ejecute el I2C enlace en baja frecuencia, la cual es práctica para su aplicación. 100 KHz reloj es generalmente la "baja" frecuencia para I2C, pero puede funcionar en cualquier velocidad debido a que es un protocolo síncrono. He corrido I2C a 1 KHz en algunas circunstancias.

G. asegúrese de tener suficiente Vcc-a-Gnd bypass tapas en ambos extremos del cable. Uno de 4,7 tántalo y un 0,1 o 0,01 mfd al menos en el extremo de carga está sobre la derecha. Lo peor viene lo peor, repita estos tapas en el suministro de los extremos del cable.

H. Si todo esto no funciona, como un último Acto de Desesperación, abrir cortar el cable CAT-5 y separar los diversos pares trenzados de uno a otro alrededor de 1 pulgada. No desenredar los cables, sólo separar los pares. Mantenerlas separadas con cinta adhesiva o similar. Si esto funciona, se trata de lidiar con algún tipo de inter-pares de acoplamiento problema (no probable es que en mi experiencia con esta longitud de cable). En este caso será necesario para proteger los Datos y el Reloj de los pares trenzados (cada par trenzado dentro de su propio escudo - por ejemplo, la trenza se rescatan de un cable coaxial o cable de micrófono). Suelo los escudos sólo en uno de los extremos, de preferencia el Arduino final.

Si estos puntos no se soluciona el problema, me imagino que hay algo inusual en su conjunto, o algo que usted no knowledable lo suficiente como para reconocer como un problema, y por lo tanto no se describe en su excelente descripción de su set-up y el problema.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X