MATLAB Answers

0

Numeric answer for PID command

Asked by Mohsina Zafar on 3 Jul 2019
Latest activity Commented on by Jon
on 8 Jul 2019
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)
T_u=T_e*C
end
Kindly help me in this regard.

  0 Comments

Sign in to comment.

Products


Release

R2016a

1 Answer

Answer by Jon
on 3 Jul 2019
 Accepted 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);

  3 Comments

Thanks. Exactly what I needed.
After this, I want to simulate a motor model but its output is not consistent with the input:
load('Motor_Param.mat')
a = sim('Motor_Control','SimulationMode','normal');
out = a.get('T_l')
Jon
on 8 Jul 2019
I'm glad that you are now able to use the pid function successfully. Regarding your question on the motor control simulation. I did try to replicate your problem, but I could not find the variable T_u in your .mat file, and it is needed for the simulation to run. In any case, I would suggest opening this as a new question, as it is a new topic.

Sign in to comment.