Ich hab jetzt mal einen Teil des Programmcodes mit Komentaren versehen:
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 MC_LEFT_IMAX ?
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
Lesezeichen