Trying to implement PI controller in function. Already worked for one controller. However, for more than one controller, the results are shifting. Suppose to get same values in the following code. Any help I appreciate it.
float r_in_1 = 10.00;
float y_out_1 = 5.00;
float r_in_2 = 10.00;
float y_out_2 = 5.00;
float r_o_1;
float y_o_1;
float r_o_2;
float y_o_2;
float vi_1 = 0;
float vi_2 = 0;
void setup() {
Serial.begin(9600);
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
r_o_1 = pow_2(r_in_1);
r_o_2 = pow_2(r_in_2);
y_o_1 = pow_2(y_out_1);
y_o_2 = pow_2(y_out_2);
vi_1 = PI_1(r_o_1, y_o_1);
vi_2 = PI_1(r_o_2, y_o_2);
Serial.print(vi_1);
Serial.print(',');
Serial.println(vi_2);
delay(1000);
}
float pow_2(float x){
float z;
z = x*x;
return z;
}
float PI_1(float r, float y){
float e;
static float sum_e=0;
float vi;
float kp=2.00;
float ki=10.00;
e = r - y;
sum_e = sum_e + e;
vi = kp * e + ki * sum_e;
return vi;
}