Spindle orient PID tuning [re-solved, yay]

More
12 Jun 2022 04:19 #244970 by spumco
PCW - thanks for giving this some thought.

I'm happy to trial a different config, but I'm at a loss regarding "add orient velocity and acceleration constraints"

I posted a non-lincurve setup earlier in this thread that was kind-of working(ish).  Do you have an example of a 'standard' orient config with some suggested values?

Pretty much need my hand held through this one.
 

Please Log in or Create an account to join the conversation.

More
12 Jun 2022 04:33 - 12 Jun 2022 04:35 #244971 by PCW
I think the main issue using a PID to control a VFD for position control
is that the VFD is quite slow to react so feedback control is difficult,

Control should be improved with feed-forward (specifically FF1 =1 since the VFD
should have a linear and predictable speed vs command relation)
but effective feed-forward requires a actual motion profile not just a step in position

A limit2 component after the orient component would constrain the velocity and acceleration. but would likely need to be bypassed when not doing the final orient move (The limit 2 component would do the move from the random
start position to the orient position)
Last edit: 12 Jun 2022 04:35 by PCW.

Please Log in or Create an account to join the conversation.

More
12 Jun 2022 05:19 #244972 by spumco

I think the main issue using a PID to control a VFD for position control
is that the VFD is quite slow to react so feedback control is difficult,

Control should be improved with feed-forward (specifically FF1 =1 since the VFD
should have a linear and predictable speed vs command relation)
but effective feed-forward requires a actual motion profile not just a step in position

A limit2 component after the orient component would constrain the velocity and acceleration. but would likely need to be bypassed when not doing the final orient move (The limit 2 component would do the move from the random
start position to the orient position)
 


I understand the first part.

Don't understand your second part.  I have yet to wrap my brain around feed forward, despite reading multiple explanations.

And limit2 goes between orient.0.command and pid.o.command, or between pid.o.output and mux2.0.in? (mux is used for spindle or orient)

I'm reading the MAN page on limit2, but I don't really get the limit2.N.load pin.  Is that a 'bypass' switch of sorts?

How do I bypass the limit2 after the move from random start?

Suggestions on limit2.N.min, .max, and .maxv?

Please Log in or Create an account to join the conversation.

More
12 Jun 2022 07:33 #244977 by robertspark
yes,
limit2.N.load
is a bypass / function ignore "pass through" pin

I am not sure when (what criteria) would toggle this

maybe a near component (it will stop the wiggle)

linuxcnc.org/docs/devel/html/man/man9/near.9.html

(following this with some interest but no knowledge .... so take the above regarding the "near" as maybe wrong!)

Please Log in or Create an account to join the conversation.

More
12 Jun 2022 15:31 #245003 by spumco
Thanks Robert.  While I'm waiting for PCW to get back I'll have a go with it - without the lincurve & limit2 - and see how it behaves with FF1 = ?

What's the worst that could happen?

Please Log in or Create an account to join the conversation.

More
12 Jun 2022 15:37 #245004 by PCW
FF1 will not work with step inputs to the PID (as the orient component outputs currently)

Please Log in or Create an account to join the conversation.

More
12 Jun 2022 16:02 - 12 Jun 2022 16:14 #245007 by spumco

FF1 will not work with step inputs to the PID (as the orient component outputs currently)
 

 

 

Ok, I need a limit2 in between pin.N.something and pin.N.something-else.

And the limit2 needs some max, min, and maxv values.

And something to turn on/off the limit2 at some condition.

If I get a mostly working config I can eventually digest how the parts are working together, but since I don't know where to start I'm kind of stuck without an actual example.  I'm still at the monkey-see, monkey-do stage with this sort of thing.

EDIT  how does this look?

net orient-command   <= orient.0.command
net orient-command   => limit2.0.in
net orient-command-limit   <= limit2.0.out
net orient-command-limit   => pid.0.command
net orient-limit-switch  <= pin.0.mystery
net orient-limit-switch  => limit2.0.load

setp limit2.0.min   = ???
setp limit2.0.max  = ???
setp limit2.0.maxv = ???
Last edit: 12 Jun 2022 16:14 by spumco. Reason: wild guess

Please Log in or Create an account to join the conversation.

More
12 Jun 2022 16:18 - 12 Jun 2022 16:18 #245009 by PCW
Basically what you want is for the orient motion to be a simple trapezoidal motion profile
so that even without any feedback, (and mainly just feed-forward) you end up at
approximately the right endpoint. This means, much less is asked of the feedback
so you don't need as high gains and the integral term will not get a massive windup
as you get with a step motion command.
Last edit: 12 Jun 2022 16:18 by PCW.

Please Log in or Create an account to join the conversation.

More
12 Jun 2022 16:24 #245010 by spumco
Thanks for the explanation, that was rather helpful understanding the goal and process.

Unfortunately, without details or starting values I'm not able to accomplish this.

Please Log in or Create an account to join the conversation.

More
13 Jun 2022 00:40 #245041 by PCW
Actually limit3 is needed
Starting values for the bounds should be pretty easy to set
maxv is in RPS and maxa is in RPS/S

Please Log in or Create an account to join the conversation.

Time to create page: 0.089 seconds
Powered by Kunena Forum