Na gut. Im Code sieht das wie folgt aus (scheint mit der Beschreibung auf der Homepage nicht wirklich übereinzustimmen):
Code: Alles auswählen
uint8_t prop1,prop2;
for(axis=0;axis<2;axis++) {
//PITCH & ROLL dynamic PID adjustemnt, depending on stick deviation
prop1 = 100-min(abs(rcData[axis]-1500)/5,100)*rollPitchRate/100;
//PITCH & ROLL only dynamic PID adjustemnt, depending on throttle value
if (rcData[THROTTLE]<1500) prop2 = 100;
else if (rcData[THROTTLE]>1499 && rcData[THROTTLE]<2000) prop2 = 100 - (rcData[THROTTLE]-1500) * dynThrPID/500;
else prop2 = 100 - dynThrPID;
dynP8[axis] = P8[axis]*prop1/100*prop2/100;
dynD8[axis] = D8[axis]*prop1/100*prop2/100;
}
//YAW dynamic PID adjustemnt
prop1 = 100-min(abs(rcData[YAW]-1500)/5,100)*yawRate/100;
dynP8[YAW] = P8[YAW]*prop1/100;
dynD8[YAW] = D8[YAW]*prop1/100;
Zunächst zur Roll/Pitch Rate:
Code: Alles auswählen
//PITCH & ROLL dynamic PID adjustemnt, depending on stick deviation
prop1 = 100-min(abs(rcData[axis]-1500)/5,100)*rollPitchRate/100;
prop1 gibt einen Prozentwert an, um den die eingestellten "P" und "D" Werte reduziert werden. Wenn z.B. rollPitchRate auf 10 (%) steht, wird bei Vollauschlag auf ROLL (d.h. rcData[ROLL] = 2000) "P" und "D" um den Faktor 0.9 verkleinert. Das gleiche gilt auch für PITCH und über die yawRate für YAW.
Jetzt zum "Throttle PID" Teil:
//PITCH & ROLL only dynamic PID adjustemnt, depending on throttle value
if (rcData[THROTTLE]<1500) prop2 = 100;
else if (rcData[THROTTLE]>1499 && rcData[THROTTLE]<2000) prop2 = 100 - (rcData[THROTTLE]-1500) * dynThrPID/500;
else prop2 = 100 - dynThrPID;
dynP8[axis] = P8[axis]*prop1/100*prop2/100;
dynD8[axis] = D8[axis]*prop1/100*prop2/100;
Wenn der Gaskanal unterhalb der Mitte steht (rcData[THROTTLE]<1500), passiert nichts. Oberhalb der Mitte wird kontinuierlich (nicht wie beschrieben in den Bereichen 40-60, 60-80 und 80-100) der Faktor prop2 von 100% bis auf (100-dynThrPID) % reduziert, also z.B. bei dynThrPID = 25% von 100% (bei Mittelstellung) bis 75% (bei Vollgas). Dieser Faktor wird ebenfalls mit den "P" und "D" Werten multipliziert, zusätzlich zum Roll/Pitch-Faktor. Wenn man den Roll/Pitch Faktor auf 50 setzt und den Throttle PID auf 30, reduziert man z.B. bei Vollgas und vollem Rollen den "P" und "D" Wert von ROLL um den Faktor 0.5 * 0.7 = 0.35.
Wie sich das anfühlt... weißnich.
