Klingelproblem auf dem I2C FM+ Bus zwischen MCU und einigen Sensoren - Problem mit der Stromversorgung?

Ich habe einige Probleme beim Prüfen eines problematischen I2C-Busses auf dem Oszilloskop.

Wir möchten mehrere TLV493D-A1B6 mit einem STM32L4 verbinden (wir arbeiten auch an STM32F4 und haben die gleichen Probleme).

Der STM32L4 hat 4 I2C FM+ (1Mbit/s) Bus. Wir wollen die 4 verwenden, um mit insgesamt 12-16 Sensoren zu kommunizieren, also 3-4 Sensoren pro Bus.

Wir haben 4 Sensoren auf demselben Bus sowie 1 Sensor auf jedem der 4 Busse erreicht.

Wir sind jedoch nicht in der Lage, mehr Sensoren anzuschließen (dh 4 Sensoren auf 4 Bus oder sogar 1 Sensor auf 3 Bus und 2 Sensoren auf dem 4. Bus). Einige Busse starten und arbeiten weiter, andere starten nicht, einige starten und stoppen nach ein paar Sekunden, wobei diese Verhaltensweisen zufällig sind.

Beim Untersuchen des Busses auf dem Oszilloskop ist mir aufgefallen, dass es wie ein starkes Klingeln aussieht, wenn SCL (oder SDA) von HIGH auf LOW geht, und ich frage mich, ob dies die Ursache des Problems sein kann. Hier sehen Sie dieses Klingeln auf der SCL-Leitung:

SCL geht von HIGH auf LOW, wenn 1 Sensor am Bus ist

SCL geht von HIGH auf LOW, wenn 3 Sensoren am Bus, anderer Raum

Wie Sie sehen können, scheint das Klingeln auf dem zweiten Bild weniger wichtig zu sein. Es wurde am Tag nach dem ersten aufgenommen, in einem separaten Raum (anderer Ausgang für das Oszilloskop) und während das erste Bild das Signal mit einem Sensor am Bus zeigt, zeigt das zweite Bild das Signal mit 3 Sensoren am Bus.

Einige Informationen zum I2C-Bus:

  • Frequenz: 1 Mbit/s

  • Kapazität: Die Kapazität des Busses wurde durch Messen der Anstiegszeit der Signale bestimmt. Es wurde festgestellt, dass ein Bus eine Kapazität im Bereich von 50 pF für einen Sensor bis 100 pF für 3 Sensoren hat.

  • Pull-up-Widerstände: 1,2 kOhm (andere Werte wurden ausprobiert, von 600 Ohm bis 2,2 kOhm. Das Verringern des Werts scheint sich etwas zu verbessern, aber das Timing wurde überprüft und 1,2 kOhm scheint korrekt zu sein).

  • Abschluss: Auf jeder Leitung wurden 33-Ohm-Reihenwiderstände verwendet.

  • Stromversorgung: Für die Sensoren wurden mehrere Stromversorgungsschemata ausprobiert, darunter eine isolierte Laborstromversorgung oder die gleiche Stromversorgung wie die MCU.

  • Die I2C-Leitungen laufen durch relativ kurze Kabel und Steckbrett. Die Kapazität wurde überprüft und ist anscheinend nicht die Ursache unseres Problems.

Ich bin nicht derjenige, der für die Firmware verantwortlich ist, aber ich weiß, dass wir DMA auf der MCU verwenden, um 4 I2C FM+ gleichzeitig laufen zu lassen.

Einige Ideen, die wir hatten, aber wir können sie nicht klären:

  • Die zunehmende Anzahl an Sensoren ist für eine Überbeanspruchung der Stromversorgung verantwortlich.
  • Das Klingeln kommt von einer schlechten Sondierung und tritt nicht auf, wenn die Signale nicht sondiert werden. Es wurde festgestellt, dass das Sondieren des Signals normalerweise zu den schlechtesten Ergebnissen führt.

Hat jemand bereits ein ähnliches Verhalten mit I2C erlebt und/oder hat jemand eine Idee, unser Setup zu verbessern?

Was für mich wieder seltsam klingt, ist, dass das Setup mit 4 Sensoren an 1 Bus funktioniert, es funktioniert auch mit 4 Sensoren an 4 verschiedenen Bussen, aber wir stecken fest, wenn wir versuchen, weiter zu gehen, das Ziel sind 12-16 Sensoren auf dem 4 Busse.

PS: Ich kann im Moment keinen Schaltplan unseres Aufbaus posten, aber ich werde meinen Beitrag so schnell wie möglich bearbeiten.

Poste mal einen Schaltplan. Wie schaffen Sie es, dass sich die 4 Chips auf demselben Bus befinden? Sie haben nur zwei verschiedene Adressen, sodass Sie nicht mehr als 2 Chips im selben Bussegment haben können. Außerdem müssen Sie sie richtig einschalten, um ihnen unterschiedliche Adressen zu geben, sonst kommt es zu Konflikten. Hast du ein Problem bei 400kHz? Das Ausprobieren der Fast-Mode-I2C-Geschwindigkeit erfordert keine speziellen FM+-Tricks auf dem STM32. Das TLV493D-A1B6 I2C-Protokoll sieht etwas seltsam aus, sie schlagen vor, ein nicht standardmäßiges Protokoll zu verwenden, mit dem der STM32 möglicherweise nicht kompatibel ist. Es könnte mit dem Standardprotokoll funktionieren, aber nur mit mehr Overhead.
Die Schaltpläne werden in ein paar Stunden veröffentlicht. Tatsächlich folgen wir der Einschaltsequenz, um ihnen unterschiedliche Adressen zu geben. Bei 400 kHz ist das kein Problem. Bei 400 kHz haben wir problemlos bis zu 8 Sensoren auf 3 verschiedenen Bussen. LDOs mit Enable-Pin werden verwendet, um jeden Sensor einzeln einzuschalten, um der im Datenblatt beschriebenen Startsequenz zu folgen. Was ist Ihrer Meinung nach "nicht standardmäßig" im Protokoll?
Ich meine, im Moment starten wir die Sensoren einen nach dem anderen von Hand. Die LDOs werden in der 400-kHz-Version des Projekts verwendet. Bei der 1-MHz-Version stecken wir die Sensoren nacheinander ein, sobald der vorherige initialisiert wurde (Adresse konfiguriert usw.)
Ich stimme zu, dass Riging auf schlechte Sondierung zurückzuführen ist. Verwenden Sie eine dämpfende (1:10) Sonde?
Danke @EugeneK. Ich verwende keine bestimmte Sonde, weshalb ich denke, dass es an einer schlechten Sondierung liegt. Wenn das Klingeln nur auftritt, wenn das Signal geprüft wird, bleibt uns ein weiteres unbekanntes Problem ...

Antworten (1)

Wow, das ist eine hässliche Wellenform. Entfernen Sie die 33-Ohm-Vorwiderstände. Verwenden Sie einen stärkeren Pullup-Widerstand. 1,2k mögen richtig erscheinen, aber die langsame Anstiegszeit deutet darauf hin, dass sie zu hoch ist.

Stellen Sie sicher, dass zwischen der Masse jedes Geräts der geringstmögliche Widerstand besteht.

Soll der 33-Ohm-Widerstand nicht die Wirkung des Klingelns verringern? Es wird durch das Datenblatt des Sensors empfohlen. Ich stimme zu, dass 1,2k ein bisschen hoch ist, aber wie erklären Sie, dass es mit 4 Sensoren an einem Bus mit demselben Wert gut funktioniert? Danke schön.
Der Vorwiderstand soll das Gerät wahrscheinlich vor Überstrom schützen.
Sie kann in der anderen Konfiguration eine geringere Gesamtkapazität haben; schwer zu sagen.
Nach meinen Messungen steigt die Gesamtkapazität mit der Anzahl der Sensoren. Es beginnt bei etwa 50 pF mit nur einem Sensor und geht bis zu 100 pF mit 4 Sensoren, was normal klingt. Ich denke, die langsame Anstiegszeit ist hier nicht das Problem, da sie für 4 Sensoren (eine höhere Kapazität) funktioniert, daher eine noch langsamere Anstiegszeit. Ich denke, wir liegen weit über und unter den Logikschwellen sowohl des Sensors als auch des STM32. Ich werde es in den nächsten Tagen ausprobieren und mich wieder bei Ihnen melden. Vielen Dank für Ihre Antwort !
Ich dachte, der Vorwiderstand sei auch ein Überstromschutz, aber ich habe gelesen, dass ein Vorwiderstand mit niedrigem Wert auf digitalen Leitungen Reflexionen des Signals und Klingeln reduzieren kann. Es erinnert mich an Impedanzanpassung. Kann eine schlechte Impedanzanpassung die Ursache meines Problems sein?
Ich würde es nicht glauben, aber ich denke, es ist möglich. Viel Glück. Wenn Sie es herausgefunden haben, kommen Sie bitte zurück und posten Sie die Antwort!