Forum: Mikrocontroller und Digitale Elektronik Drehzahl ermitteln aus Beschleunigungswerten


von Matze R. (der_matze)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche immoment mit einem dreiachsigen Beschleunigungssensor die 
Drehzahl einer Welle zu messen. Ich habe eine Platine designed, auf der 
ein Beschleunigungssensor und ein Mikrocontroller Platz finden. Danach 
hab ich erstmal einen Code geschrieben, der mir die Messdaten in einer 
CSV Datei speichert. Habe dann die Platine auf die Welle gepackt und mal 
eine Probemessung gemacht. Die Daten aus der CSV Datei hab ich dann mal 
in Excel visualisiert und als Bild hier angehängt.


Wie kann ich daraus jetzt am genauesten die Drehzahl ermitteln?

Vielen Dank schonmal im Voraus.

von STK500-Besitzer (Gast)


Lesenswert?

Könnte das nicht einfach über den zeitlichen Abstand zwischen zwei 
Spitzen berechnet werden?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Matze R. schrieb:
> Wie kann ich daraus jetzt am genauesten die Drehzahl ermitteln?
Wie "genau" ist "am genauesten"? Wie stark jittern deine ADC-Werte? So 
wie ich das mir hier ansehe, kannst du die Drehzahl etwa 1/50 genauer 
auflösen, als die Drehzahl, die du während der Messung hattest. Denn da 
passen ca. 50 Messwerte in 1 Periode.

> die Drehzahl ermitteln
Tut man per Autokorrelation.

: Bearbeitet durch Moderator
Beitrag #5845253 wurde vom Autor gelöscht.
von Wolfgang (Gast)


Lesenswert?

Matze R. schrieb:
> Wie kann ich daraus jetzt am genauesten die Drehzahl ermitteln?

Das hängt davon ab, welchen Drehzahlbereich du überstreichen möchtest 
und ob die Lage deiner Drehachse bezogen auf den Schwerkraftvektor 
konstant ist.

von Wolfgang (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Könnte das nicht einfach über den zeitlichen Abstand zwischen zwei
> Spitzen berechnet werden?

Das Problem ist, aus den deutlich verrauschten Daten die entscheidenen 
zwei  Spitzen herauszufiltern.

von N. M. (mani)


Lesenswert?

Theoretisch sieht das ja schon ein bisschen wie ein SIN /COS aus. Aber 
mit ATAN wird da wahrscheinlich nichts brauchbares raus kommen.

Mach mal die AKF wie Lothar gesagt hat.
Oder eine FFT damit man Mal sieht was für Oberwellen da noch so drauf 
sind.

Edit:Typo

: Bearbeitet durch User
von C. U. (chriull)


Lesenswert?

Drehzahl ist Winkelgeschwindigkeit durch 2 x pi (oder 360 Grad). 
Winkelgeschwindigkeit ist Winkeländerung pro Zeiteinheit. Den Winkel 
solltest du über deine Z und Y Beschleunigungswerte erhalten.

von Joe F. (easylife)


Lesenswert?

So schlecht sieht das gar nicht aus.
Klar, da ist viel Noise drauf, aber den Zusammenhang zwischen sin und 
cos kann man schon recht gut erkennen.
Hänge doch mal ein paar Rohdaten als .csv an, dann kann man mal mit ein 
paar Filtern rumspielen.
Dem ersten Augenschein nach ist der Grundwelle eine Schwingung mit ca. 
der sechsfachen Frequenz und mit ca. 1/6 der Amplitude überlagert. Das 
sollte man eigentlich durch TP Filterung deutlich verbessern können.
Ist denn die dargestellte Drehzahl eher so das obere Ende, oder soll das 
Ding später auch mal noch schneller drehen? Wenn ja, wie viel etwa? 2x? 
3x?

: Bearbeitet durch User
von Karl (Gast)


Lesenswert?

Drehst du immer um die Horizontale oder auch mal um die Vertikale?

von Schlumpf (Gast)


Lesenswert?

Wolfgang schrieb:
> Das Problem ist, aus den deutlich verrauschten Daten die entscheidenen
> zwei  Spitzen herauszufiltern.

Man könnte ja evtl auch die Nulldurchgänge suchen, nachdem man das 
Signal TP-gefiltert und den DC entfernt hat.
Oder liege ich damit falsch?

von Schlumpf (Gast)


Lesenswert?

Ähhhh...

Die Amplitude des Signals sollte doch unabhängig von der Drehzahl sein.
Was man da sieht ist doch nur die Beschleunigung durch die Rotation mal 
plus g und dann minus g.

Der DC offset des Signals sollte sich aber mit der Beschleunigung (also 
der Drehzahl) des Signals verändern. Ebenso die Frequenz.

Wäre es da nicht einfacher, das Signal so stark TP zu filtern, dass nur 
noch der Offset übrig bleibt und anhand dessen auf die Drehzahl zurück 
zu rechnen?

Dann muss man gar keine Analsyse des Signals machen

von Joe F. (easylife)


Lesenswert?

Schlumpf schrieb:
> Wäre es da nicht einfacher, das Signal so stark TP zu filtern, dass nur
> noch der Offset übrig bleibt und anhand dessen auf die Drehzahl zurück
> zu rechnen?

Das ist auch eine Idee. Dafür müsste man den Sensor eben stark 
dezentrisch anbringen, damit er einer Zentrifugalkraft ausgesetzt ist.
Nachteile sind, dass der Messwert abhängig von der Anbringung ist und 
durch das starke Filtern wird es träge.

Ich würde erstmal folgendes versuchen:
Signale rot + grau addieren und durch einen TP und einen HP laufen 
lassen, um Rauschen + Oberwellen zu reduzieren und den DC Offset 
loszuwerden.
Danach Nulldurchgangserkennung mit Hysterese.

von Schlumpf (Gast)


Lesenswert?

Joe F. schrieb:
> Dafür müsste man den Sensor eben stark dezentrisch anbringen, damit er
> einer Zentrifugalkraft ausgesetzt ist.

Je nachdem, wie empfindlich der Sensor ist. Aber ja, da hast natürlich 
recht.

Bei der Methode, die Nulldurchgänge zu suchen bist halt auf eine 
Einbaulage beschränkt.
Ist die Rotationseben horizontal, dann geht das so nicht mehr.

von Wolfgang (Gast)


Lesenswert?

Schlumpf schrieb:
> Man könnte ja evtl auch die Nulldurchgänge suchen, nachdem man das
> Signal TP-gefiltert und den DC entfernt hat.
> Oder liege ich damit falsch?

Dafür musst du eine passende Grenzfrequenz des Tiefpasses festlegen, die 
das höherfrequente Rauschen unterdrückt aber die Nutzfrequenz 
(=Drehzahl) gut durch lässt. Wenn der TO den Drehzahlbereich nicht 
verrät, wird es schwierig.

Viel besser filtern kann man, wenn man das Signal z.B. mit einer PLL 
filtert. Dann kann man richtig lange Zeitkonstanten verwenden und kennt 
die Frequenz. Die Zeitkonstante des Filters muss kürzer sein, als die 
Dynamik der Drehzahl.

von Schlumpf (Gast)


Lesenswert?

Klar, wenn das Störsignal und das Nutzsignal im gleichen Spektrum sind, 
ist es schwer, zu filtern.
Daher auch die Idee, nur den Offset zu betrachten.
Dann kannst großzügig filtern.
Aber auch hier funktioniert das nur in einem eingeschränkten Bereich.
Entweder wird die Beschleunigung zu groß oder zu klein für den Sensor.
Das müsste dann mit dem Radius eingestellt werden, wie weit der Sensor 
aus der Mitte angebracht wird.

von Walter T. (nicolas)


Lesenswert?

Das sieht doch gar nicht so übel aus. Wahrscheinlich reicht sogar die 
Methode der kleinsten Fehlerquadrate (Ansatz mit 4 Parametern: 
DC-Offset, Amplitude, Frequenz, Phasenversatz).

von Schlumpf (Gast)


Lesenswert?

Vermutlich wird der Ansatz, die Nulldurchgänge oder Maxima zu finden, 
nicht ganz unproblematisch sein.
Denn hier schlägt jede Vibration voll durch.
Und sie kann je nach Drehzahl und oder Last völlig anders aussehen.

Bei der Offset-Methode wird es vermutlich einfacher sein, die 
herauszufiltern.

Aber ja, ohne detaillierte Angaben des TO ist alles reine Spekulation

von Wolfgang (Gast)


Lesenswert?

Schlumpf schrieb:
> Klar, wenn das Störsignal und das Nutzsignal im gleichen Spektrum sind,
> ist es schwer, zu filtern.
> Daher auch die Idee, nur den Offset zu betrachten.
> Dann kannst großzügig filtern.

Wenn du zu doll filterst, bekommst du auch da Drehzahländerungen nicht 
mehr mit. Daher meine Frage an den TO.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

orange/grau (dünn): Messdaten
orange/grau (dick): moving average über 13 Werte
hellblau: summe der gemittelten Werte
schwarz: durch Hochpass gejagt, um DC Offset loszuwerden

Das Signal sollte man jetzt mit einer Nullstellen-Detektion gut 
auswerten können.

-> dünne schwarze Linie: y/abs(y)*10

Die Daten habe ich mir aus dem Bild vom TO "rausgepickt" 
(https://apps.automeris.io/wpd/).
Anbei für's Forum zum rumspielen.

: Bearbeitet durch User
von Matze R. (der_matze)


Lesenswert?

Hallo zusammen.

Wow so viele gute Antworten :) Vielen Dank euch allen.
Noch ein paar Infos und Antworten zu den Fragen. Was ich vergessen habe 
zu erwähnen ist, dass es sich um eine Gelenkwelle handelt. Deswegen 
überlagern sich auch weitere Schwingungen durch den Kaderneffekt. Der 
Drehzahlbereich soll so von 0-3000 U/min gehen. Der Durchmesser der 
Welle ist 40mm. Vorerst versuche ich es die Messung so hinzubekommen, 
dass es bei horizontaler Ausrichtung der Welle zum Boden funktioniert. 
Allerdings soll es später auch mit einem Winkel und "schräger" Lage im 
Raum funktionieren.
Die CSV-Daten werde ich morgen mal mit anhängen.

@joe wow das sieht ja wirklich schon viel besser aus vielen Dank.
Nochmals danke an alle für die Beteiligung und die super Tipps. Ich 
hoffe, dass ich keine Frage vergessen habe zu beantworten

von Schlumpf (Gast)


Lesenswert?

Matze R. schrieb:
> Allerdings soll es später auch mit einem Winkel und "schräger" Lage im
> Raum funktionieren.

Je mehr sich diese Schräglage an eine Horizontale Rotationsebene 
annähert, desto kleiner wird die Amplitude des Wechselanteils deines 
Signals sein.
Ist die Ebene horizontal, hast du nur noch einen Gleichanteil auf dem 
Signal (+Störungen)

Bis wieviel m/s² kann denn dein Sensor?

von Matze R. (der_matze)


Lesenswert?

Schlumpf schrieb:
> Bis wieviel m/s² kann denn dein Sensor?

Aktuell benutze ich den MMA8451 von freescale. Der kann bis 6g messen. 
Ich habe aber auch welche gesehen, die bis 16g messen können.

von Matze R. (der_matze)


Angehängte Dateien:

Lesenswert?

Joe F. schrieb :
> Hänge doch mal ein paar Rohdaten als .csv an, dann kann man mal mit ein
> paar Filtern rumspielen.

Hier etwas verspätet mal die Rohdaten der Messung :)

von Matze R. (der_matze)


Lesenswert?

Joe F. schrieb:
> Das Signal sollte man jetzt mit einer Nullstellen-Detektion gut
> auswerten können.

Wie kann ich mit meinem Mikrocontroller die Funktion durch die Filter 
jagen, um Sie dann auszuwerten?

von Joe F. (easylife)


Lesenswert?

Matze R. schrieb:
> Wie kann ich mit meinem Mikrocontroller die Funktion durch die Filter
> jagen, um Sie dann auszuwerten?

Indem du deinem Mikrocontroller einen gleitenden Mittelwert
https://de.wikipedia.org/wiki/Gleitender_Mittelwert

und einen Hochpass-Filter "beibringst":

z.B. als 1st order IIR:
1
float in_curr = 0.0;
2
float in_prev = 0.0;
3
float out     = 0.0;
4
float alpha   = 0.95;
5
6
(...)
7
8
out = out * alpha + (in_curr - in_prev);
9
in_prev = in_curr;

: Bearbeitet durch User
von Rainer V. (a_zip)


Lesenswert?

Matze R. schrieb:
> Der
> Drehzahlbereich soll so von 0-3000 U/min gehen. Der Durchmesser der
> Welle ist 40mm. Vorerst versuche ich es die Messung so hinzubekommen,
> dass es bei horizontaler Ausrichtung der Welle zum Boden funktioniert.
> Allerdings soll es später auch mit einem Winkel und "schräger" Lage im
> Raum funktionieren.

Hallo, ich wage jetzt mal wieder eine der "dummen" Fragen. Ist 
Drehzahlmessung einer Achse mit einer Beschleunigungssensor-Platine 
nicht der falsche Ansatz? Und wie bekommst du überhaupt die Daten von 
dem Platinchen in den Auswerterechner?? Du wist doch wohl kaum 
Schleifringe verwenden :-) Und die Auswertung würde ich erst einmal mit 
einer FFT machen. Dazu mußt du aber sowieso eine Referenzmessung der 
"richtigen" Drehzahl haben! (Hatten wir gerade in einem benachbarten 
Thread). Kann aber trotzdem spannend werden...
Gruß Rainer

von Joe F. (easylife)


Lesenswert?

Rainer V. schrieb:
> Und die Auswertung würde ich erst einmal mit
> einer FFT machen. Dazu mußt du aber sowieso eine Referenzmessung der
> "richtigen" Drehzahl haben! (Hatten wir gerade in einem benachbarten
> Thread).

Und genau deswegen würde ich es in keinem Fall über eine FFT machen ;-)

von Rainer V. (a_zip)


Lesenswert?

Joe F. schrieb:
> Und genau deswegen würde ich es in keinem Fall über eine FFT machen ;-)

Ok, aber schlicht am Thema vorbei!
Gruß Rainer

von Wolfgang (Gast)


Lesenswert?

Rainer V. schrieb:
> Dazu mußt du aber sowieso eine Referenzmessung der "richtigen" Drehzahl
> haben!

Das kommt drauf an, in welcher Raumrichtung die Drehachse liegt und was 
man auswertet. Bei einer Achsenlage mit kräftiger Horizontalkomponente 
wird der durch die Erdbeschleunigung erzeugte Signalanteil genau ein Mal 
pro Umdrehung umlaufen.
Anders sieht es bei Auswertung der Zentrifugalbeschleunigung aus. Da 
wird man auf jeden Fall eine Kalibrierung brauchen.

von Matze R. (der_matze)


Lesenswert?

Joe F. schrieb :
> Indem du deinem Mikrocontroller einen gleitenden Mittelwert
> https://de.wikipedia.org/wiki/Gleitender_Mittelwert
>
> und einen Hochpass-Filter "beibringst":

Vielen Dank das hilft mir schon weiter :)

Rainer V. schrieb:
> Hallo, ich wage jetzt mal wieder eine der "dummen" Fragen. Ist
> Drehzahlmessung einer Achse mit einer Beschleunigungssensor-Platine
> nicht der falsche Ansatz?

Die Frage ist sehr berechtigt. Ich weiß es würde einfacher gehen es 
optisch oder mit Hallsensor zu lösen - aber dabei braucht man ja immer 
einen Aufbau auf der gegenseitigen nicht rotierenden Seite. Ich möchte 
einfach ausprobieren, ob es auch ohne "Gegenseite" funktioniert. Ich 
fand die Vorstellung gut, dass man eine solche Platine (wenn es denn 
funktioniert ;) ) einfach auf eine beliebige Welle packen kann, um die 
Drehzahl zu messen.

Rainer V. schrieb:
> Und wie bekommst du überhaupt die Daten von
> dem Platinchen in den Auswerterechner??

Die Auswertung soll auf dem Mikrocontroller erfolgen. Die Daten sendet 
der Mikrocontroller dann über Bluetooth Low Energy. Die oben genannten 
CSV-Daten hab ich zu Testzwecken mit dem Mikrocontroller auf eine 
SD-Karte geschrieben.

Rainer V. schrieb :
> Und die Auswertung würde ich erst einmal mit
> einer FFT machen. Dazu mußt du aber sowieso eine Referenzmessung der
> "richtigen" Drehzahl haben!

Danke dir für deine Tipps :)

Wolfgang schrieb :
> Das kommt drauf an, in welcher Raumrichtung die Drehachse liegt und was
> man auswertet

Ich kann mir das bildlich gerade nicht richtig vorstellen, aber ich 
glaube ich gucke mir nochmal Videos zum Thema Zentrifugalkraft usw. an. 
Danke dir :)

von Rainer V. (a_zip)


Lesenswert?

Matze R. schrieb:
> aber dabei braucht man ja immer
> einen Aufbau auf der gegenseitigen nicht rotierenden Seite. Ich möchte
> einfach ausprobieren, ob es auch ohne "Gegenseite" funktioniert.

Also sorry, das erschließt sich mir jetzt mal gar nicht. Du bist doch 
nicht im Weltraum???

von Matze R. (der_matze)


Lesenswert?

Rainer V. schrieb :
> Also sorry, das erschließt sich mir jetzt mal gar nicht. Du bist doch
> nicht im Weltraum???

Okay ich hab vielleicht etwas unklar beschrieben was ich meine. Ich 
probiere es nochmal anhand eines Beispiels. Beim Fahrrad Tachometer hast 
du ja an den Speichen des Rads einen Magneten, der mit rotiert. Am 
Rauchrohr der Fahrradgabel hat man dann den Sensor, der quasi zählt wie 
oft der Magnet an Ihm vorbeifährt (das war das was ich mit "Gegenseite" 
meinte).
So könnte ich es natürlich auch machen, aber dann bräuchte ich ja 
irgendeine Einheit außen an der Welle, die sich nicht mitdreht. Und ich 
wollte herausfinden, ob es nicht auch eine Möglichkeit gibt etwas auf 
einer Welle zu installieren, was mir ohne "Gegenseite" verrät wie 
schnell sich die Welle dreht. Und so bin ich auf Beschleunigungssensoren 
gekommen.

von Rainer V. (a_zip)


Lesenswert?

nun gut...nehmen wir also an, dass du deine Daten per Bluetooth zum 
"Rechner" bekommst. Zu allererst brauchst du auf jeden Fall die 
"richtige" Drehzahl. Dann kann man versuchen, diese aus deinen Daten 
"herauszusuchen" . Das erfordert ganz sicher jede Menge Meßreihen, die 
bearbeitet werden müssen. Bist du denn sicher, dass deine "Übungsdaten" 
überhaupt repräsentativ sind? Rein theoretisch reicht es ja, dass du 
dich mit "Korrelationen" befasst. Da gibts genügend Literatur.
Viel Spass jedenfalls, Rainer

von Schlumpf (Gast)


Lesenswert?

Matze R. schrieb:
> Ich kann mir das bildlich gerade nicht richtig vorstellen, aber ich
> glaube ich gucke mir nochmal Videos zum Thema Zentrifugalkraft usw. an.
> Danke dir :)

Die 'Wellen' in deiner Messung kommen nicht von der Zentrifugalkraft. 
Sie sind der Winkel, in dem die Erdbeschleunigung auf den Sensor wirkt. 
Die Amplitude der Welle ist also immer gleich. Nur die Frequenz ändert 
sich.

Ist die Rotationseben parallel zur Erdoberfläche, dann siehst du gar 
keine Welle mehr, da die Gravitation immer im gleichen Winkel auf den 
Sensor wirkt.

Du siehst eine gerade Linie, deren Offset die Zentrifugalbeschleunigung 
darstellt wenn der Sensor exzentrisch montiert ist. Ist er exakt 
zentrisch montiert, solltest du gar nichts mehr sehen. Außer 
Vibrationen.

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
Noch kein Account? Hier anmelden.