-
Notifications
You must be signed in to change notification settings - Fork 2
Add Integrator Anti-Windup Article #90
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
elsevers
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you @noguchi-takahiro! Nice job -- and I can see a lot of work went into this. I compared notes with @npetersen2 and typed up some feedback on your article here. Our consensus is that this is close, but we want to adjust the perspective a bit, which will have you remove some content and then adjust your structure.
Feedback:
- Framing the article: The main purpose is explaining to people that you need to simulate realistic scenarios of windup and antiwindup performance because there is not a perfect solution. It depends on how long you are in windup, how extreme it is, etc.
- Can’t really have perfect anti-windup, need to have simulations to investigate specific scenarios that you expect to encounter
- Pick an abstract, simple first order plant to use as an example as you develop the techniques
- Plant: 1/(s+1), Controller: PI (kp + ki/s) (pick a tuning to give a first order response with a bandwidth of 10 Hz).
- Comment on how this example could be viewed as a voltage (input) and current (output) for an RL load, torque (input) and speed (output), or heat (input) and temperature (output)
- It is nice that you show a universal block diagram, with an anti-windup block that gets populated with different contents for clamping and back stepping. Let's have you revise those clamping and back stepping diagrams to make it more clear that they are showing the contents of this block. We suggest to put a box around these with input and output ports clearly labeled that match your universal diagram

- Only discuss and develop continuous time techniques. We will plan to add the discrete time implementation later, as part
Applicationarticles, such as the planned discrete time CVCR article. - As the article progresses, take the following structure:
- demonstrate the PI controller and plant with no anti-windup and show the types issues of issues that an engineer will encounter
- discuss and show example with both command and disturbance induced anti-windup
- Then introduce a simple version of clamping that simply stops integrating when preSat != postSat.
- Show plots with multiple traces: original and simple clamped response, again for both command and disturbance induced anti-windup
- Then introduce an advanced version of clamping (the block diagram and description that you currently are showing).
- Show plots with multiple traces: original, simple clamped response, advanced clamped
- Make sure you have a case in your example that showcases the advanced version working better and comment on that (this needs to be sufficiently compelling to motivate your reader to go through the effort to implement the more advanced version)
- Then introduce back stepping
- Show plots with multiple traces: original, advanced clamped response, back stepping
- Discuss how you pick Kb. The choice of picking Kb is very nuanced and depends on the type of event that you are handling. If you make a poor choice for Kb, clamping will actually be better.
- This article should help the reader understand this nuance and that in some cases clamping is a better choice.
- Show a results plot for where you come up with a Kb value that works really well for the example system + command tracking/disturbances. Now, keep the same plant and same controller and Kb value, but change your command or disturbances so that the backtracking now yields inferior results as compared to clamping.
- demonstrate the PI controller and plant with no anti-windup and show the types issues of issues that an engineer will encounter
Thanks @noguchi-takahiro!! I'm happy to set up a meeting to discuss if that would be helpful.
|
Thank you for your feedback @elsevers @npetersen2 . I have a question about item 5,
Does the disturbance here mean that I need to add the disturbance voltage between the controller and plant? |
The answer is yes, but this brings up an important point. So it is confusing when you think about this in terms of current regulation, right? Like... why is there a disturbance voltage? What is the physical basis for this? This is part of the reason for point 2:
So we're thinking you should just have this be an abstract first order system, that you occasionally relate back to a real system. If this first order system represents torque and speed, you can more easily imagine how you'd have a torque disturbance from your load, right? |
|
Thank you @elsevers. I am trying to make the abstract, simple Simulink model based your comment. I have some updates and question about the item 2 and the simulation results.
Here is the updated Simulink model that demonstrates the simple example; The plant model has a transfer function of Here are results of the responses. where the command is set as 1 at the time of 0.2 sec. You can see the overshoot is improved in the case of the with anti-windup. I think these results are reasonable for me. Next, I wanted to try inject the disturbance of a pulse to see what would happen. The disturbance pulse has the amplitude of 1 during 0.1 second as shown in the figure below. where the command is set as 0 for this simulation. Note that the simple clamping is activated in this simulation. However, the anti-windup is not so effective this time as the manipulated value is no longer saturated. If we want to see the effectiveness of the anti-windup with the disturbance, could I just increase the disturbance so that the windup occurs? Is there any robust simulation scenario that can help determine the relationship between disturbance and anti-windup? Or is this the right way that I should take here in the first place? |
|
Thanks @noguchi-takahiro. It looks like you are on the right track here. In regards to your question, I think you do want to increase your disturbance so that your regulator saturates. @npetersen2, please chime in if you have further thoughts on this. |
|
Nice work @noguchi-takahiro For the disturbance-induced wind-up, I believe the disturbance input must be larger than the saturation value of the actuator to see any issue. So, since you saturated to Think of this like a position regulation system where you are commanding a force and the state you are regulating is position. The saturation is on the force you can create (e.g., due to current limits or thermal limits, etc). For example, +/- 10 N. But then a user applies a 15 N disturbance with a hammer. You cannot regulate the position during this transient since it saturates, however, we are interested to see the transient response when the disturbance ends. |
|
Thank you your comments @elsevers and @npetersen2! I got two questions this time about the item 5-iii and 5-iv addressing item 5-iiiAs I understand, I need to come up with a simulation scenario in which the advanced clamping produces a better result. Here is an example simulation I implemented this time, where the command of 1 is issued at 0.2 sec, and of -4 is issued at 1 sec. The figures below are expanded versions around the time 0.2 and 1.5 sec, respectively. (b) 1.5 sec It looks like the simple clamping (blue) and the advanced clamping (dashed cyan) are a complete match. But we want to separate them, i.e., get the advanced clamping better... When the process of the advanced clamping was done, the integration was stopped only if BOTH conditions below were satisfied.
I think if condition 1 is satisfied and the I-controller stops the integration, it is equivalent to simple clamping. So, I needed to come up with a situation that satisfies condition 2 to compare the simple and the advanced clamping. My question is, when are the sign of error and the present not equal? I tried several scenarios, changing the command waveforms, but these methods were equal, i.e., I could not find a nice scenario and compare them. For your information, I referred to this advanced clamping method from these resources:
addressing item 5-ivThis is similar to the previous question, but how can we come up with the scenario that the clamping method is better than the back-tracking by just modifying the command/disturbance? If I command the issue of 1 at 0.2 sec, it looks like the back-tracking method is better than clamping (see the previous results), whereas if I inject the disturbance of 15 for 0.1 sec, the clamping is better around the transient response, as shown below. I guess this is not always true, depending on the back-tracking gain of I would be glad if you could give me your thought here. |
|
Good discussion and thoughts @noguchi-takahiro , interesting. I have a feeling that the scenario which will help show the differences in these methods for anti-windup is a "fast" transient from positive windup, to negative windup, back to positive. Let me give an example: Imagine a position tracking system holding the position to 0. The max control effort is saturated to 10. Then, a user applies a +15 disturbance for 1 second, then immediately applies a -15 disturbance for 0.5 sec, then back to +15, then 0. I think this "slamming" of the system will help show the differences in the anti-windup approaches. What do you think? |
|
Thank you for your feedback @npetersen2 @elsevers . I am still trying to address your comment, but could you check if my Simulink model is properly implemented when you have a time? I temporary added the MATLAB script main.m to run the Simulink file. |
|
Thanks @noguchi-takahiro , I will try to take a look at this soon. |
|
Also, a very interesting approach for anti-wind-up is presented in this article: https://ieeexplore.ieee.org/document/8279496 I do not suggest you add this to your article right now, but eventually, it would be nice to explore this approach and use it. It looks quite nice and useful! |
|
Hey @noguchi-takahiro , I see this Simulink model was created in Unfortunately, I only have |
|
Thank you @npetersen2. I hope the Simulink model was saved as the earlier version |
|
I am commenting here to archive some Slack conversations I have had with @noguchi-takahiro about this: I have been investigating the anti-windup methods via your simulation, specifically the "advanced" and the "simple" clamping methods I believe you found they behaved the same way... so no reason to use the advanced method when the simple method works well I finally managed to find a contrived example when they do NOT behave the same, where I believe the advanced method works better
the first time the controller set point goes below the output point, it triggers the advanced method to NOT clamp the integrator, while the simple method stays clamped. This causes the advanced method to un-windup in a good way, where the simple one cannot. So, from this point onward, the advanced method behaves better HOWEVER this only occurs if the for typical so, my summary:
if you run this, it should output the figure above: sim_files.zip |
|
Thanks @npetersen2 and @noguchi-takahiro, I am wondering what the next steps on the advanced vs simple clamping method. The current request we have from here is:
I suggest that we modify this plan slightly to be as follows:
|
|
Thank you @mhmokhtarabadi for your helpful feedback. I addressed your feedback and modify the article entirely. Could you review this article thoroughly and share your thought? |
Daehoon-Sung
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Are all files under 300 kB (if not, please carefully assess whether it is worth committing them)? Yes
- Are all files named according to the appropriate naming convention, i.e., dash-case, camelCase, snake case? Yes
- Do all Markdown files follow the CONTRIBUTING article template? Yes
- Do all links work in the material that the PR is adding? Yes
- Is the PR configured to close the correct issue(s)? Yes
- Did the PR fully address the
Approachsection of the issue(s) it is closing? Yes
Please work on addressing any No items.
|
Hello @noguchi-takahiro. I reviewed and approved this PR. Please note that I edited the Approach section to close the related issue. Thanks. Could you review this Professor @elsevers ? |
|
@elsevers can you review this PR? |
|
Hello, Professoe @elsevers, @noguchi-takahiro, @mhmokhtarabadi. Can we sync up together during today's office hour, after the lab hour, to complete this article? |













This is to close #142.
I made a draft of an integrator anti-windup section in docs.AMDC, especially control-with-amdc.
The article draft is available anti-windup_draft.pdf and source of the article is here.
The contents include:
Please review this and feel free to give me feedback. Major and minor changes or proofreading are welcome.