Ich habe ein Setup mit einem Arduino Uno und zwei MMA8452Q Beschleunigungssensoren. Ich will damit eine vergleichende Messung anstellen. Nur scheint mein Setup nicht ausreichend leistungsstark. Oben ist eine Beispielmessung gezeigt mit beiden Sensorsignalen. Ich gebe ein eine Schwingung auf beide Sensoren, und bei einen der beiden sollte eine geringere Amplitude ankommen, da dieser nur eine gedämpfte Schwingung erfährt. Man erkennt zwar einen Unterschied im Signal, allerdings ist dieser sehr klein. Ich kann zwar etwas mit den Messbereichen spielen 2/4/8g um die Empfindlichkeit zu erhöhen, das reicht mir leider nicht. Gibt es Sensoren dieses Typs, die sagen wir um eine Größenordnung empfindlicher sind? Hat jemand damit Erfahrung? Ich bin auch bereit etwas mehr Geld auszugeben. Aber alle Alternativen die ich finde scheinen in ähnlichen Empfindlichkeitsbereichen zu arbeiten. Außerdem scheint die Zeitauflösung unerwarteter Weise begrenzt. Im Datenblatt war die Rede von 800 Hz Data outputrate. Tatsächlich bekomme ich aber nur wenige Datenpunkte pro Sekunde. Ist hier der begrenzende Faktor der µC und die serielle Schnittstelle? Brauche ich einen µC der zu high speed mode in der Lage ist, würde mir das etwas bringen? Oder schafft man wirklich irgendwie eine Messfrequenz von über 80Hz.
Nimm nen Beschleunigungssensor mit analogem Ausgang und einen AD-Wandler dahinter. Dann kannst du ein paar tausend Messungen pro Sekunde erreichen.
Aha warum der AD-Wandler? Kann ich nicht direkt an die Analogports anschließen, wenn ich nen analogen Sensor nehme?
Dino schrieb: > Tatsächlich bekomme ich aber nur wenige Datenpunkte pro Sekunde. Hast du auch DR0, DR1 und DR2 auf Null gesetzt? Nur damit erreichst du die 800Hz bei der Output Data Rate. Wie hoch ist deine I²C-Frequenz? Hintergrund: Ich habe die Dinger schon in der Lageregelung eines Kopters gesehen. Und mit nur ein paar Messungen pro Sekunde würde sich das Gerät gnadenlos in den Boden bohren :-)
Mein Clocksignal ist 400000 was dem fast mode des arduino uno entspricht. Das wird dann wohl gleich zu der I^2C Frequenz sein. Baudrate habe ich mal auch so hoch eingestellt wie ging: 115200. Was DR0, 1,2 ist weiß ich nicht. Sollen das die Variabeln sein die die Datenrate bestimmen? Im Constructor der Bibiothek wird die output datenrate standardmäßig auf 800 gesetzt. Da ich außer den Constructor nichts aufrufe sollte doch alles gut sein oder?
Dino schrieb: > Was DR0, 1,2 ist weiß ich nicht. Sollen das die Variabeln sein die die > Datenrate bestimmen? Das sind Bits im Register "CTRL_REG1" im Sensor. Schau mal ins Datenblatt, dafür ist es doch da :-) Ich sag dir sogar noch die Stelle: Punkt 6.7 "Control registers" Da steht auch noch eine Bemerkung: Der Sensor muß im standby mode sein, damit du die Bits im CTRL_REG1 ändern kannst! Hast du das bedacht? > Im Constructor der Bibiothek wird die output datenrate standardmäßig auf > 800 gesetzt. Da ich außer den Constructor nichts aufrufe sollte doch > alles gut sein oder? Das klingt jedenfalls so. Ich kenn die Bibliothek nicht. Vielleicht ist die fehlerhaft? Alles ist möglich...
Dino schrieb: > Aha warum der AD-Wandler? Kann ich nicht direkt an die Analogports > anschließen, wenn ich nen analogen Sensor nehme? Ach du ScheiXXe. Di verwendest das Arduino-Framework mit den ganzen Abstraktionen darunter? Kein Wunder daß das nichts wird. Zu deiner Information: hinter den "Analogports" des Arduino verbirgt sich ein AD-Wandler. Der kann auch relativ schnell wandeln mit 13µs pro Wandlung entsprechend knapp 80kHz Abtastrate. Allerdings ist es nur ein ADC; für zwei Kanäle mußt du also immer abwechselnd messen und bekommst effektiv nur die halbe Rate. Dein Diagramm ist in dieser Hinsicht schon mal falsch. Zwei Datenpunkte sind niemals von der gleichen Zeit, sondern immer gegeneinander versetzt. Dino schrieb: > Tatsächlich bekomme ich aber nur wenige Datenpunkte pro Sekunde. > Ist hier der begrenzende Faktor der µC und die serielle Schnittstelle? Soll das ein Witz sein? Du verschachtelst hier ernsthaft Messungen und die Ausgabe über die serielle? Womöglich gar noch mit einem delay() in der Schleife für das Timing? So wird das nichts. OK, wenn es wirklich nur 800Hz Abtastrate sein sollen, reicht es vielleicht, wenn du erstmal die Baudrate der Schnittstelle so hoch drehst, wie es geht. Mit 115200Bd kannst du bei 800Hz Abtastrate immerhin bis 14 Zeichen pro Datenpunkt über die serielle prügeln. Für eine vernünftige (äquidistante) Abtastung lernst du, wie du einen Timer-Interrupt verwendest.
Axel S. schrieb: > Zu deiner Information: hinter den "Analogports" des Arduino verbirgt > sich ein AD-Wandler. Der kann auch relativ schnell wandeln mit 13µs > pro Wandlung entsprechend knapp 80kHz Abtastrate. Allerdings ist es nur > ein ADC; für zwei Kanäle mußt du also immer abwechselnd messen und > bekommst effektiv nur die halbe Rate. Dein Diagramm ist in dieser > Hinsicht schon mal falsch. Zwei Datenpunkte sind niemals von der > gleichen Zeit, sondern immer gegeneinander versetzt. Hmm der Grund weshalb ich es über die serielle Schnittstelle gemacht habe, war dass ich dachte, dass es tatsächlich zwei Messungen zu gleichen Zeitpunkt sind, da sie an dem selben Port hängen mit dem gleichen clocksignal. Durch das Master werden dann die beiden verschiedenen Sensoren addressiert und ausgelesen. Und ich erhalte jeweils in den entsprechenden Slave die Daten zurück. Ich bin verwundert darüber, dass das nicht so sein soll. Abgesehen davon würde es mir nichts ausmachen, wenn sie nicht zeitgleich messen solange ich wüsste wie groß der delay zwischen den Sensoren ist. Ich kann das Signal ansonsten interpolieren. Allerdings erwarte ich das der zweite Sensor zeitversetzt reagiert, da Axel S. schrieb: > Soll das ein Witz sein? Du verschachtelst hier ernsthaft Messungen und > die Ausgabe über die serielle? Womöglich gar noch mit einem delay() in > der Schleife für das Timing? So wird das nichts. Der Sensor ist digital, der wird seriell angesteuert und ausgelesen, ich verschachtel gar nichts. Aber das mit dem delay() hört sich nach einem guten Verbesserungsvorschlag an, das kann man loswerden ohne was kaputt zu machen? OK, wenn es wirklich nur 800Hz Abtastrate sein sollen, reicht es vielleicht, wenn du erstmal die Baudrate der Schnittstelle so hoch drehst, wie es geht. Mit 115200Bd kannst du bei 800Hz Abtastrate immerhin bis 14 Zeichen pro Datenpunkt über die serielle prügeln. Wie gesagt das ist ein digitaler Sensor ich kann nicht die Zeichengröße bestimmen. Axel S. schrieb: > Ach du ScheiXXe. Di verwendest das Arduino-Framework mit den ganzen > Abstraktionen darunter? Kein Wunder daß das nichts wird. Das versteh ich leider überhaupt nicht was damit gemeint ist.
Das klingt jedenfalls so. Ich kenn die Bibliothek nicht. Vielleicht ist die fehlerhaft? Alles ist möglich... Ja ein paar Bugs habe ich schon entdeckt :D Der Nachteil der Opensource community. Ich versuche es mal nachzuvollziehen bis zu den Ports...
Dino schrieb: > Gibt es Sensoren dieses Typs, die sagen wir um eine Größenordnung > empfindlicher sind? Maß der Dinge ist die Erdbeschleunigung und die muss der Sensor vertragen, wenn er auf dem Tisch liegt. Ein Faktor 10 in der Empfindlichkeit wird da schwierig. Vielleicht hilft dir ein MXR2999EL (Analogausgang) oder ein ADXL313 (digital)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
