Problema de timbre en el bus I2C FM+ entre MCU y algunos sensores - ¿Problema de fuente de alimentación?

Estoy experimentando algunos problemas al probar un bus I2C problemático en el osciloscopio.

Queremos interconectar varios TLV493D-A1B6, con un STM32L4 (también estamos trabajando en STM32F4 y tenemos los mismos problemas).

El STM32L4 tiene 4 buses I2C FM+ (1Mbit/s). Queremos usar los 4 para comunicarnos con un total de 12-16 sensores, por lo tanto, 3-4 sensores por bus.

Logramos 4 sensores en el mismo bus además de tener 1 sensor en cada uno de los 4 buses.

Sin embargo, no podemos interconectar más sensores (es decir, 4 sensores en 4 buses o incluso 1 sensor en 3 buses y 2 sensores en el 4to bus). Algunos autobuses arrancan y siguen funcionando, otros no arrancan, algunos arrancan y se detienen después de un par de segundos, estos comportamientos son aleatorios.

Mientras probaba el bus en el osciloscopio, noté lo que parece un timbre fuerte cuando SCL (o SDA) pasa de ALTO a BAJO y me pregunto si puede ser la fuente del problema. Aquí puede ver este timbre en la línea SCL:

SCL va de ALTO a BAJO cuando hay 1 sensor en el bus

SCL va de ALTO a BAJO cuando hay 3 sensores en el autobús, otra habitación

Como puede notar, el timbre parece ser menos importante en la segunda imagen. Se tomó el día después de la primera, en una habitación separada (diferente salida para el osciloscopio) y mientras que la primera imagen muestra la señal con un sensor en el bus, la segunda muestra la señal con 3 sensores en el bus.

Alguna información sobre el bus I2C:

  • Frecuencia: 1 Mbit/s

  • Capacitancia: la capacitancia del bus se ha determinado midiendo el tiempo de subida de las señales. Se ha determinado que un bus tiene una capacitancia que va desde 50 pF para un sensor hasta 100 pF para 3 sensores.

  • Resistencias pull-up: 1,2 kOhms (se han probado otros valores, que van desde 600 Ohms hasta 2,2 kOhms. Bajando el valor parece mejorar un poco, pero se ha comprobado el tiempo y 1,2k parece correcto).

  • Terminación: Se han utilizado resistencias en serie de 33 ohmios en cada línea.

  • Fuente de alimentación: se han probado varios esquemas de fuente de alimentación para los sensores, incluida una fuente de alimentación de banco aislada o la misma fuente de alimentación que la MCU.

  • Las líneas I2C se ejecutan a través de cables relativamente cortos y placa de pruebas. Se ha verificado la capacidad y aparentemente no es la fuente de nuestro problema.

No soy el responsable del firmware, pero sé que estamos usando DMA en la MCU para tener 4 I2C FM+ funcionando al mismo tiempo.

Algunas ideas que teníamos pero no podemos aclarar:

  • El creciente número de sensores es responsable del uso excesivo de la fuente de alimentación.
  • El timbre proviene de un mal sondeo y no ocurre cuando las señales no son sondeadas. Se ha notado que sondear la señal por lo general conduce a peores resultados.

¿Alguien ya ha experimentado un comportamiento similar con I2C y/o alguien tiene alguna idea para mejorar nuestra configuración?

Una vez más, lo que me suena extraño es que la configuración funciona con 4 sensores en 1 bus, también funciona con 4 sensores en 4 buses diferentes, pero estamos atascados cuando tratamos de ir más allá, el objetivo es 12-16 sensores en el 4 autobuses.

PD: No puedo publicar un esquema de nuestra configuración en este momento, pero editaré mi publicación tan pronto como pueda.

Publica un esquema. ¿Cómo logras que los 4 chips estén en el mismo bus? Solo tienen dos direcciones diferentes, por lo que no puede tener más de 2 chips en el mismo segmento de autobús. También debe encenderlos correctamente para darles direcciones diferentes o entrarán en conflicto. ¿Tienes un problema a 400kHz? Probar la velocidad I2C en modo rápido no necesita trucos especiales de FM+ en el STM32. El protocolo TLV493D-A1B6 I2C se ve algo extraño, sugieren usar algún protocolo no estándar con el que STM32 podría no ser compatible. Podría funcionar con el protocolo estándar pero solo con más gastos generales.
Los esquemas se publicarán en un par de horas. De hecho, estamos siguiendo la secuencia de encendido para darles diferentes direcciones. Esto no es problema a 400 kHz. A 400kHz tenemos hasta 8 sensores en 3 buses diferentes sin ningún problema. Los LDO con pin de habilitación se utilizan para encender cada sensor individualmente para seguir la secuencia de inicio descrita en la hoja de datos. ¿Qué cree que es "no estándar" en el protocolo?
Quiero decir, ahora mismo ponemos en marcha los sensores uno por uno a mano. Los LDO se utilizan en la versión de 400 kHz del proyecto. Para la versión de 1MHz, conectamos los sensores uno a uno una vez inicializado el anterior (dirección configurada, etc)
Estoy de acuerdo, que el aparejo se debe a un sondeo deficiente. ¿Utiliza sonda atenuante (1:10)?
Gracias @EugeneK. No estoy usando ninguna sonda en particular, por lo que creo que se debe a un mal sondeo. Si el timbre ocurre solo cuando se prueba la señal, nos queda otro problema desconocido...

Respuestas (1)

Wow, esa es una forma de onda fea. Retire las resistencias en serie de 33 ohmios. Utilice una mayor resistencia a las dominadas. 1,2k puede parecer correcto, pero el tiempo de subida lento indica que es demasiado alto.

Asegúrese de que haya la menor resistencia posible entre la tierra de cada dispositivo.

¿No se supone que la resistencia de 33 ohmios reduce el efecto del timbre? Lo aconseja la hoja de datos del sensor. Estoy de acuerdo en que 1.2k es un poco alto, pero ¿cómo explicas que funciona bien con 4 sensores en un bus con el mismo valor? Gracias.
La resistencia en serie es probablemente para proteger el dispositivo de sobrecorriente.
Puede tener una capacitancia total más baja en la otra configuración; Difícil de decir.
Según mis medidas, la capacitancia total aumenta con el número de sensores. Comienza desde alrededor de 50 pF con un solo sensor y sube a 100 pF con 4 sensores, lo que suena normal. Creo que el tiempo de subida lento no es el problema aquí, ya que funciona para 4 sensores (una capacitancia más alta), por lo tanto, un tiempo de subida aún más lento. Creo que estamos muy por encima y por debajo de los umbrales lógicos tanto del sensor como del STM32. Lo probaré en los próximos días y te responderé. Gracias por su respuesta !
Pensé que la resistencia en serie también era una protección contra sobrecorriente, pero he leído que la resistencia en serie de bajo valor en líneas digitales puede reducir los reflejos de la señal y el timbre. Me hace pensar en la coincidencia de impedancia. ¿Puede una mala coincidencia de impedancia ser el origen de mi problema?
No lo creo, pero supongo que es posible. Toda la suerte. Cuando lo descubras, vuelve y publica la respuesta.