Code: Select all
#if defined(THROTTLE_ANGLE_CORRECTION)
cosZ = EstG.V16.Z / (ACC_1G * 100.0f); // cos(angleZ) * 100
throttleAngleCorrection = THROTTLE_ANGLE_CORRECTION * constrain(100 - cosZ, 0, 100) >>3; // 16 bit ok: 200*150 = 30000
#endif
Should be
Code: Select all
#if defined(THROTTLE_ANGLE_CORRECTION)
cosZ = EstG.V16.Z * 100 / ACC_1G; // cos(angleZ) * 100, mul 100 should be enough
throttleAngleCorrection = THROTTLE_ANGLE_CORRECTION * constrain(100 - cosZ, 0, 100) >>3; // 16 bit ok: 200*150 = 30000
#endif
Or cosZ will always be 0.
ACC_1G * 100.0f is a large number, or you have to cast EstG.V16.Z to float to get the correct result.