Elektronisch dynamisches Wuchten von Motor und Propeller (Arduino)

rc-action_de

Erfahrener Benutzer
#1
Hallo zusammen,

wer kennt es nicht das leidige Thema. "Propeller wuchten".

Als ich mal wieder dabei war einige Propeller auf dem Prop- Balancer auszuwiegen um im Anschluss festzustellen das diese zwar in einer Achse korrekt ausbalanciert sind, jedoch einen Höhenschlag haben oder die Motormitnehmer nicht mittig sitzen und die Auswuchterei eigentlich umsonst war, kam mir die Idee, wie vielen vorher schon, es anders zu versuchen und Motor sowie Propeller in einer Einheit zu wuchten.

Dazu fiel mir zuerst ein möglicher Ansatz ein, welcher aus einer Nanowii sowie der passenden VB.NET Software bestand, welche lediglich die Stärke der durch die Störung hervorgerufene Unwucht misst und diese in einem gemittelten Wert darstellt und diesen mit verherigen Werten gegenüberstellt um einen gutes Balance-verhalten zu erreichen.

Theorie Ansatz 1:
.... OFFSET Wert ermitteln um einen Gyro- Wert nahe 0 heraus zu bekommen
.... Abweichung vom 0 Wert (negativ/ Positiv) ermitteln und daraus einen Mittelwert zu generieren
.... Mittelwert als Zahl darstellen und in eine Tabelle, zu den vorherigen Messergebnissen schreiben

Dabei kam folgendes Resultat heraus, welches sehr genaue Messungen lieferte und das Auswuchten sehr erleichterte:
Es konnte nicht die Position des Übergewichtes ermitteln, jedoch ziemlich genau die Stärke der durch die Unwucht hervorgerufene Störung.
https://www.youtube.com/watch?v=-ZBgUlDQFg8

Nachdem ich 6 Motoren/Propeller damit gewuchtet hatte ging es aufs Flugfeld. Eine derartige Ruhe der Videoaufnahmen kannte ich bis Dato nicht von meinem Copter, obwohl er schon immer relativ ruhige Aufnahmen lieferte.
Ergo ==> zum Auswuchten, wenn auch sehr zeitintensiv ist das gut geeignet.

Hardware im Versuch 1.
- Nanowii mit ...
- MPU6050
Software:
- Arduino, VB.NET


Angestachelt von dem kleinen Wucht- erfolg wollte ich nun auch noch die Position des Übergewichtes an Luftschraube und Motor ermitteln.

Dazu kam ein VNY70 zum Einsatz, welcher nun auch die Position des Motors/ Propellers lieferte und somit die Stärke der Störung auf einen bestimmten Drehwinkel eingrenzen konnte.

https://www.youtube.com/watch?v=oNV57toD69o

Auch dies war nur einer der vielen und wahrscheinlich nicht besten jedoch möglichen Ansätze.

Leider über speicherte ich in diesem Versuch meinen ersten Versuch, der einwandfrei funktionierte, was jetzt kein großes Drama ist, da ich diesen zum Glück neu schreiben kann ;-)

Ansatz 2:
... Anzahl der Messungen je Umdrehung ermitteln
... Position der größten Störung je Umdrehung ermitteln
... Winkel ausgehend vom markierten 0°/360° ermitteln, berechnen und anzeigen

Auch dieser Ansatz funktioniert, jedoch lässt sich damit momentan kein Propeller zu 100% auswuchten, da es an Genauigkeit fehlt. Mit vielen Messwerten steigt die Genauigkeit zwar, sie ist aber lange nicht so genau wie bei meinem ersten Versuch.
Zudem muss man vorher die richtige Position des Sensors sowie die Drehrichtung des Motors herausfinden/einstellen.

PS: im Anhang findet ihr den Arduino- Quelltext von Ansatz-2 -nur schnell herunter- geschrieben und mit ein paar Kommentaren versehen.

Hardware im Versuch 2.
- Nanowii
- VNY70
- ADXL335
Software:
- Arduino

Dieser Thread soll allen mögliche Ansätze aufzeigen und vielleicht eine echte Arbeitserleichterung auf dem Weg zum vibrationsarmen Copter sein.

Wer hat eine Idee - wer macht mit ?

Viele Grüße
Henry
 

Anhänge

rc-action_de

Erfahrener Benutzer
#4
Hallo Jörg,

danke - das ist genau mein Ansatz 2 nur mit dem Arduino anstatt dem 2 Kanal Oszi. Ich hätte es auch gerne getestet, was aber mangels Oszi nicht funktioniert. Die einfachste Möglichkeit wäre dieses via Soundkarte als Eingang zu emulieren ;-)

Das einzige was mich daran stört ist das man selbst bewerten bzw. im Kopf abschätzen muss wo der schwere Punkt liegt. Diesen genau zu berechnen wäre noch eine Steigerung ;-)

Viele Grüße
Henry
 
Zuletzt bearbeitet:

Spacefish

Erfahrener Benutzer
#5
Hallo Jörg,

danke - das ist genau mein Ansatz 2 nur mit dem Arduino anstatt dem 2 Kanal Oszi. Ich hätte es auch gerne getestet, was aber mangels Oszi nicht funktioniert. Die einfachste Möglichkeit wäre dieses via Soundkarte als Eingang zu emulieren ;-)

Das einzige was mich daran stört ist das man selbst bewerten bzw. im Kopf abschätzen muss wo der schwere Punkt liegt. Diesen genau zu berechnen wäre noch eine Steigerung ;-)

Viele Grüße
Henry
Das wird nur aus einem Beschleunigungssensor kaum möglich sein, da du die Position des Rotors nicht kennst. Dazu bräuchtest du entweder die Daten aus dem ESC (könnte man ja mit custom Firmware machen) oder halt die Lichtschrankentaktik :) Alternativ ein Absolut-encoder am Motor.
Habe das selbe wie du auch schonmal gebaut und dann noch Drehfrequenz/Vibration in nem Scatterplot geplottet. Dadurch sieht man noch ob es Resonanzfrequenzn im Copterframe gibt.

Ich hatte dann mal so Gummidämpfer zwischen Motor und Frame verbaut. Das bringt ziemlich viel, obwohl mir alle davon abgeraten haben. Als positiver Nebeneffekt reißen bei einem harten Absturz die Gummidämpfer ab und der Motor nimmt keinen Schaden.

Hier ohne Dämpfer


Hier mit:


Das mit dem Oszi und Lichtschranke / Hall-Sensor muss ich unbedingt mal probieren :) evtl. könnte man auch einfach auf den Nulldurchgang einer Leitung triggern? Dann bräuchte man gar keinen Sensor.. 300 Mhz Oszi sollten ja reichen lol

B.t.w. bau doch einfach dieses 0 Durchgang Detektionsnetzwerk eines ESCs nach und triggere darauf mit dem Arduino.. Dazu muss der ACC Sensor aber halt hochfrequent genug sein. Evtl. könnte man den dann mit irgendwas anderem ersetzen wie eine Art Blech welches halt mitschwingt und einen Kondensator bildet und man es direkt analog ausliest / plottet. Sonst denk ich hat man komische Timingprobleme, da man die Latenz des ACC´s / Gyros nicht wirklich kennt.
 

cesco1

Erfahrener Benutzer
#6
Das auslesen der esc zur positionsbestimmung ist nicht so einfach, da die üeblichen 12pol motoren insgesamt 4 nullpunkte pro umdrehung machen. Die esc weiss nicht genau wie der motor steht, ob 0, 90, 180 oder 270 grad kann die esc nicht unterscheiden.

Um der problematik der meist massiv unwuchtigen hk-motoren zu entgehen hab ich mir sunnysky motoren reingezogen.
 

aargau

Erfahrener Benutzer
#7
Möchte das hier mal wieder nach oben holen, da ich selber auch an einer Lösung baue das Wuchten zu Automatisieren.
Mein Ansatz war es ein möglichst schneller Acc zu finden, welcher mindestens 200-300 Werte pro Umdrehung liefert. Anhand diesen lassen sich (wie von Henry) denke ich ziemlich genaue werte errechnen wo die Unwucht liegt.
Aber wo kriegt man einen Sensor her, der 3-5k samples pro Sekunde ausgibt? Das Auslesen per Analog read ist nicht das Problem, Arduino kann mit einer Modifikation bis zu 70k/sec. Der ADXL335 scheint aber maximal irgend was um die 1600hz zu schaffen, wenn man den kondensator komplett entfernt.
In meinen Augen ist der 10bit ADC von Arduiono aber auch nicht gerade so super geeignet. Wenn man bedenkt, dass der ADX eh nur max 3.3V ausgibt kommt man also noch auf knaoo 670Werte, bei feiner Unwucht wird das nicht mehr unterscheidbar sein
 

schnellmaleben

Erfahrener Benutzer
#8
In meinen Augen ist der 10bit ADC von Arduiono aber auch nicht gerade so super geeignet. Wenn man bedenkt, dass der ADX eh nur max 3.3V ausgibt kommt man also noch auf knaoo 670Werte, bei feiner Unwucht wird das nicht mehr unterscheidbar sein
Zumindest dafür gibts eine einfache Lösung: Lege 3.3V an den AREF-Pin und "analogReference(EXTERNAL);" und der ADC arbeitet mit voller Auflösung auf genau dem Spannungsbereich, der an AREF anliegt.
 

Spacefish

Erfahrener Benutzer
#9
Ich würde immer noch einen selbst gebauten kondensator nehmen, bei dem sich die Kapazität je nach Beschleunigung ändert. Also eine platte an dem sich bewegenden Element, die andere statisch. Dann ein hochfrequenten schwingkreis mit dem kondensator drinnen und einfach die Frequenz messen. Falls zu hochfrequent evtl noch einen mixer dahinter schalten
 

aargau

Erfahrener Benutzer
#10
Die idee 3.3V am Aref zu verwenden ist eigentlich nicht mal so schlecht, wobei so viel besser wird es das ganze wohl auch nicht machen, wäre aber sicher ein Test wert.

Ich habe gestern mal etwas experimentiert mit einem DJI Motor. Bei Vollgas schaffe ich es eine Umdrehung aufzuzeichnen:

Man müsste natürlich noch ein 0Punkt haben. Habe aber leider noch kein Sensor hier um das einzubauen.

Das Problem am ganzen ist aber sicherlich auch, dass der Arduino zu wenig RAM hat, ich kann zwar ca 800-900 Werte aufzeichnen bei 60khz aber das reicht nicht wirklich aus. Man müsste also entweder das ganze abhängig von der Drehzahl einschränken / mehrere werte mitteln oder aber die Daten irgend wie extern speichern, wobei da auch nur RAM in frage kommen würde denke ich. Auf eine SD Karte zu schreiben würde sicherlich viel zu lange dauern.

Was mir aber immer noch nicht ganz so klar ist, wie erkenne ich jetzt da "wo" die unwucht ist? ich nehme mal an, dass sie bei +10 = zu viel und bei -10 = zu wenig ist, also an dieser Position müsste man dann etwas Gewicht wegnehmen / auftragen?

Theoretisch müsste man doch sogar die Gewichtsmenge berechnen können?
Gib es irgend einen schnelleren ACC als den ADXL335? Ev. sogar digital?
Ev. müsste man dann aber auch auf ein 32Bit CPU setzen (wie wäre es eigentlich mit der PC Soundkarte?)
 

Spacefish

Erfahrener Benutzer
#11
Naja das hängt von der Position des Sensors ab, relativ zur drehachse des Motors. Auch sollte der Sensor die Beschleunigung zur Achsmitte messen. Die Größe der Unwucht kannst du nur berechnen, wenn du den Frequenzgang des sensors und vor allem die Impulsantwort des Dämpfungssystems an dem der Motor hängt kennst.
 

RAM

Benutzer
#15
Hallo Leute,

ich will mich demnächst auch mal mit dem Thema dynamisches Wuchten beschäftigen. Ich finde das von lucafede verlinkte Projekt mit dem ADXL345 sehr interessant. Hat das vielleicht schon mal jemand zwischenzeitlich nachgebaut?
 

aargau

Erfahrener Benutzer
#16
Hallo Martin

Ich bin leider noch nicht dazu gekommen. Ein ADXL345 liegt hier, was mir aber noch fehlt ist eine passende Lichtschranke.
Habe zwar bei Conrad mal was bestellt, aber da wird eine Reichweite von 0.1mm angegeben -> kann ich wohl vergessen.
Hat jemand eine Idee was für eine Schranke man da verwenden könnte und am besten direkt in DE / CH erhältlich ist?
 

RAM

Benutzer
#17
Hi,

hab mir jetz auch mal einen ADXL345 bestellt, CNY70's hätte ich auch noch ein paar in der Bastelkiste, allerdings bin ich mir da auch nicht sicher, ob die für die Drehzahlmessung an einem Propellerblatt geeignet sind, wär eher eine Möglichkeit, die Drehzahl an der Glocke zu messen, wie es der rc-action_de gemacht hat.
 

aargau

Erfahrener Benutzer
#18
Genau, so ein CNY70 hab ich von Conrad geholt.. Aber eben, die sollen ja nur irgend wie 0.1mm weit kommen, das wäre am Propeller irgend wie viel zu mühsam und eine Fehlerquelle mehr.
Habe mir von 4-5 Wochen in China mal noch was bestellt, aber leider bis heute noch nicht hier, normal dauert das 2Wochen :(

Ich glaube hier im Forum gibt es jemand, der über ein Oszi Wuchtet und einen brauchbaren Sensor nutzt, muss mal schauen ob ich den thread nochmals finde
 

aargau

Erfahrener Benutzer
#20
Okay, dann hat da wohl Conrad ein Fehler. Aber auch 0.5cm ist etwas wenig wie ich finde. 1cm könnte klappen, aber so 3-5 wären wohl die bessere Lösung. Werde es aber wohl doch mal versuchen. Danke auch für den Link!

Edit: Könnte man sonst ev. auch einfach eine stärkere IR Diode zum Senden verwenden?
 
Zuletzt bearbeitet:
FPV1

Banggood

Oben Unten