KK2.0 Flips, Rollen, Loopings etc. mit eingeschaltetem Self-Leveling?

#41
Hier der Teil, der das Self-Level erledigt (aus imu.asm):

Code:
	;----- Self level ----

	rvbrflagtrue flagSelflevelOn, im31	;skip if false
	rjmp im30	

im31:	

;--- Roll Axis Self-level P ---

	b16neg RxRoll
	
	b16fdiv RxRoll, 1

	b16sub Error, EulerAngleRoll, RxRoll	;calculate error
	b16fdiv Error, 4

	b16mul Value, Error, SelflevelPgain	;Proposjonal gain

	b16mov LimitV, SelflevelPlimit		;Proposjonal limit
	rcall limiter
	b16mov RxRoll, Value

	b16fdiv RxRoll, 1


;--- Pitch Axis Self-level P ---

	b16neg RxPitch
	
	b16fdiv RxPitch, 1

	b16sub Error, EulerAnglePitch, RxPitch	;calculate error
	b16fdiv Error, 4

	b16mul Value, Error, SelflevelPgain	;Proposjonal gain

	b16mov LimitV, SelflevelPlimit		;Proposjonal limit
	rcall limiter
	b16mov RxPitch, Value

	b16fdiv RxPitch, 1
im30:

Und hier die Umrechnung der Vektoren in Winkel (aus trigonometry.asm):

Code:
ExtractEulerAngles:
	
	b824mov TempD, VectorX
	rcall ext2
	b16mov EulerAngleRoll, Angle

	b824mov TempD, VectorY
	rcall ext2
	b16mov EulerAnglePitch, Angle

	ret


ext2:	;b824mul TempA, TempD, TempD		;approximation of a quarter circle (lol :-)

	b824ldi TempB, 90			;convert to degrees (0 to 90)
	b824mul TempA, TempD, TempB
	
	b824load TempA
	rcall transfer824168
	b16store Angle

;	b824load VectorZ			;mirror on X/Y plane (90 to 180)
;	tst xh
;	brpl ext3

;	b16ldi Temp, 180
;	b16sub Angle, Temp, Angle
;ext3:

;	b824load TempD				;mirror on the Z axis (0 to -180)
;	tst xh
;	brpl ext1
;	b16ldi Temp, -1
;	b16mul Angle, Angle, Temp
;ext1:

	ret
 

brandtaucher

Erfahrener Benutzer
#42
Da hab ich mich wohl überschätzt bzw. habe ich es mir einfacher vorgestellt, dies zu lesen.

Was mich wundert: Ich kann 100 Grad-Winkel fliegen. Ich habe Sticklevel auf 100 und der Copter geht auch auf 100 Grad und wenn ich den Knüppel loslasse, geht er zurück in die Horizontale.

Ich habe mich beim ersten Mal richtig erschrocken, als er bei 100 Grad mit Schmackes Richtung Boden fliegt. Die 10 Grad Richtung Boden reichen da aus. Er lässt sich aber problemlos zurückstellen und dreht auch nicht weiter.

So ganz kann das mit dem 90 Grad daher nicht stimmen!
 
#43
Ab 20° Neigung werden nur noch die Gyros, und nicht mehr die Beschleunigungssensoren verwendet. Dabei kann es zu Integrationsfehlern kommen, was evtl. die 100° erklären kann.

Edit: Wobei ich jetzt grad nicht verstehe, wieso er dann nicht weiterdreht, wenn du immer noch einen Winkel größer 90° vorgibst, da er selber ja denkt er hat 90° oder weniger.
 
Zuletzt bearbeitet:

brandtaucher

Erfahrener Benutzer
#44
Na ja, bei 100 Grad ist der Knüppel nach nicht am Anschlag. Drücke ich weiter, dann dreht er rum. Theoretisch kann ich ihn dauerhaft auf 100 Grad halten, würde er sich dann nicht Richtung Boden saugen ...
 

Windelwilli

Erfahrener Benutzer
#45
nein..... also wenn man den Knüppel nicht gaaanz auf anschlag zieht, gehen auch großgezogene Loops....
Nur um nochmal auf die Frage zurückzukommen... habs getestet... weil er aber am ende wieder in die Horizontale will, schiebe ich den Stick nochmal kurz in die entgegengesetzte Richtung ganz am ende des Manövers... und da... ein großer Loop.......

geht also mit Selflevel alles.....
Nur im Wind und wenn man das Board sehr stresst, findet er nichtmehr ganz die 0 im HORIZONT und man muss Selflevel an und aus schalten oder kurz mal landen um zu deaktivieren und wiedre zu aktivieren und weiter gehts...

Da stehts ja: Regarding Self-level that looses its bearing after flying for a while:
This is a vibration problem. Get rid of the vibrations!
Also rapid flipping exceeding the rate of the gyros will cause this.
 
Zuletzt bearbeitet:
FPV1

Banggood

Oben Unten