Adaptive PID controller implementation

Click For Summary

Discussion Overview

The discussion revolves around the implementation of an adaptive PID controller based on a paper utilizing the Takagi-Sugeno fuzzy system. Participants are addressing issues related to the control signal behavior and tracking performance of the system.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant reports that the control signal "blows up" immediately, indicating that the reference signal is not being tracked as expected.
  • Another participant requests clarification on what is meant by "blows up," asking for more details and screenshots.
  • A participant suggests that the initial values for the proportional and integral gains should not be set to zero and proposes using the Zeiger-Nichols method for setting initial values.
  • There is a suggestion to set the derivative gain to zero and to first get the non-adaptive part of the controller working before adding the adaptive component.
  • Participants ask for screenshots of the code and model to better understand the implementation issues.

Areas of Agreement / Disagreement

Participants express differing views on the initial settings of the PID controller parameters and the approach to troubleshooting the implementation. There is no consensus on the best way to resolve the issues presented.

Contextual Notes

Participants have noted the need for more detailed information regarding the simulation setup and the specific behavior of the control system. There are unresolved questions about the initial conditions and the adaptive mechanism's implementation.

Who May Find This Useful

Individuals interested in control systems, particularly those working with adaptive PID controllers and fuzzy logic implementations, may find this discussion relevant.

zoom1
Messages
63
Reaction score
0
Hello,

I am trying to implement a simple adaptive PID controller paper. However, I am having some problems which I could not find out due to what..

Paper is the following;
http://www.aedie.org/9CHLIE-paper-send/337_CHAINHO.pdf

Quite simple. Using the Tagaki-Sugeno fuzzy system, in accordance with the error percentage, P and I parameters are adjusted. I implemented everything conforming to the paper. However, my control signal blows up immediately.

I have been looking for days where I am doing wrong but could not find any mistake.

I would really appreciate if you check the simulation files and make comments.

Attached the simulation files.
P.S. initialize.m must be run before running the simulink model.

Thank you.
 

Attachments

Engineering news on Phys.org
what do you mean by your control system blows up. please provide screen shots or a more detailed explanation
 
donpacino said:
what do you mean by your control system blows up. please provide screen shots or a more detailed explanation

Hello,

What I mean is, given reference signal is not tracked as expected.

Here is the reference signal. Just a square wave.
in.png


And the output of the plant as the response (I just limited it to 1 second, it goes with the same fashion up to 10 seconds)
out.png


So the tracking is way out of the reference signal.
 
post a screenshot of your code and the model
 
donpacino said:
post a screenshot of your code and the model

All the files related to simulation were already attached my first post but anyways here's the screenshot of the model

model.png


Here's the function that runs inside the interpreted MATLAB function block

function [out] = fuzzy(input)

global Kp
global Ki
global v
global nu

if input(1) >= 4 | input(1) <= -4
Kp = Kp + v*input(2)*nu;

elseif (input(1) >= 1 & input(1) < 4) | (input(1) <= -1 & input(1) > -4)
Ki = Ki + v*input(2)*nu;
end

out(1) = Kp;
out(2) = Ki;

end

And those are the initializations;

global Kp
global Ki
global v
global nu

Kp = 0;
Ki = 0;
v = 0.5;
nu = 0.5;
 
Why do you set the derivative gain to 1? try setting it to zero
also you initial values for your P and I values should not be zero.

try using zeiger-nicolas to set the initial values, and strip the adaptive part.
once you get that working, add the adaptive portion
 

Similar threads

  • · Replies 10 ·
Replies
10
Views
4K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 8 ·
Replies
8
Views
8K
  • · Replies 16 ·
Replies
16
Views
5K
Replies
13
Views
5K
  • · Replies 5 ·
Replies
5
Views
3K
Replies
9
Views
3K
Replies
6
Views
2K
  • · Replies 5 ·
Replies
5
Views
6K
Replies
2
Views
2K