# Simulink Difference Equation Implementation

55 visualizaciones (últimos 30 días)
Sezer Memis el 15 de Dic. de 2020
Comentada: Sezer Memis el 22 de Dic. de 2020
I have a homework(a). My professor ask me for implement a discrete pid controller in difference equation form to matlab function. This function block should run as a discrete pid controller block in simulink model(b). When simulation began, the Matlab function block is executed once. Because of for loop an array occurs. Then that array signal goes the plant. And this is not usefull. During the simulation what i want is every iteration of for loop gives a value and that value must go to plant. But i could not do this. The same issue happened previous homework(c). I don't even know whether this way is proper or not.
##### 4 comentariosMostrar 2 comentarios más antiguosOcultar 2 comentarios más antiguos
Walter Roberson el 20 de Dic. de 2020
If you are using a discrete system then use https://www.mathworks.com/help/simulink/slref/memory.html memory block.
If you are using a continuous system, then you would have difficulty implementing something like the trapazoid rule.
Paul el 20 de Dic. de 2020
Hard to say how to make the two equivalent without knowing exactly what's inside the block C(s)1.

Iniciar sesión para comentar.

Paul el 20 de Dic. de 2020
Maybe this example will help, which essentially illustrates the comment made by Alvery.
Consider a plant P(s) = 1/(s + 5) that is controlled via PI compensation with Ki = Kp = 1. The sample time of the discrete control is Ts = 0.01, with Ts defined as such in the base workspace. This system is modeled in the top half of this diagram, where the sample time parameter for the Zero Order Hold and Discrete Time Integrator blocks is set to Ts.
Now we wish to implement the PI control in a Matlab Function block as in the boltom half of the diagram. We have the following equation for the control input:
u[k] = x[k] + Kp*e[k] % Kp = 1
The difference equation for x[k] is determined from the z-transform of the integrator:
X(z)/E(z) = Ki*Ts/(z-1) % Ki = 1
(z-1)*X(z) = Ki*Ts*E(z)
x[k+1] - x[k] = Ki*Ts*e[k]
x[k+1] = Ki*Ts*e[k] + x[k]
so the PI function needs to impement the equations for u[k] and x[k]. Here's the function
function u = PI(e)
persistent x
% initialize the integrator output
if isempty(x)
x = 0;
end
Kp = 1;
Ki = 1;
Ts = 0.01; % needs to be same value as Ts defined in the workspace
% control at the current time step
u = Kp*e + x;
% update the integrator for the next time step
x = Ki*Ts*e + x;
end
And here is the scope from the model showing that the implementation works as expected:
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Sezer Memis el 22 de Dic. de 2020
Thank you so much. It works well. You are great!

Iniciar sesión para comentar.

### Categorías

Más información sobre Tuning, Analysis, and Validation en Help Center y File Exchange.

R2020a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by