Ich hab jetzt mal einen Teil des Programmcodes mit Komentaren versehen:
was bedeutet MC_LEFT_IMAX ?Code:// Left motor speed control: Zeile 660 (Implementierter Regler) //Verwendete Größen und Variablen #define MC_LEFT_IMAX 420 //was bedeutet das ??? #define MC_LEFT_IMIN -420 #define MC_RIGHT_IMAX 420 #define MC_RIGHT_IMIN -420 int16_t right_i; // esum (Summe der Regelabweichung) int16_t left_i; int16_t mleft_power; // y (Stellgröße für den Motor) int16_t mright_power; // int16_t error_left // e (Regelabweichung unten definiert) uint16_t mleft_des_speed; // w (vorgegebener Sollwert) uint16_t mright_des_speed; volatile uint16_t mleft_speed; // x (gemessener Istwert) volatile uint16_t mright_speed; // Left motor speed control: int16_t error_left = mleft_des_speed - mleft_speed; // e = w - x left_i = left_i + error_left; // esum = esum + e if(left_i > MC_LEFT_IMAX) left_i = MC_LEFT_IMAX; // Begrenzung esum[-420;420] if(left_i < MC_LEFT_IMIN) left_i = MC_LEFT_IMIN; if(mleft_speed == 0 && mleft_des_speed == 0) // wenn x und w 0 dann esum auch 0 left_i = 0; mleft_power = left_i / 2; // y = esum / 2 oder y=esum * 0,5 if(mleft_power > 210) mleft_power = 210; // begrenzung von y [0;210] if(mleft_power < 0) mleft_power = 0;
was bedeutet volatile ?
in kürze zusammengefasst:
e=w-x
esum = esum + e
y=0.5*esum
das sieht schon stark nach dem I regler aus dem RN Wiki aus:
esum = esum + e
y = Ki * Ta * esum
was ich nicht verstehe ist die letzte Zeile. Wo kommt in dem Programmcode Ta (abtastzeit ?) vor ???
oder wie ist die letzte zeile genau zu verstehen ?
wäre nett wenn einer mal kurz drüber schaut ob das so stimmt.
herzliche Grüße
Thomas







Zitieren
Lesezeichen