Hallo!
auf dem STM32F4 Discovery Board messe ich Encodersignale vom Motor. Für
meine Anwendung ist die Encodersignale bisschen verrauscht so dass
wollte ich diese mit einem Tiefpassfilter glättern.
Da habe ich unerwartetes Problem.
1 |
|
2 | float sampleT = 0.01f;
|
3 |
|
4 | MotorAngle1 = ((float)EncoderCounter1)*6.2831f/1920.f; // [rad]
|
5 | MotorAngle2 = ((float)EncoderCounter2)*6.2831f/1920.f; // [rad]
|
6 |
|
7 | angleW1 = (((float)(EncoderCounter1 -oldEncoderCounter1))*6.2831f/1920.f)/sampleT; // [rad/s]
|
8 | angleW2 = (((float)(EncoderCounter2 - oldEncoderCounter2))*6.2831f/1920.f)/sampleT; // [rad/s]
|
9 |
|
10 | /* Reset Encoder Counter */
|
11 |
|
12 | oldEncoderCounter1 = EncoderCounter1;
|
13 | oldEncoderCounter2 = EncoderCounter2;
|
bis hier funktioniert alles gut.
jetzt sollte mein gebastelte Tiefpassfilter angleW1 und angleW2 filtern
1 | /* Tiefpass Filter */
|
2 | float TmW = 0.03f;
|
3 | _angleW1 = (angleW1 - old_angleW1)*(sampleT/TmW) + old_angleW1;
|
4 | _angleW2 = (angleW2 - old_angleW2)*(sampleT/TmW) + old_angleW2;
|
5 |
|
6 | old_angleW1 = _angleW1;
|
7 | old_angleW2 = _angleW2;
|
Das Code ist auf dem AVR ohne Problem funktioniert.
über USART messe ich gefiltertes _angleW1 und _angleW2 seltsamerweise so
1 | _angleW1 = 2147483647.2147483647;
|
2 | _angleW2 = 2147483647.2147483647;
|
sieht nach 2^31 -1 komma 2^31 -1 aus.
Wie kann ich dieses Verhalten umgehen?
Grüße Wang!