.Implement PID in ode45 code
    26 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Kashish Pilyal
 il 16 Ago 2022
  
    
    
    
    
    Commentato: Steven Lord
    
      
 il 8 Ago 2024
            So, I have a ode45 function and I have an error defined in it which changes at different iterations of the solver. I was able to define the derivative part by just differentiating the error formula but  I am unable to implement the integral part. The error expression is:
, where q represents position and v represents velocity. Is it possible to get the PID part in the ode function.0 Commenti
Risposta accettata
  Sam Chak
      
      
 il 16 Ago 2022
        
      Modificato: Sam Chak
      
      
 il 17 Ago 2022
  
      If the error is defined as
then
P part is 
I part is 
D part is 
and you can arrange then in the state-space form. For example, a Double Integrator system
can be rewritten in state-space as:
.The PID has 3 terms, and the state-space is in differential form. So you have no issue with the P and the D part, because they are part of the state variables. The I part is in integral form, so you have to create an additional state variable. See Example below:
[t, x] = ode45(@DIsystem, [0 20], [0; 0; 0]);
plot(t, x(:,1), 'linewidth', 1.5)
grid on, xlabel('t'), ylabel('y(t)'), % ylim([-0.2 1.2])
function dxdt = DIsystem(t, x)
    dxdt    = zeros(3, 1);
    % construction of PID 
    r       = 1;                            % reference signal
    e       = x(1) - r;                     % error signal
    Kp      = 1 + sqrt(2);                  % proportional gain
    Ki      = 1;                            % integral gain
    Kd      = 1 + sqrt(2);                  % derivative gain
    u       = - Kp*e - Ki*x(3) - Kd*x(2);   % the PID thing
    % the dynamics
    A       = [0 1; 0 0];                   % state matrix
    B       = [0; 1];                       % input matrix
    dxdt(1:2) = A*[x(1); x(2)] + B*u;       % the Double Integrator system
    dxdt(3) = e;                            % for integral action in PID
end
5 Commenti
  Banaan Kiamanesh
 il 8 Ago 2024
				This is not right.
You are assuming that the derivative of the reference signal is 0 which is correct in this particular case. But what if it is not?
The main question in here is that how can we do differentiation in ode functions when we dont have any access to the data from previous iterations.
It is possible beacuse it is being done in simulink models. but I'm not sure how in MATLAB... :/
  Steven Lord
    
      
 il 8 Ago 2024
				The main question in here is that how can we do differentiation in ode functions when we dont have any access to the data from previous iterations.
If your differential equation requires historical information about the solution from earlier times as part of evaluating the solution at the current time, you don't have an ordinary differential equation (ODE). You have a delay differential equation (DDE). There are three solvers in MATLAB for solving DDEs listed on this page: dde23, ddesd, and ddensd.
Più risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
