control-system/Assignment 6 - Tuning PID/README.md
2022-10-03 14:13:42 +07:00

4.9 KiB

Improved Particle Swarm Optimization and Ziegler-Nicols 1 on PID Tuning

This dir is belong to Control System class contains with Tuning PID with ZN1 and IPSO on motor system.

Software

This program ran in Matlab

IPSO Method

Variables

s = tf('s'); defines s as 'frequency domain' for transfer function and will be used further.

J = 0.01;
b = 0.1;
K = 0.01;
R = 1;
L = 0.5;

Those variable comes from BLDC control system.

c1=2; c2=2; w_max = 1; w_min = 0.1; particles=50; iterations=100;
var=3; e_max = 1; e_min=0.1;

% Search limit
lim_min = 0;
lim_max = 2500;

Variable above is the constant for PSO tuning.

Testing

ITAE Cost Function

itae

Step Response

step

Ramp Response

ramp

Impulse Response

impulse

Acceleration Response

acceleration

Results

Elapsed time is 18.701024 seconds.

Before PSO-PID

        RiseTime: 1.0161
    SettlingTime: 1.8471
     SettlingMin: 0.0819
     SettlingMax: 0.0907
       Overshoot: 0
      Undershoot: 0
            Peak: 0.0907
        PeakTime: 3.0168
         SSError: 0.9095

After PSO-PID

Kp = 853.3161

Ki = 74.1078

Kd = 2.4810e+03

        RiseTime: 9.5287e-04
    SettlingTime: 0.0012
     SettlingMin: 0.9949
     SettlingMax: 0.9976
       Overshoot: 0
      Undershoot: 0
            Peak: 0.9976
        PeakTime: 0.0036
         SSError: 0.0024
       DelayTime: 0.000595

ZN1 Method

Variables

s = tf('s'); defines s as 'frequency domain' for transfer function and will be used further.

J = 0.01;
b = 0.1;
K = 0.01;
R = 1;
L = 0.5;

Those variable comes from BLDC control system.

tic
timeVal=tic;
[y,t] = step(motor);
h = mean(diff(t));
dy = gradient(y, h);                                            % Numerical Derivative
[~,idx] = max(dy);                                              % Index Of Maximum
b = [t([idx-1,idx+1]) ones(2,1)] \ y([idx-1,idx+1]);            % Regression Line Around Maximum Derivative
tv = [-b(2)/b(1); (1-b(2))/b(1)];                               % Independent Variable Range For Tangent Line Plot
f = [tv ones(2,1)] * b;                                         % Calculate Tangent Line

L = tv(1);
T = tv(2);

figure(1)
plot(t, y)
hold on
plot(tv, f, '-r')                                               % Tangent Line
plot(t(idx), y(idx), '.r')
title('Mencari tangent line plant ')% Maximum Vertical
hold off
grid

Process above is to find tangent line and L and T constant

After L and T constant is obtained, the values is used to obtained Kp, Ki, and Kd constant

control = tf(zeros(1,1,5));
sys=tf(zeros(1,1,5));
complete=tf(zeros(1,1,5));

% sistem dengan P
kp = T/L
control(:,:,1)= tf([0 kp 0],[1 0]);

% sistem dengan PI
kp = 0.9*T/L
Ti= L/0.3;
ki = kp/Ti
control(:,:,2)= tf([0 kp ki],[1 0]);

% sistem dengan PID
kp = 1.2*T/L
Ti= 2*L;
ki = kp/Ti
Td = 0.5*L;
kd = kp*Td
control(:,:,3)= tf([kd kp ki],[1 0]);

Testing

Tangent Line ZN1

tangentline

Step Response

stepzn

Ramp Response

rampzn

Impulse Response

impulsezn

Acceleration Response

acczn

Results

Elapsed time is 0.065802 - 0.455767 seconds.

Before ZN1-PID

        RiseTime: 1.0161
    SettlingTime: 1.8471
     SettlingMin: 0.0819
     SettlingMax: 0.0907
       Overshoot: 0
      Undershoot: 0
            Peak: 0.0907
        PeakTime: 3.0168
         SSError: 0.9095

After ZN1-PID

Control P: Kp = 140.9417 Control PI: Kp = 126.8475 ; Ki = 711.9513 Control PID: Kp = 169.13; Ki = 1.5821e+03; Kd = 4.5201

        RiseTime: 0.0676
    SettlingTime: 0.8486
     SettlingMin: 0.8129
     SettlingMax: 1.4349
       Overshoot: 43.4944
      Undershoot: 0
            Peak: 1.4349
        PeakTime: 0.17391
         SSError: -0.0021
       DelayTime: 0.0444

Notes

Contact nanda.r.d@mail.ugm.ac.id for more information

You can access the source code here github.com/nandard/control-system.git