Hi!

Also, wenn ich den Copter in einem Gestell habe, wo er sich nur um eine Achse drehen kann ist alles bestens.
Lässt sich gut steuern und bleibt stabil.

Wenn ich ihn jetzt frei fliegen lasse klappt es prinzipiell ganz gut.
Problem ist, dass er relativ stark in eine Richtung geneigt bleibt (Y Achse).
Wenn ich nun etwas zu viel Gas gebe, kippt er um.

Also, ich denke, ich muss die Parameter weiter einstellen.
Aber wie soll ich das am besten Machen, ohne viel zu viele Rotoren zu zerstören?

Ich habe die PID übrigens etwas unkonventionell gelöst, um Fließkommazahlen zu umgehen:
Code:
int16_t PID::Compute(int16_t error)
{
	
	//errSum += (error); //Integralanteil
	
	if ((errSum + error/prescaler) > Imax) //errsum begrenzen
	errSum = Imax;
	
	else if ((errSum + error/prescaler) < Imin)
	errSum = Imin;
	else
	errSum += (error /prescaler);
	
	float dErr = (error - lastErr); //Differentialanteil
	
	lastErr = error;
	
	return (int16_t)((error/kp) + (dErr / kd) + (errSum/ki));
	
}
Code:
pidX.SetParam(420,10000,10); //P, I, D
pidX.SetLimits(-5000,5000);
pidX.SetPrescaler(100);
zum Test war der I Anteil verschwindend gering, der war früher mal höher

Aber Prinzipiell spricht nicht gegen das Prinzip, oder?

mfg
Olaf