Che Guevara
04.03.2015, 13:30
Hi,
ich habe ein kleines Problem auf meinem STM32F417VET6. Der µC läuft stabil auf 168MHz mit 3V3, programmiert wird mit EM::Blocks.
Bei folgenden Codezeilen erhalte ich manchmal ein NaN in RollAngleGyro & NickAngleGyro:
RollAngleGyro = ((RollAngleGyro+(GyroX*0.001f))*GyroInfluence) + (RollAngleAcc*AccInfluence);
NickAngleGyro = ((NickAngleGyro+(GyroY*0.001f))*GyroInfluence) + (NickAngleAcc*AccInfluence);
GyroZTmp = GyroZ * (0.001f/90.0f);
SinGyroZAngle = arm_sin_f32(GyroZTmp);
CosGyroZAngle = arm_cos_f32(GyroZTmp);
AngleTmp1 = (SinGyroZAngle*NickAngleGyro) + (CosGyroZAngle*RollAngleGyro);
AngleTmp2 = (CosGyroZAngle*NickAngleGyro) - (SinGyroZAngle*RollAngleGyro);
RollAngleGyro = AngleTmp1;
NickAngleGyro = AngleTmp2;
Ich hab mir die Werte im Debugger angesehen, alle haben die richtigen Werte bis eben auf RollAngleGyro & NickAngleGyro.
Ansonsten werden die Werte nirgends verändert, nur ausgelesen. Alle Variablen sind global als float32 definiert.
Ich hab schon einigemale dieses Verhalten beobachtet und bin langsam mit meinem Latein am Ende.
Es kommt keine Division vor, auch die Wurzel wird nicht gezogen. Was für Gründe kann ein NaN sonst noch haben?
Vielen Dank & Gruß
Chris
ich habe ein kleines Problem auf meinem STM32F417VET6. Der µC läuft stabil auf 168MHz mit 3V3, programmiert wird mit EM::Blocks.
Bei folgenden Codezeilen erhalte ich manchmal ein NaN in RollAngleGyro & NickAngleGyro:
RollAngleGyro = ((RollAngleGyro+(GyroX*0.001f))*GyroInfluence) + (RollAngleAcc*AccInfluence);
NickAngleGyro = ((NickAngleGyro+(GyroY*0.001f))*GyroInfluence) + (NickAngleAcc*AccInfluence);
GyroZTmp = GyroZ * (0.001f/90.0f);
SinGyroZAngle = arm_sin_f32(GyroZTmp);
CosGyroZAngle = arm_cos_f32(GyroZTmp);
AngleTmp1 = (SinGyroZAngle*NickAngleGyro) + (CosGyroZAngle*RollAngleGyro);
AngleTmp2 = (CosGyroZAngle*NickAngleGyro) - (SinGyroZAngle*RollAngleGyro);
RollAngleGyro = AngleTmp1;
NickAngleGyro = AngleTmp2;
Ich hab mir die Werte im Debugger angesehen, alle haben die richtigen Werte bis eben auf RollAngleGyro & NickAngleGyro.
Ansonsten werden die Werte nirgends verändert, nur ausgelesen. Alle Variablen sind global als float32 definiert.
Ich hab schon einigemale dieses Verhalten beobachtet und bin langsam mit meinem Latein am Ende.
Es kommt keine Division vor, auch die Wurzel wird nicht gezogen. Was für Gründe kann ein NaN sonst noch haben?
Vielen Dank & Gruß
Chris