Simulink Constant Ramp Controller
    13 views (last 30 days)
  
       Show older comments
    
    Alexander Reiter
 on 6 Jul 2023
  
    
    
    
    
    Commented: Alexander Reiter
 on 7 Jul 2023
            Hi all,
In order to explain my problem, I've attached a Simulink model to this post. It consists of a classic PID control loop which calculates the response of the system to a signal step at the input. What I am looking for is a controller to replace the PID, which guarantees a constant slope over the entire step response, ideally without any remaining controll error. I've already tried different approaches, none of them seem to work reliably. Any ideas?:)
Cheers
Alex
2 Comments
  Nikhil
      
 on 6 Jul 2023
				Can you explain what you mean by ' a constant slope over the entire step response ' ?
Accepted Answer
  Sam Chak
      
      
 on 6 Jul 2023
        I didn't check the Simulink model. However, the desired response can be achieved with a nonlinear controller. See example below.
tspan  = linspace(0, 4, 10001);
x0     = 0;
opts   = odeset('RelTol', 1e-12, 'AbsTol', 1e-9);
[t, x] = ode45(@odefcn, tspan, x0, opts);
% Solution Plot
plot(t, x, 'linewidth', 1.5), hold on,
plot(t, heaviside(t - 1), 'r--'), grid on, 
xlabel('t'), ylabel('x(t)')
legend('output', 'input', 'location', 'east')
function xdot = odefcn(t, x)
    k    = 1;                       % parameter that determines the strength of u
    g    = 1000;                    % parameter that determines steepness of u
    ref  = heaviside(t - 1);        % reference input to be tracked
    % controller
    u    = - k*tanh(g*(x - ref));   % nonlinear controller
    % system
    xdot = u;       % equivalent to the plant transfer function, Gp(s) = 1/s
end
More Answers (1)
  Nikhil
      
 on 6 Jul 2023
        
      Edited: Nikhil
      
 on 6 Jul 2023
  
      Yes, It helps. You can derive the transfer function for the controller since you know the transfer function for the system and the desired output from the equation:

where Y(s) is the output, which would be   for a signal of constant slope m,
  for a signal of constant slope m,
 for a signal of constant slope m,
  for a signal of constant slope m,    G(s) is C(s)*P(s), where P(s) is the system tranfer function, which in your case is   as your system is an integrator,
  as your system is an integrator,
 as your system is an integrator,
  as your system is an integrator,    H(s) is the feedback transfer function, which is 1,
    U(s) is the input signal, which would be   for the case of a step input.
 for the case of a step input.
 for the case of a step input.
 for the case of a step input.The controller transfer function would then turn out to be 

You can then use a Transfer Function block to implement the controller.
3 Comments
  Nikhil
      
 on 6 Jul 2023
				You can limit the output of the integrator block by enabling Limit output option.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



