2.8/2.9 PID seems broken?
14 Dec 2019 18:04 #152659
by 3D-Master
2.8/2.9 PID seems broken? was created by 3D-Master
Hello,
i have updated from 2.7.14 to 2.8/2.9 but then my servo generated a huge following error. I control it using PWM and DIR signals and have a encoder directly wired to my 7i52s.
these were my PID parameters in 2.7.14 which were not perfect but okay:
P = 7.5
I = 12.5
D = 0.2325
FF0 = 0
FF1 = 0.25
FF2 = 0
i had approx 0.01-0.02mm following error but when i updated to 2.8/2.9 the following error increased to at least a millimeter (maximum following error for feed moves, not rapid)
i can change ff1 to 1 as well as 1000 but nothing changes so i think there is something broken. The automatically changed ini and hal files dont seem to have a mistake.
Is this ini entry correct?
if i delete "MAX_VELOCITY = 166.666667" and "MAX_ACCELERATION = 1000.0" from joint then the homing is way slower and the axis can have a following error greater than MIN_FERROR but linuxcnc wont go into estop.
i have updated from 2.7.14 to 2.8/2.9 but then my servo generated a huge following error. I control it using PWM and DIR signals and have a encoder directly wired to my 7i52s.
these were my PID parameters in 2.7.14 which were not perfect but okay:
P = 7.5
I = 12.5
D = 0.2325
FF0 = 0
FF1 = 0.25
FF2 = 0
i had approx 0.01-0.02mm following error but when i updated to 2.8/2.9 the following error increased to at least a millimeter (maximum following error for feed moves, not rapid)
i can change ff1 to 1 as well as 1000 but nothing changes so i think there is something broken. The automatically changed ini and hal files dont seem to have a mistake.
Is this ini entry correct?
#********************
# Axis Z
#********************
[AXIS_Z]
MIN_LIMIT = -200.0
MAX_LIMIT = 200
MAX_VELOCITY = 166.666667
MAX_ACCELERATION = 1000.0
[JOINT_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 4.0
MIN_FERROR = 1
MAX_VELOCITY = 166.666667
MAX_ACCELERATION = 1000.0
P = 15
I = 15
D = 0.02
FF0 = 0
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0.0025
MAX_OUTPUT = 0
ENCODER_SCALE = 512
OUTPUT_SCALE = 10
MIN_LIMIT = -200.0
MAX_LIMIT = 200
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 5
HOME_USE_INDEX = YES
HOME_SEQUENCE = 0
if i delete "MAX_VELOCITY = 166.666667" and "MAX_ACCELERATION = 1000.0" from joint then the homing is way slower and the axis can have a following error greater than MIN_FERROR but linuxcnc wont go into estop.
Please Log in or Create an account to join the conversation.
14 Dec 2019 20:16 #152660
by PCW
Replied by PCW on topic 2.8/2.9 PID seems broken?
2.8+ and 2.9 have a bug fix in the PID component.
Previous versions always calculated the FF1 term from
and internal derivative even if the command derivative pin
was connected. The version in 2.8+ and 2.9 does use the
externally supplied command derivative. For whatever
reason, the joint velocity does not match the old calculated
command derivative (I suspect 1 servo thread time difference)
If you want the old behaviour, disconnect the PIDs command derivative
pins and FF1 will be calculated the same way as 2.6..2.8+
Previous versions always calculated the FF1 term from
and internal derivative even if the command derivative pin
was connected. The version in 2.8+ and 2.9 does use the
externally supplied command derivative. For whatever
reason, the joint velocity does not match the old calculated
command derivative (I suspect 1 servo thread time difference)
If you want the old behaviour, disconnect the PIDs command derivative
pins and FF1 will be calculated the same way as 2.6..2.8+
The following user(s) said Thank You: andypugh
Please Log in or Create an account to join the conversation.
18 Jan 2020 16:49 #155103
by 3D-Master
Replied by 3D-Master on topic 2.8/2.9 PID seems broken?
But why is it, that when i change FF1 nothing happens?
Please Log in or Create an account to join the conversation.
18 Jan 2020 17:02 #155104
by PCW
Replied by PCW on topic 2.8/2.9 PID seems broken?
Did you comment out any statement like:
net x-vel-cmd => pid.x.command-deriv
Notice if you just dont connect net x-vel-cmd to
encoder velocity but leave the pid.x.command-deriv
connected to a signal (as shown above)
you will have a fixed 0 FF1
net x-vel-cmd => pid.x.command-deriv
Notice if you just dont connect net x-vel-cmd to
encoder velocity but leave the pid.x.command-deriv
connected to a signal (as shown above)
you will have a fixed 0 FF1
Please Log in or Create an account to join the conversation.
- papagno-source
- Offline
- Senior Member
Less
More
- Posts: 72
- Thank you received: 2
19 Jan 2020 18:25 #155169
by papagno-source
Replied by papagno-source on topic 2.8/2.9 PID seems broken?
I use 2.9 and have this situation :
loadrt hostmot2
loadrt [HOSTMOT2](DRIVER) config=[HOSTMOT2](CONFIG)
setp hm2_5i20.0.pwmgen.pdm_frequency 6000000
setp hm2_5i20.0.encoder.04.counter-mode 0
setp hm2_5i20.0.encoder.04.filter 1
setp hm2_5i20.0.encoder.04.index-invert 0
setp hm2_5i20.0.encoder.04.index-mask 0
setp hm2_5i20.0.encoder.04.index-mask-invert 0
setp hm2_5i20.0.encoder.04.scale [JOINT_4]INPUT_SCALE
net motor.04.pos-fb hm2_5i20.0.encoder.04.position pid.4.feedback mux2.9.in0
net motor.04.pos-fbout mux2.9.out joint.4.motor-pos-fb
net Bindex-enable hm2_5i20.0.encoder.04.index-enable joint.4.index-enable pid.4.index-enable
net encodervelocityb pid.4.feedback-deriv hm2_5i20.0.encoder.04.velocity
setp hm2_5i20.0.pwmgen.04.output-type 3
setp hm2_5i20.0.pwmgen.04.scale [JOINT_4]OUTPUT_SCALE
net emcmot.04.pos-cmd joint.4.motor-pos-cmd pid.4.command
i add command derive for 2.9 ?
this is correct for 2.9 : net encodervelocityb pid.4.feedback-deriv hm2_5i20.0.encoder.04.velocity ?
loadrt hostmot2
loadrt [HOSTMOT2](DRIVER) config=[HOSTMOT2](CONFIG)
setp hm2_5i20.0.pwmgen.pdm_frequency 6000000
setp hm2_5i20.0.encoder.04.counter-mode 0
setp hm2_5i20.0.encoder.04.filter 1
setp hm2_5i20.0.encoder.04.index-invert 0
setp hm2_5i20.0.encoder.04.index-mask 0
setp hm2_5i20.0.encoder.04.index-mask-invert 0
setp hm2_5i20.0.encoder.04.scale [JOINT_4]INPUT_SCALE
net motor.04.pos-fb hm2_5i20.0.encoder.04.position pid.4.feedback mux2.9.in0
net motor.04.pos-fbout mux2.9.out joint.4.motor-pos-fb
net Bindex-enable hm2_5i20.0.encoder.04.index-enable joint.4.index-enable pid.4.index-enable
net encodervelocityb pid.4.feedback-deriv hm2_5i20.0.encoder.04.velocity
setp hm2_5i20.0.pwmgen.04.output-type 3
setp hm2_5i20.0.pwmgen.04.scale [JOINT_4]OUTPUT_SCALE
net emcmot.04.pos-cmd joint.4.motor-pos-cmd pid.4.command
i add command derive for 2.9 ?
this is correct for 2.9 : net encodervelocityb pid.4.feedback-deriv hm2_5i20.0.encoder.04.velocity ?
Please Log in or Create an account to join the conversation.
19 Jan 2020 19:33 #155177
by PCW
Replied by PCW on topic 2.8/2.9 PID seems broken?
Yes fb-deriv is OK
dont connect the pid command-deriv pin
dont connect the pid command-deriv pin
Please Log in or Create an account to join the conversation.
- papagno-source
- Offline
- Senior Member
Less
More
- Posts: 72
- Thank you received: 2
19 Jan 2020 20:57 #155195
by papagno-source
Replied by papagno-source on topic 2.8/2.9 PID seems broken?
Hi.
When use fb-deriv , not use command-deriv in 2.9 ?
Because ?
But in 2.9 i write : setp pid.x.error-previous-target true or not important ?
When use fb-deriv , not use command-deriv in 2.9 ?
Because ?
But in 2.9 i write : setp pid.x.error-previous-target true or not important ?
Please Log in or Create an account to join the conversation.
19 Jan 2020 22:21 - 19 Jan 2020 22:23 #155202
by PCW
Replied by PCW on topic 2.8/2.9 PID seems broken?
Some background:
The PID component has a little magic it uses for both feedback and commanded
derivative terms (D*fb-deriv and FF1*cmd-deriv) If these PID component pins are not
connected (not linked to a signal) the PID component calculates these derivatives internally.
You should always use the PIDs fb-deriv pin if you need D term in your PID tuning.
The reason to use it is that the encoders velocity estimation is better than just dfb/dt
which is used by the PID component if the fb-deriv pin is not connected.
The PID component had a long standing bug where it ignored the command-deriv pin.
This was fixed sometime ago in the 2.8 branch, allowing the PIDs command-deriv
pin to be connected to the trajectory planners velocity pin but unfortunately the way
the PID calculates the derivative and the trajectory planners velocity pin are not the
same ( there's a 1 servo cycle delay between them ) Because of this, if you wish to
retain the previous behaviour and tuning, its best to leave the PIDs command-deriv
pin unconnected (not connect to any signal)
You should in general always setp pid.x.error-previous-target true
regardless of version
The PID component has a little magic it uses for both feedback and commanded
derivative terms (D*fb-deriv and FF1*cmd-deriv) If these PID component pins are not
connected (not linked to a signal) the PID component calculates these derivatives internally.
You should always use the PIDs fb-deriv pin if you need D term in your PID tuning.
The reason to use it is that the encoders velocity estimation is better than just dfb/dt
which is used by the PID component if the fb-deriv pin is not connected.
The PID component had a long standing bug where it ignored the command-deriv pin.
This was fixed sometime ago in the 2.8 branch, allowing the PIDs command-deriv
pin to be connected to the trajectory planners velocity pin but unfortunately the way
the PID calculates the derivative and the trajectory planners velocity pin are not the
same ( there's a 1 servo cycle delay between them ) Because of this, if you wish to
retain the previous behaviour and tuning, its best to leave the PIDs command-deriv
pin unconnected (not connect to any signal)
You should in general always setp pid.x.error-previous-target true
regardless of version
Last edit: 19 Jan 2020 22:23 by PCW.
The following user(s) said Thank You: Dbsharp
Please Log in or Create an account to join the conversation.
- papagno-source
- Offline
- Senior Member
Less
More
- Posts: 72
- Thank you received: 2
26 Jan 2020 12:13 - 26 Jan 2020 17:27 #155791
by papagno-source
Replied by papagno-source on topic 2.8/2.9 PID seems broken?
Hi.
I don't use D part for PID, but only P and FF1 part .
I use servo motor in closed loop on encoder with analog +/- 10volt command on M5i20
In this case for actual 2.9 master i use only Fb-deriv(D part not used ) or only Commnad-deriv(FF1 part) or both.
Thanks for reply
I don't use D part for PID, but only P and FF1 part .
I use servo motor in closed loop on encoder with analog +/- 10volt command on M5i20
In this case for actual 2.9 master i use only Fb-deriv(D part not used ) or only Commnad-deriv(FF1 part) or both.
Thanks for reply
Last edit: 26 Jan 2020 17:27 by papagno-source.
Please Log in or Create an account to join the conversation.
26 Jan 2020 13:05 #155804
by bbsr_5a
Replied by bbsr_5a on topic 2.8/2.9 PID seems broken?
is there a BASE Setup for a PID driving a Stepper to Comen Drivers M542/Tb6600 Famile Drivers Step DIR
im on the way to get rid of a ATCRACK using axis Comands transfering to PID Carousell at position Commandings
and lost in all this values
im on the way to get rid of a ATCRACK using axis Comands transfering to PID Carousell at position Commandings
and lost in all this values
Please Log in or Create an account to join the conversation.
Time to create page: 0.131 seconds