stepper motor oscillating

More
08 Nov 2021 18:03 #225705 by PaulQUE
stepper motor oscillating was created by PaulQUE
Hello, once again I am struggling with my ATC, the motor, which is setup as an angular axis, oscillates after each move, and never stops oscillating after a tool change. Looking at the Halmeter, when oscillating, pos-cmd is still but pos-fb follows the stepper's movement. I have looked at answers provided for similar issues, but none worked, my other 2 linear axis work fine. Any Idea? 

thanks once again,

 Généré par PNCconf le Wed Oct 20 22:33:22 2021
# Using LinuxCNC version:  2.8
# Si vous modifiez ce fichier, il sera
# écrasé quand vous relancerez PNCconf

loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hostmot2
loadrt hm2_eth board_ip="10.10.10.10" config=" num_encoders=1 num_pwmgens=0 num_stepgens=3 sserial_port_0=0xxxxx" 
setp    [HMOT](CARD0).watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.z,pid.s
loadrt toolchanger

addf [HMOT](CARD0).read          servo-thread
addf motion-command-handler   servo-thread
addf motion-controller        servo-thread
addf pid.x.do-pid-calcs       servo-thread
addf pid.z.do-pid-calcs       servo-thread
addf pid.s.do-pid-calcs       servo-thread
addf [HMOT](CARD0).write         servo-thread
addf toolchanger servo-thread

# external output signals
setp hm2_7i96.0.encoder.00.counter-mode TRUE
setp hm2_7i96.0.encoder.00.scale 100
setp hm2_7i96.0.encoder.00.filter TRUE
setp hm2_7i96.0.dpll.01.timer-us -100
setp hm2_7i96.0.stepgen.timer-number 1


# external input signals


#*******************
#  AXIS X JOINT 0
#*******************

setp   pid.x.Pgain     [JOINT_0]P
setp   pid.x.Igain     [JOINT_0]I
setp   pid.x.Dgain     [JOINT_0]D
setp   pid.x.bias      [JOINT_0]BIAS
setp   pid.x.FF0       [JOINT_0]FF0
setp   pid.x.FF1       [JOINT_0]FF1
setp   pid.x.FF2       [JOINT_0]FF2
setp   pid.x.deadband  [JOINT_0]DEADBAND
setp   pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp   pid.x.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp   pid.x.maxerror 0.012700

net x-index-enable  <=> pid.x.index-enable
net x-enable        =>  pid.x.enable
net x-pos-cmd       =>  pid.x.command
net x-pos-fb        =>  pid.x.feedback
net x-output        <=  pid.x.output

# Step Gen signals/setup

setp   [HMOT](CARD0).stepgen.00.dirsetup        [JOINT_0]DIRSETUP
setp   [HMOT](CARD0).stepgen.00.dirhold         [JOINT_0]DIRHOLD
setp   [HMOT](CARD0).stepgen.00.steplen         [JOINT_0]STEPLEN
setp   [HMOT](CARD0).stepgen.00.stepspace       [JOINT_0]STEPSPACE
setp   [HMOT](CARD0).stepgen.00.position-scale  [JOINT_0]STEP_SCALE
setp   [HMOT](CARD0).stepgen.00.step_type        0
setp   [HMOT](CARD0).stepgen.00.control-type     1
setp   [HMOT](CARD0).stepgen.00.maxaccel         [JOINT_0]STEPGEN_MAXACCEL
setp   [HMOT](CARD0).stepgen.00.maxvel           [JOINT_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd    <= joint.0.motor-pos-cmd
net x-vel-cmd    <= joint.0.vel-cmd
net x-output     <= [HMOT](CARD0).stepgen.00.velocity-cmd
net x-pos-fb     <= [HMOT](CARD0).stepgen.00.position-fb
net x-pos-fb     => joint.0.motor-pos-fb
net x-enable     <= joint.0.amp-enable-out
net x-enable     => [HMOT](CARD0).stepgen.00.enable

# ---setup home / limit switch signals---

net x-home-sw     =>  joint.0.home-sw-in
net x-neg-limit     =>  joint.0.neg-lim-sw-in
net x-pos-limit     =>  joint.0.pos-lim-sw-in

#*******************
#  AXIS Z JOINT 1
#*******************

setp   pid.z.Pgain     [JOINT_1]P
setp   pid.z.Igain     [JOINT_1]I
setp   pid.z.Dgain     [JOINT_1]D
setp   pid.z.bias      [JOINT_1]BIAS
setp   pid.z.FF0       [JOINT_1]FF0
setp   pid.z.FF1       [JOINT_1]FF1
setp   pid.z.FF2       [JOINT_1]FF2
setp   pid.z.deadband  [JOINT_1]DEADBAND
setp   pid.z.maxoutput [JOINT_1]MAX_OUTPUT
setp   pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp   pid.z.maxerror 0.012700

net z-index-enable  <=> pid.z.index-enable
net z-enable        =>  pid.z.enable
net z-pos-cmd       =>  pid.z.command
net z-pos-fb        =>  pid.z.feedback
net z-output        <=  pid.z.output

# Step Gen signals/setup

setp   [HMOT](CARD0).stepgen.01.dirsetup        [JOINT_1]DIRSETUP
setp   [HMOT](CARD0).stepgen.01.dirhold         [JOINT_1]DIRHOLD
setp   [HMOT](CARD0).stepgen.01.steplen         [JOINT_1]STEPLEN
setp   [HMOT](CARD0).stepgen.01.stepspace       [JOINT_1]STEPSPACE
setp   [HMOT](CARD0).stepgen.01.position-scale  [JOINT_1]STEP_SCALE
setp   [HMOT](CARD0).stepgen.01.step_type        0
setp   [HMOT](CARD0).stepgen.01.control-type     1
setp   [HMOT](CARD0).stepgen.01.maxaccel         [JOINT_1]STEPGEN_MAXACCEL
setp   [HMOT](CARD0).stepgen.01.maxvel           [JOINT_1]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net z-pos-cmd    <= joint.1.motor-pos-cmd
net z-vel-cmd    <= joint.1.vel-cmd
net z-output     <= [HMOT](CARD0).stepgen.01.velocity-cmd
net z-pos-fb     <= [HMOT](CARD0).stepgen.01.position-fb
net z-pos-fb     => joint.1.motor-pos-fb
net z-enable     <= joint.1.amp-enable-out
net z-enable     => [HMOT](CARD0).stepgen.01.enable

# ---setup home / limit switch signals---

net z-home-sw     =>  joint.1.home-sw-in
net z-neg-limit     =>  joint.1.neg-lim-sw-in
net z-pos-limit     =>  joint.1.pos-lim-sw-in

#*******************
#  AXIS S ATC
#*******************

setp   pid.s.Pgain     [AXIS_2]P
setp   pid.s.Igain     [AXIS_2]I
setp   pid.s.Dgain     [AXIS_2]D
setp   pid.s.bias      [AXIS_2]BIAS
setp   pid.s.FF0       [AXIS_2]FF0
setp   pid.s.FF1       [AXIS_2]FF1
setp   pid.s.FF2       [AXIS_2]FF2
setp   pid.s.deadband  [AXIS_2]DEADBAND
setp   pid.s.maxoutput [AXIS_2]MAX_OUTPUT
setp   pid.s.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp   pid.s.maxerror 0.012700

net s-index-enable  <=> pid.s.index-enable
net s-enable        =>  pid.s.enable
net s-pos-cmd       =>  pid.s.command
net s-pos-fb        =>  pid.s.feedback
net s-output        <=  pid.s.output
net s-output       <= [HMOT](CARD0).stepgen.02.velocity-cmd

# Step Gen signals/setup

setp   [HMOT](CARD0).stepgen.02.dirsetup        [AXIS_2]DIRSETUP
setp   [HMOT](CARD0).stepgen.02.dirhold         [AXIS_2]DIRHOLD
setp   [HMOT](CARD0).stepgen.02.steplen         [AXIS_2]STEPLEN
setp   [HMOT](CARD0).stepgen.02.stepspace       [AXIS_2]STEPSPACE
setp   [HMOT](CARD0).stepgen.02.position-scale  [AXIS_2]STEP_SCALE
setp   [HMOT](CARD0).stepgen.02.step_type        0
setp   [HMOT](CARD0).stepgen.02.control-type     1
setp   [HMOT](CARD0).stepgen.02.maxaccel         [AXIS_2]STEPGEN_MAXACCEL
setp   [HMOT](CARD0).stepgen.02.maxvel           [AXIS_2]STEPGEN_MAXVEL



# ---closedloop stepper signals---

#net s-pos-cmd    joint.2.motor-pos-cmd 
net s-pos-fb   <= [HMOT](CARD0).stepgen.02.position-fb


#net s-vel-cmd    <= joint.2.vel-cmd
#net s-output     <= s-pos-cmd
# net s-pos-fb     <= [HMOT](CARD0).stepgen.02.position-fb
# net s-pos-fb     => joint.2.motor-pos-fb
net s-enable     <= joint.2.amp-enable-out
net s-enable     => [HMOT](CARD0).stepgen.02.enable

# ---setup home / limit switch signals---

net s-home-sw     =>  joint.2.home-sw-in
net s-neg-limit     =>  joint.2.neg-lim-sw-in
net s-pos-limit     =>  joint.2.pos-lim-sw-in

#******************************
#connections de signaux divers
#******************************

#  ---signaux HALUI---

net axis-select-x  halui.axis.x.select
net jog-x-pos      halui.axis.x.plus
net jog-x-neg      halui.axis.x.minus
net jog-x-analog   halui.axis.x.analog
net x-is-homed     halui.joint.0.is-homed
net axis-select-z  halui.axis.z.select
net jog-z-pos      halui.axis.z.plus
net jog-z-neg      halui.axis.z.minus
net jog-z-analog   halui.axis.z.analog
net z-is-homed     halui.joint.1.is-homed
net s-is-homed     halui.joint.2.is-homed

net jog-selected-pos      halui.axis.selected.plus
net jog-selected-neg      halui.axis.selected.minus
net spindle-manual-cw     halui.spindle.0.forward
net spindle-manual-ccw    halui.spindle.0.reverse
net spindle-manual-stop   halui.spindle.0.stop
net machine-is-on         halui.machine.is-on
net jog-speed             halui.axis.jog-speed
net MDI-mode              halui.mode.is-mdi

#  ---signaux d'arrosage---

net coolant-mist      <=  iocontrol.0.coolant-mist
net coolant-flood     <=  iocontrol.0.coolant-flood

#  ---signal de sonde---

net probe-in     =>  motion.probe-input

#  ---signaux contrôle mouvement---

net in-position               <=  motion.in-position
net machine-is-enabled        <=  motion.motion-enabled

#  ---signaux entrée / sortie numérique---

#  ---signaux d'A/U---
net estop-out     <=  iocontrol.0.user-enable-out
net estop-out     =>  iocontrol.0.emc-enable-in

#  ---signaux changeur manuel d'outil--
net tool-change iocontrol.0.tool-change => toolchanger.toolchange
net tool-changed iocontrol.0.tool-changed <= toolchanger.toolchanged
net tool-number iocontrol.0.tool-prep-number => toolchanger.toolnumber
net tool-oldnumber iocontrol.0.tool-number => toolchanger.currenttoolnumber

net s-pos-cmd toolchanger.position-cmd 
# net s-pos-fb toolchanger-stepgen-fb 
net s-is-homed halui.joint.2.is-homed => toolchanger.ishomed
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared




 
Attachments:

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

More
08 Nov 2021 18:43 - 08 Nov 2021 18:44 #225707 by PCW
Replied by PCW on topic stepper motor oscillating
What kind of command is given to the stepgen position?

I dont think the stepgen deals well with instantaeous jumps in position inputs
(the joint velocity and acceleration limits don't do anything since you are not using joint2)

This may require inserting a limit2 component between the toolchangers
commanded position (which I would guess make large jumps between positions)
and the position command feed to the PID.

You might also try reducing the P term
Last edit: 08 Nov 2021 18:44 by PCW.

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

More
09 Nov 2021 11:32 #225804 by PaulQUE
Replied by PaulQUE on topic stepper motor oscillating
thanks for the reply, so velocity and acceleration can not be used even when setup as such? setp [HMOT](CARD0).stepgen.02.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.02.maxvel [AXIS_2]STEPGEN_MAXVEL

when changing ther value in the ini file, I seem to be able to adjust the speed of the ATC, I must add that I am running it very, very slow

I've tried messing with the P value but it only ever affected the speed of the motor, didn't fix the oscillation, I've read in an other thread that for a stepgen, the P value should be left to 1000 as it's related to the 1ms thread, or am i getting this wrong?

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

More
09 Nov 2021 14:44 - 09 Nov 2021 14:45 #225832 by PCW
Replied by PCW on topic stepper motor oscillating
The stepgen maxvel and maxaccel values will limit the stepgens
velocity and acceleration, but I expect that the major limitation now
is the PID maxerror number. if you set this to 0, the stepgen limits
should be followed. This might be worth a try, but I expect you will need
to insert a limit 2 component in the tool changers commanded position.

The issue is that the stepgen control loop depends on FF1 (the velocity command)
but this is not valid for stepwise motion
Last edit: 09 Nov 2021 14:45 by PCW.

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

More
09 Nov 2021 15:29 #225844 by PaulQUE
Replied by PaulQUE on topic stepper motor oscillating
I've tried setting pid MAXERROR to 0, it didn't do much, as I understand, limit2 needs a mmiin and max value, what should the max value correspond to?

from the documentation:

limit2.N.in float in is this were I should assign the tool changer pos command ? ( toolcanger.position-cmd in my case)
limit2.N.out float out is this were I should assign the pid poistion feed? ( s-pos-cmd in my case)

limit2.N.load bit in

When TRUE, immediately set out to in, ignoring maxv

limit2.N.min float in (default: -1e20)
limit2.N.max float in (default: 1e20)
limit2.N.maxv float in (default: 1e20) what is the purpose of this parameter?

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

More
10 Nov 2021 11:20 #225955 by andypugh
Replied by andypugh on topic stepper motor oscillating
Would it be simpler to run the ATC stepgen in position mode, and just not use the PID?

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

More
10 Nov 2021 12:09 #225969 by PaulQUE
Replied by PaulQUE on topic stepper motor oscillating
Isn't the ATC Stepgen already in position mode? Stepgen.02.control-type is set to 1

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

More
10 Nov 2021 12:22 #225973 by andypugh
Replied by andypugh on topic stepper motor oscillating

Isn't the ATC Stepgen already in position mode? Stepgen.02.control-type is set to 1

Control-type 1  = velocity mode:

linuxcnc.org/docs/2.8/html/man/man9/hostmot2.9.html#stepgen

You can try setting it to 0, and connecting the position command directly (ie, leave the PID out of the loop)

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

More
10 Nov 2021 20:12 #226033 by PaulQUE
Replied by PaulQUE on topic stepper motor oscillating
It worked! thanks for the suggestion

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

More
21 Nov 2021 19:29 #227223 by mikeross
Replied by mikeross on topic stepper motor oscillating
Can you post your working HAL and INI please?  I also have an emco compact 5 with tool changer and want to get this working.  (tool changer is converted to stepper motor and is oscillating jus tlike your was).

Thanks
Mike
 

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

Time to create page: 0.082 seconds
Powered by Kunena Forum