Brushless Motor per Arduino steuern

donvido

Erfahrener Benutzer
Steht doch alles schon da:
Phi ist der Rollwinkel und berechnet sich durch atan(acc_y/acc_z), wobei acc_y und acc_z die Rohdaten aus dem ACC sind.
 

das_copter_198

Erfahrener Benutzer
Sorry, hab ich überstehen. Ich wollte jetzt die Daten vom ACC auslesen und in ° umrechnen.
Für Y-Achse steht im Code: angel_y = (atan(ay/az)) * 180;

ac und az sind direkt mit der i2cdevlib ausgelesen. Aber irgendwie kommen da keine korrekten Werte raus. Auch wen ich statt atan(ay/az) atan2(ay, az) nehme. Woran liegt das?
 

donvido

Erfahrener Benutzer
von welchem Code redest du?

phi ist der Winkel um die x-Achse
für die korrekte umrechnung in Grad müsste es heißen:
phi = (atan(ay/az)) * 180 /3.14
 

das_copter_198

Erfahrener Benutzer
Danke, dachte das mit den Faktoren war anders gemeint ;) Jetzt funktioniert es :D Auch, wenn ich nicht weiß wie, es geht :D :D Werde trotzdem nachher nochmal die eine PDF nochmal durchlesen um das zu verstehen ;)
 

das_copter_198

Erfahrener Benutzer
Für Y geht die Berechnung sehr gut allerdings weiß hab ich bei x noch ein Problem. Um den Winkle auszurechnen steh im Code bei mir:

accy_euler = atan2(accy, accz);
x = (atan2(-accx, (accy*sin(accy_euler)+accz*cos(accy_euler)))) * 180 / 3.14;

Die Werte stimmen zwar aber wen der Winkel größer als 90° wird, wird er wieder kleiner. Stimmt das so, oder ist bei der Berechnung was falsch?
 

donvido

Erfahrener Benutzer
Das ist korrekt so. Der Rollwinkel sollte +-180° betragen und der Pitchwinkel +-90°.
Bei +90° und -90° Pitchwinkel dürfte deine Anzeige dann etwas "verrückt" Spielen. Dort gibt es keine eindeutige Lösung mehr und du hängst im sogenannten "Gimbal Lock".
 

donvido

Erfahrener Benutzer
Zum einen das und zum anderen springt der Rollwinkel auf +-180°, wenn du +90° Pitch überschreitest (nur Drehung um die y-Achse). Die FC weiß also, dass der Kopter kopfüber in der Luft hängt.
 

das_copter_198

Erfahrener Benutzer
Müssen die Werte des Gyros auch noch umgerechnet werden, weil bei mir kommen jetzt sehr große Werte raus. Müssen die Rohdaten nicht noch durch die Sensibilität geteilt werden, damit da ordentliche Werte rauskommen?
 

donvido

Erfahrener Benutzer
Um bei den Gyros auf die Drehraten zu kommen, musst du zunächst wissen, welcher Messbereich eingestellt ist, also ob 250°/s oder gar 2000°/s.

Sieht dann so aus:
Drehrate[°/s]=Drehrate[roh]*Messbereich[°/s]/Auflösung(16-Bit)
 

donvido

Erfahrener Benutzer
setFullScaleGyroRange(MPU6050_GYRO_FS_250);

#define MPU6050_GYRO_FS_250 0x00
#define MPU6050_GYRO_FS_500 0x01
#define MPU6050_GYRO_FS_1000 0x02
#define MPU6050_GYRO_FS_2000 0x03
 

das_copter_198

Erfahrener Benutzer
Ich werds nachher mal kurz ausprobieren. Aber denke nicht das es das speichert. Dann pack ichs in den setup Teil rein. Und dann wäre ja die Berechnung:

Drehrate = RawData * 2000 / 16

Richtig so?
 

donvido

Erfahrener Benutzer
-.-

16-Bit = 2^16 = 65535

Und dein Messbereich geht von Min bis Max. Also je nach Einstellung (z.B. define MPU6050_GYRO_FS_1000) von -1000 bis +1000, macht also 2000.
 
FPV1

Banggood

Oben Unten