Brushless Motor per Arduino steuern

donvido

Erfahrener Benutzer
Tja, am besten wie in den vielen Tutorials beschrieben, deinen Copter iwo einspannen, P I und D auf 0 und dann P solange erhöhen, bis es schwingt und dann P wieder zurück.
Alternativ guckst du, dass bei vollem Knüppelauschlag deine Motoren maximal angesteuert werden und setzt dann I und D auf ein Zehntel von P.
 

donvido

Erfahrener Benutzer
Wenn du ne Multiwii hast, kannst du in der GUI die Motorausgänge und den Input von der Funke mit deinem Regler vergleichen.
Dafür musst du den I-Wert aber auf Null setzen.
Einfach Funke anschließen, GUI starten, Multiwii armen und dann mal rollen oder pitchen und gucken wie sich die Motorausgänge verhalten. Das gleiche kannste dann mit deinem Regler machen und vergleichen.
Darf man fragen, wie du die Signale von deiner Funke auswertest?
 

das_copter_198

Erfahrener Benutzer
Ja ich hab nen Copter mit Multiwii, ich werde nachher mal schauen wie der sich so verhält. Die Signale der Funke Werte ich noch gar nicht aus. Ich weiß noch nicht genau wie ich das machen werden. Zum Testen hab ich mal pulseIn() verwendet, aber ich weiß noch nicht wie ich machen werde, hat mich damit auch noch nicht befasst. Darf man fragen wie du das gemacht hast? ;)

Edit: pulseIn() fällt schon mal weg ;)
 
Zuletzt bearbeitet:

das_copter_198

Erfahrener Benutzer
Hab gerade mal ein bisschen geschaut, welche Möglichkeiten es gibt:
1) PulseIn()
2) Timer
3) Interrupts

PulseIn() werde ich sicherlich nicht nehmen. Ich denke ich werde auch Interrupts nehmen.

Benutzt du ein PPM Signal?
 

das_copter_198

Erfahrener Benutzer
Ich wollte gerade meine PID.h fertig machen, dazu hat ich noch eine Frage, wegen der Steuereingabe. Die Eingaben sind ja zischen -500 und 500. Um diese Werte in error einzurechnen, müssten die Werte ja auch in ° sein(außer bei einer reinen Gyro Steuerung). Stimmt es das voller ausschalt also z.b. 500 = 50° Neigung sind? Weil dann wären ja Steuereingaben/10 = °. Stimmt das so?
 

das_copter_198

Erfahrener Benutzer
Zum Beispiel: Ich will die Roll Axe regeln. Ich habe die Roll Eingabe von -500 bis 500. Und ich habe vom Kalmanfilter die Winkel. Der Sollwert ist ohne Eingabe 0 und sonst wie die Eingabe.Wie berechne ich dann error bzw. die Abweichung vom Sollwert, in ° (mit Rx Eingabe)?
 

donvido

Erfahrener Benutzer
error=Istwert-Sollwert

Istwert kommt aus deiner Messung, Sollwert gibts du vor.
Wie du das machst, ist dir überlassen. Du kannst den Sollwert fest vorgeben (z.B. Null) oder du machst ihn variabel und übergibst ihn mit der Funke.
 

das_copter_198

Erfahrener Benutzer
Ja, dass weiß ich. Es geht darum das der Istwert in ° ist. Und Istwert und Sollwert sollte ja die gleiche Einheit haben, oder? Deshalb ist die Frage wie ich die Signale der Funke(-500 - 500) in ° umrechnen kann?
 

das_copter_198

Erfahrener Benutzer
Ok, nachdenken....
Ich lege als Größten Ausschlag 50° fest. Dann ist 500 = 50° und dann wären dass 10 = 1°. Ist das ein Dreisatz(sollte man sowas nicht eig. in der Schule lernen, mit dem Dreisatz??) ? ;)
 

das_copter_198

Erfahrener Benutzer
Hab gerade mal geschaut, wie sich Multiwii so verhält. Die haben auch 500 = 50° also bei vollen Ausschlag ca. 50°. Bei 100 Eingabe, also wenn der Copter 10° geneigt sein sollte ist die Differenz der Ausgänge 200, also 10° * 20 = Differenz. Dass würde heißen 1° Neigung sind eine Differenz von 20 also Motor1 = Throttle - 10 & Motor2 = Throttle + 10. Also wäre die maximale Neigung 50° eine Differenz von 1000 also 1000 und 2000 als Motor Signal. Stimmt dann "Differenz = Neigung(°) * 20"?
 

das_copter_198

Erfahrener Benutzer
Nachdem das Projekt jetzt kurz geruht ist, habe ich heute endlich den Copter zum Testen fertig gebaut und wollte jetzt dann beginnen die Software zu vollenden. Da habe ich noch eine Frage zu den Timern. Ich verwende Timer 1 und 2, der 2. ist zwar ein 16Bit aber ich kann doch trotzdem 8Bit an den Timer schicken? Außerdem muss ich für beide Timer den Modus festlegen und den Prescale oder passen die Voreinstellungen?
 
FPV1

Banggood

Oben Unten