i2c-Bus, Daten schneller auslesen, um Vibration darzustellen

  • Hallo,


    ich habe einen ADS1115 AD-Wandler über die i2c-Schnittstelle an meinen Raspberry Pi 3 angeschlossen.


    Ich nutze die Adafruit-Bibliothek, um die Daten auszulesen. Mein Code führt die "Read"-Funktion 10 Sekunden lang wiederholt aus, und gibt am Ende die Anzahl der erfassten Daten an.

    (Jedes mal, wenn die Funktion ausgeführt wird, zählt ein Zähler +1 hoch)


    Hier ist der Code:



    Nach 10 Sekunden erhalte ich jedes mal etwa 1530 Werte, was also etwa 150 Werte/Sekunde entspricht. Im Datenblatt des ADS1115 steht, dass er eine Sample Rate von 860 (Samples per Second) hat.


    Ich frage mich nun, was ich tun kann, um näher an die 860 Hz zu kommen, da ich eine Schwingung (Vibration) darstellen möchte, die im Bereich von 200 Hz liegt. Dafür reichen meine 150 Werte/ Sekunde leider nicht aus..


    Danke! F :danke_ATDE:

  • Du solltest darauf verzichten, jedes mal in der Abfrage das ADS1115 Objekt neu zu erzeugen. Sondern das einmal zu Beginn machen. Du schraubst ja auch nicht jeden Morgen ein Fahrrad zusammen, bevor du damit zum Supermarkt fährst.


    Ansonsten kann ich die MPU6050 empfehlen. Oder die MPU6000. Damit kann man wunderbar Vibrationen bis 500Hz erfassen, weil die von selbst mit 1KHz sampelst, und du dann nur in einem Rutsch die Ergebnisse ausliest. Das macht dich unabhängig von der nicht besonders stabilen Schleife in Python.

  • Ich war nur zu faul. Auf dem iPad ist tippen immer etwas ätzend. Danke, Hofei

  • Du solltest darauf verzichten, jedes mal in der Abfrage das ADS1115 Objekt neu zu erzeugen. Sondern das einmal zu Beginn machen. Du schraubst ja auch nicht jeden Morgen ein Fahrrad zusammen, bevor du damit zum Supermarkt fährst.

    Habe ich gemacht, danke!



    weil die von selbst mit 1KHz sampelst, und du dann nur in einem Rutsch die Ergebnisse ausliest. Das macht dich unabhängig von der nicht besonders stabilen Schleife in Python.

    Kannst du das evtl. etwas genauer darlegen? Das hört sich ziemlich interessant an.

    Ich bin leider immer noch am grübeln, wie ich Daten aus dem (FFT-) Frequenzspektrum "rauspicke"

  • Zum Verständnis der FFT fand ich https://www.gaussianwaves.com/…quency-bins-and-fftshift/ sehr hilfreich. Und ich denke die FFT ist deine Freundin wenn es um das Detektieren von Energie in einem bestimmten Frequenzband geht. Die Daten zu acquirieren geht natürlich auch mit einem ADC, bei Vibration sind Gyros aber eben auch gut geeignet, und das besondere ist der FIFO mit dem die acquise unabhängig vom Host passiert. Das entspannt die Timing-Requirements, denn den FIFO kannst du in einem Rutsch auslesen, und hast dann Millisekunden statt nur Bruchteile davon Zeit.

  • Zum Verständnis der FFT fand ich https://www.gaussianwaves.com/…quency-bins-and-fftshift/ sehr hilfreich

    Danke, das wird meine neue Abendlektüre!



    oder hast Du den Continuous-Conversion-Mode schon entdeckt ?

    Dem muss ich nachgehen. Ich fand es schon merkwürdig, dass ich jeden Lesevorgang einzeln angetriggert habe. Kann ich davon ausgehen, dass im Continuous-Conversion Mode der FIFO mit Daten beschrieben wird, und die dann ausgegeben werden können?

    Ich bin leider anscheinend noch nicht tief genug in der Materie drin ..

  • Der ADS hat keinen FIFO. Der CC mode verringert erhöht lediglich die Abtastrate. Die MPU hat eine FIFO.