PID Matlab scripts is not running
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
%Closed loop Algorthim
%Error=Setpoint -Feedback
%Setpoint:5
%Feedback:0,1,2,3,4,5(my assumption)
previous_error=0;
integral=0;
kp=1;
ki=1;
kd=1;
sp=[5,5,5,5,5,5];
fb=[0,1,2,3,4,5];
error=[5,4,3,2,1,0];
dt=[0,1,2,3,4,5]
error=sp-fb
integral=(integral + error) * dt
derivative= (error - previous_error) / dt
output=(er*kp)+(ki*integral)+(kd*derivative)
previous_error= error
plot(output,dt)
0 Commenti
Risposte (1)
Walter Roberson
il 31 Dic 2020
Change all * to .* and all / to ./
1 Commento
Walter Roberson
il 31 Dic 2020
format long g
%Closed loop Algorthim
%Error=Setpoint -Feedback
%Setpoint:5
%Feedback:0,1,2,3,4,5(my assumption)
previous_error=0;
integral=0;
kp=1;
ki=1;
kd=1;
sp=[5,5,5,5,5,5];
fb=[0,1,2,3,4,5];
error=[5,4,3,2,1,0];
dt=[0,1,2,3,4,5]
error=sp-fb
integral=(integral + error) .* dt
derivative= (error - previous_error) ./ (dt+(dt==0)/5)
output=(error.*kp)+(ki.*integral)+(kd.*derivative)
previous_error= error
plot(dt,output)
The (dt+(dt==0)/5) clause is effectively: dt if dt is non-zero, 1/5 if dt is zero. It is there to prevent division by 0, which would give infinity. The 1/5 was chosen arbitrarily to not skew the plot too high but stil emphasize that the value is much higher than the others.
Vedere anche
Categorie
Scopri di più su PID Controller Tuning in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
