MATLAB: Numeric answer for PID command


I used a Simulink PD model and used values:
P=100; D=10; N=100
The input I am giving is
[0;0;0]-[0.05*(10-t);0.04*(10-t);0.03*(10-t)] where t=1:10
I get numeric values from the simulation.
I am trying to implement the same in script file but I get answer in transfer function format. I want the answer to be in numeric form like that from Simulink, Here is my MATLab code:
for t = 1:10
T_d = [0;0;0];
T_o = [0.05*(10-t);0.04*(10-t);0.03*(10-t)];
T_e = T_d-T_o;
C = pid(100,0,10,100)
Kindly help me in this regard.

Best Answer

  • In order to simulate the time response of a system using the MATLAB control system toolbox you can use the lsim function. Note it is not valid to multiply a transfer function by a time domain signal as you have done in your code.
    I made an example following what I think you were trying to accomplish below
    % define time domain reference (setpoint), measured output, and error
    % signals
    % signals must have a row for each time value and a column for each channel
    t = 0:10; % start at initial time equal to zero continue to 10
    T_d = [0 0 0];
    T_o = [0.05*(10-t);0.04*(10-t);0.03*(10-t)]'; % note transpose, columns of T_o are channels
    T_e = T_d-T_o;
    % define PID controller parameters
    Kp = 100; % proportional gain
    Ki = 0; % integral gain
    Kd = 10; % derivative gain
    Tf = 100; % filter time constant
    c = pid(Kp,Ki,Kd,Tf); % individual pid controller
    C = [c 0 0;0 c 0;0 0 c]; % identical pid controllers for each channel
    % simulate response of pid controller to error signal
    T_u = lsim(C,T_e,t);