Sensor LSM6DS3 über I2C auslesen zu langsam!

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo all zusammen,

    da ich nach langem googlen nichts gefunden habe was mir weiterhelfen kann und ich selber auch keine Ideen mehr habe frage ich mal hier - vielleicht hat jemand eine Idee zu meinem Problem.

    Also der Grundaufbau:

    Ich benutze den Raspberry 3 und einen Beschleunigungssensor, auf den der Chip LSM6DS3 integriert ist.

    -> https://www.seeedstudio.com/Grove-6-Axis-A…ope-p-2606.html

    Ich möchte mit dem Raspberry die Beschleunigungswerte in x,y und z - Richtung auslesen. Programmiert habe ich das Programm in der Sprache C++. Innerhalb des Programms habe ich zwei Threads am laufen (erzeugt mithilfe der pthread-Bibliothek). In einem Thread läuft ein kleines GUI zum starten und stoppen der Messung. In dem anderen Thread läuft lediglich die Aufnahme und Auslesen der Sensordaten.

    Die Sample Rate des Sensors ist auf 13kHz eingestellt und die Baudrate des Raspberry Pi I2C-Busses ist in der ensprechenenden DT Datei auf 400k gesetzt. Da der Sensor im I2C-FastMode mit 400kHz angegeben ist, nehme ich an dass es mit dem Raspi auf jedenfall möglich sein sollte die Sensordaten mit ca. 20kHz oder mehr auszulesen.

    Zum Auslesen habe ich bereits verschiedene Methoden verwendet: Einerseits mithilfe der "wiringPiI2C"-Bibliothek und andererseits mit dem Internen SMbus, mit dem ich durch einen leseaufruf direkt den gesamten Block an Daten auslesen kann (-> hier die genannten Funktionen zum SMbus http://www.netzmafia.de/skripten/hardw…/RasPi_I2C.html // um genau zu sein diese: i2c_smbus_read_i2c_block_data)

    Durch letzere Methode ist es ein wenig schneller möglich als mit der wiringPi Bibliothek.

    Insgesamt läuft ein Schleifendurchlauf (einmal x,y,z-Richtung auslesen) mit ca. 2400 Hz.

    Da die Daten vom Sensor allerdings mit 13kHz aufgenommen werden, ist dies für eine anschließende Frequenzanalyse nicht genug, ich würde gerne mind. 20kHz erreichen.

    Hat jemand noch eine Idee woran es liegen kann, dass das Auslesen so lange dauert? Und wie man es evtl. schneller bekommen kann?:conf:

    Ich freue mich über jede Idee und Hilfe - Danke schonmal im Voraus

  • > Da die Daten vom Sensor allerdings mit 13kHz aufgenommen werden, ist dies für eine anschließende

    > Frequenzanalyse nicht genug, ich würde gerne mind. 20kHz erreichen

    Wenn der Sensor nur 13kHz kann, dann hilft es nichts, ihn mit 20kHz auszulesen!

    > ich würde gerne mind. 20kHz erreichen

    Dann wollen wir mal rechnen:

    Adresse, ca. 1Byte

    Subadresse, ca. 1 Byte

    Daten, ca. 6 Byte

    -> Also mindestens 8 Bytes pro Transaktion

    400000 / ( 8 * 8 ) gibt?

  • Was läuft denn sonst so auf dem Pi und was passiert mit den Daten nachdem sie ausgelesen wurden? Nur weil der Bus 400k Baud kann, heißt das nicht, dass er die im Mittel über mehrere unterbrochene Schreib/Lesevorgänge erreicht.

    Raspbian bringt einen Treiber für I2C mit. Du kannst mittels write() und read() direkt auf den I2C Bus schreiben bzw. davon

    lesen.

    Einmal editiert, zuletzt von El_Zetto (26. Juni 2018 um 23:22)

  • Ergibt doch 25k, sollte also irgendwie möglich sein oder?


    Was läuft denn sonst so auf dem Pi und was passiert mit den Daten nachdem sie ausgelesen wurden? Nur weil der Bus 400k Baud kann, heißt das nicht, dass er die im Mittel über mehrere unterbrochene Schreib/Lesevorgänge erreicht.

    Also nachdem die Daten ausgelesen sind speichert der Raspi sie nur noch in eine Textfile. Das erzeugen der Textfile wird vor der Messschleife erledigt und nach jedem auslesen direkt in die File geschrieben. Nachdem stoppen der Messung wird die Textfile geschlossen.

  • Zitat

    Ergibt doch 25k, sollte also irgendwie möglich sein oder?

    8x8 Symbole (Bits) nicht 8+8 Symbole.

    Bei mir ergibt das 6.250.

    Auf der Seite steht was von 8 KByte data buffering. Kannst Du die auf einen Schlag auslesen? Das würde zumindest etwas den Verkehr auf dem Bus verringern.

    20.000 Hz wirst Du trotzdem nicht erreichen können. Die machen aber ja auch keinen Sinn bei 13kHz Sampling Rate, wie Tell schon sagte.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!