Help With Anilam retrofit

More
18 Sep 2021 21:36 #221038 by SteveCorr
So I'm really hoping for some help, I have spent the last 2 days trying to figure out what I'm doing wrong and just not getting anywhere.
This is a SuperMax mill (BP clone) that had an Anilam setup on it. I kept the motors and drives and the glass scales. I have the Scales set up as encoders in PFconfig, and I believe they are correct on the scale and direction. My problem is when I enable the drives when I'm hooked up to the 6i25 and 7i77 they slowly move in the positive direction until I get a following error. when the drives are enabled and not attached to the 7i77 they are rock solid. I have measured the X axis to have .020vdc on the 7i77 when no movement is commanded. The other axis are .006v and .008v which still results in movement of the axis.
Please be aware that although I am a bit of a computer nerd I have almost exactly zero Linux experience.

# Generated by PNCconf at Sat Sep 18 14:18:38 2021
# Using LinuxCNC version:  2.8
# If you make changes to this file, they will be
# overwritten when you run PNCconf again

loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hostmot2
loadrt hm2_pci config=" num_encoders=3 num_pwmgens=0 num_stepgens=0 sserial_port_0=000xxx"
setp    hm2_5i25.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s

addf hm2_5i25.0.read          servo-thread
addf motion-command-handler   servo-thread
addf motion-controller        servo-thread
addf pid.x.do-pid-calcs       servo-thread
addf pid.y.do-pid-calcs       servo-thread
addf pid.z.do-pid-calcs       servo-thread
addf pid.s.do-pid-calcs       servo-thread
addf hm2_5i25.0.write         servo-thread

# external output signals


# --- MACHINE-IS-ENABLED ---
net machine-is-enabled  =>     hm2_5i25.0.7i77.0.0.output-12

# external input signals


# --- ESTOP-EXT ---
net estop-ext     <=  hm2_5i25.0.7i77.0.0.input-16

#*******************
#  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

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

# ---PWM Generator signals/setup---

setp   hm2_5i25.0.7i77.0.1.analogout0-scalemax  [JOINT_0]OUTPUT_SCALE
setp   hm2_5i25.0.7i77.0.1.analogout0-minlim    [JOINT_0]OUTPUT_MIN_LIMIT
setp   hm2_5i25.0.7i77.0.1.analogout0-maxlim    [JOINT_0]OUTPUT_MAX_LIMIT

net x-output     => hm2_5i25.0.7i77.0.1.analogout0
net x-pos-cmd    <= joint.0.motor-pos-cmd
net x-enable     <= joint.0.amp-enable-out
# enable _all_ sserial pwmgens
net x-enable   => hm2_5i25.0.7i77.0.1.analogena

# ---Encoder feedback signals/setup---

setp    hm2_5i25.0.encoder.00.counter-mode 0
setp    hm2_5i25.0.encoder.00.filter 1
setp    hm2_5i25.0.encoder.00.index-invert 0
setp    hm2_5i25.0.encoder.00.index-mask 0
setp    hm2_5i25.0.encoder.00.index-mask-invert 0
setp    hm2_5i25.0.encoder.00.scale  [JOINT_0]ENCODER_SCALE

net x-pos-fb               <=  hm2_5i25.0.encoder.00.position
net x-vel-fb               <=  hm2_5i25.0.encoder.00.velocity
net x-pos-fb               =>  joint.0.motor-pos-fb
net x-index-enable    joint.0.index-enable  <=>  hm2_5i25.0.encoder.00.index-enable
net x-pos-rawcounts        <=  hm2_5i25.0.encoder.00.rawcounts

# ---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 Y JOINT 1
#*******************

setp   pid.y.Pgain     [JOINT_1]P
setp   pid.y.Igain     [JOINT_1]I
setp   pid.y.Dgain     [JOINT_1]D
setp   pid.y.bias      [JOINT_1]BIAS
setp   pid.y.FF0       [JOINT_1]FF0
setp   pid.y.FF1       [JOINT_1]FF1
setp   pid.y.FF2       [JOINT_1]FF2
setp   pid.y.deadband  [JOINT_1]DEADBAND
setp   pid.y.maxoutput [JOINT_1]MAX_OUTPUT
setp   pid.y.error-previous-target true

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

# ---PWM Generator signals/setup---

setp   hm2_5i25.0.7i77.0.1.analogout1-scalemax  [JOINT_1]OUTPUT_SCALE
setp   hm2_5i25.0.7i77.0.1.analogout1-minlim    [JOINT_1]OUTPUT_MIN_LIMIT
setp   hm2_5i25.0.7i77.0.1.analogout1-maxlim    [JOINT_1]OUTPUT_MAX_LIMIT

net y-output     => hm2_5i25.0.7i77.0.1.analogout1
net y-pos-cmd    <= joint.1.motor-pos-cmd
net y-enable     <= joint.1.amp-enable-out

# ---Encoder feedback signals/setup---

setp    hm2_5i25.0.encoder.01.counter-mode 0
setp    hm2_5i25.0.encoder.01.filter 1
setp    hm2_5i25.0.encoder.01.index-invert 0
setp    hm2_5i25.0.encoder.01.index-mask 0
setp    hm2_5i25.0.encoder.01.index-mask-invert 0
setp    hm2_5i25.0.encoder.01.scale  [JOINT_1]ENCODER_SCALE

net y-pos-fb               <=  hm2_5i25.0.encoder.01.position
net y-vel-fb               <=  hm2_5i25.0.encoder.01.velocity
net y-pos-fb               =>  joint.1.motor-pos-fb
net y-index-enable    joint.1.index-enable  <=>  hm2_5i25.0.encoder.01.index-enable
net y-pos-rawcounts        <=  hm2_5i25.0.encoder.01.rawcounts

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

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

#*******************
#  AXIS Z JOINT 2
#*******************

setp   pid.z.Pgain     [JOINT_2]P
setp   pid.z.Igain     [JOINT_2]I
setp   pid.z.Dgain     [JOINT_2]D
setp   pid.z.bias      [JOINT_2]BIAS
setp   pid.z.FF0       [JOINT_2]FF0
setp   pid.z.FF1       [JOINT_2]FF1
setp   pid.z.FF2       [JOINT_2]FF2
setp   pid.z.deadband  [JOINT_2]DEADBAND
setp   pid.z.maxoutput [JOINT_2]MAX_OUTPUT
setp   pid.z.error-previous-target true

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

# ---PWM Generator signals/setup---

setp   hm2_5i25.0.7i77.0.1.analogout2-scalemax  [JOINT_2]OUTPUT_SCALE
setp   hm2_5i25.0.7i77.0.1.analogout2-minlim    [JOINT_2]OUTPUT_MIN_LIMIT
setp   hm2_5i25.0.7i77.0.1.analogout2-maxlim    [JOINT_2]OUTPUT_MAX_LIMIT

net z-output     => hm2_5i25.0.7i77.0.1.analogout2
net z-pos-cmd    <= joint.2.motor-pos-cmd
net z-enable     <= joint.2.amp-enable-out

# ---Encoder feedback signals/setup---

setp    hm2_5i25.0.encoder.02.counter-mode 0
setp    hm2_5i25.0.encoder.02.filter 1
setp    hm2_5i25.0.encoder.02.index-invert 0
setp    hm2_5i25.0.encoder.02.index-mask 0
setp    hm2_5i25.0.encoder.02.index-mask-invert 0
setp    hm2_5i25.0.encoder.02.scale  [JOINT_2]ENCODER_SCALE

net z-pos-fb               <=  hm2_5i25.0.encoder.02.position
net z-vel-fb               <=  hm2_5i25.0.encoder.02.velocity
net z-pos-fb               =>  joint.2.motor-pos-fb
net z-index-enable    joint.2.index-enable  <=>  hm2_5i25.0.encoder.02.index-enable
net z-pos-rawcounts        <=  hm2_5i25.0.encoder.02.rawcounts

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

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


#******************************
# connect miscellaneous signals
#******************************

#  ---HALUI signals---

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-y  halui.axis.y.select
net jog-y-pos      halui.axis.y.plus
net jog-y-neg      halui.axis.y.minus
net jog-y-analog   halui.axis.y.analog
net y-is-homed     halui.joint.1.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.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

#  ---coolant signals---

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

#  ---probe signal---

net probe-in     =>  motion.probe-input

#  ---motion control signals---

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

#  ---digital in / out signals---

#  ---estop signals---

net estop-out     <=  iocontrol.0.user-enable-out
net estop-ext     =>  iocontrol.0.emc-enable-in

#  ---manual tool change signals---

loadusr -W hal_manualtoolchange
net tool-change-request     iocontrol.0.tool-change       =>  hal_manualtoolchange.change
net tool-change-confirmed   iocontrol.0.tool-changed      <=  hal_manualtoolchange.changed
net tool-number             iocontrol.0.tool-prep-number  =>  hal_manualtoolchange.number
net tool-prepare-loopback   iocontrol.0.tool-prepare      =>  iocontrol.0.tool-prepared

# Generated by PNCconf at Sat Sep 18 14:18:38 2021
# Using LinuxCNC version:  2.8
# If you make changes to this file, they will be
# overwritten when you run PNCconf again

[EMC]
MACHINE = Supermax_New_config
DEBUG = 0
VERSION = 1.1

[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/steve/linuxcnc/nc_files
INCREMENTS = .1in .05in .01in .005in .001in .0005in .0001in
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.250000
MAX_LINEAR_VELOCITY = 1.000000
MIN_LINEAR_VELOCITY = 0.016670
DEFAULT_ANGULAR_VELOCITY = 12.000000
MAX_ANGULAR_VELOCITY = 180.000000
MIN_ANGULAR_VELOCITY = 1.666667
EDITOR = gedit
GEOMETRY = xyz

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
SERVO_PERIOD = 1000000

[HMOT]
# **** This is for info only ****
CARD0=hm2_5i25.0

[HAL]
HALUI = halui
HALFILE = Supermax_New_config.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal

[HALUI]

[KINS]
JOINTS = 3
KINEMATICS = trivkins coordinates=XYZ

[TRAJ]
COORDINATES =  XYZ
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 0.10
MAX_LINEAR_VELOCITY = 1.00
NO_FORCE_HOMING = 1

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
TOOL_CHANGE_QUILL_UP = 1

#******************************************
[AXIS_X]
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.0
MIN_LIMIT = -0.001
MAX_LIMIT = 30.0

[JOINT_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.0
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
ENCODER_SCALE = 25400.0
OUTPUT_SCALE = 10.0
OUTPUT_MIN_LIMIT = -10.0
OUTPUT_MAX_LIMIT = 10.0
MIN_LIMIT = -0.001
MAX_LIMIT = 30.0
HOME_OFFSET = 0.0
#******************************************

#******************************************
[AXIS_Y]
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.0
MIN_LIMIT = -0.001
MAX_LIMIT = 8.0

[JOINT_1]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.0
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
ENCODER_SCALE = 25399.999
OUTPUT_SCALE = 10.0
OUTPUT_MIN_LIMIT = -10.0
OUTPUT_MAX_LIMIT = 10.0
MIN_LIMIT = -0.001
MAX_LIMIT = 8.0
HOME_OFFSET = 0.0
#******************************************

#******************************************
[AXIS_Z]
MAX_VELOCITY = 0.166666666667
MAX_ACCELERATION = 10.0
MIN_LIMIT = -4.0
MAX_LIMIT = 0.001

[JOINT_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 0.166666666667
MAX_ACCELERATION = 10.0
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
ENCODER_SCALE = 4000.0
OUTPUT_SCALE = -10.0
OUTPUT_MIN_LIMIT = -10.0
OUTPUT_MAX_LIMIT = 10.0
MIN_LIMIT = -4.0
MAX_LIMIT = 0.001
HOME_OFFSET = 0.0
#******************************************
 

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

More
18 Sep 2021 21:52 #221040 by tommylight
forum.linuxcnc.org/10-advanced-configura...ning-detailed-how-to
Plenty of info there on wiring and testing and tuning a servo system with Mesa 7i77.

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

More
19 Sep 2021 15:02 #221094 by SteveCorr
Replied by SteveCorr on topic Help With Anilam retrofit
Do you think that's all I have wrong? i thought i couldn't tune until i fixed the servo drift.
thank you for the link, I'll be working through that today, started to work through it yesterday before my post and somehow lost the link and couldn't find it again.

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

More
19 Sep 2021 15:20 #221098 by tommylight

.... i thought i couldn't tune until i fixed the servo drift.

Noooo don't, where are you (not you personally, plenty of users here) getting the idea of "fixing" the drift?
That is very wrong info and leads to a lot of headaches and headbanging to a wall.
Analog servos MUST have some drift when enabled and not controlled by anything, it is used for the velocity loop in the drive.
Have a read through the link i posted, pay close attention to the e-stop and especially Enable part, it is imperative that LinuxCNC has full control over enabling and disabling the drives, do not do anything before getting that working properly.
Check encoders if they are counting on the right direction and for the corresponding joint/axis, can be done without enabling anything.
After that, if the drives still drift when enabled in LinuxCNC, they should disable after exactly 1mm of error on any of the joints.

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

More
19 Sep 2021 16:06 #221111 by SteveCorr
Replied by SteveCorr on topic Help With Anilam retrofit
Ah, thank you. I believe i got the idea from BigJohnT tuning tutorial.
gnipsel.com/linuxcnc/tuning/servo.html

Tuning a Velocity Mode Drive

The following is assuming the drive itself is tuned. The axis should not drift when enabled and no position is commanded. If not set the Zero pot if there is one on the drive.


I have Estop and scales (which i have hooked up as encoders) when enabled the drives move slowly in one direction until i get a fallowing error. I can't move an axis before the following error kicks out the drives. it's almost as though there is a disconnect between the scales and the commanded motor position.
the drives themselves are rock solid when enabled but not connected to 7i77.

I have the DRO working, so i believe that the scales are correctly feeding into the 7i77. is there somewhere I can check that the scales are in the PID loop for the drives? I have read through page 7 on the link and I saw something on page 4 that made me think this could be my problem

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

More
19 Sep 2021 17:37 #221124 by tommylight

Ah, thank you. I believe i got the idea from BigJohnT tuning tutorial.
gnipsel.com/linuxcnc/tuning/servo.html

Tuning a Velocity Mode Drive

The following is assuming the drive itself is tuned. The axis should not drift when enabled and no position is commanded. If not set the Zero pot if there is one on the drive.

Well that is a bit misleading,
-Not tuning a velocity mode drive, tuning position control using a velocity mode drive, would be better.
-It is very true that the axis should not drift when enabled, granted the wiring and HAL are set up correctly.
-Never set the pots on the actual drive if it was in working condition and still wired to the same motor.

Tuning velocity mode drives involves use of scopes and/or software for new ones.

... it's almost as though there is a disconnect between the scales and the commanded motor position.

Pretty sure there is the issue ....
So where on the 7i77 are each encoder and each analog out connected/wired?

I have the DRO working, so i believe that the scales are correctly feeding into the 7i77. is there somewhere I can check that the scales are in the PID loop for the drives? I have read through page 7 on the link and I saw something on page 4 that made me think this could be my problem

Check the DRO when you enable LinuxCNC, the numbers should jump up/down on the last digits, but if they jump for one unit ( 1mm or ~0.1inch) and LinuxCNC errors out with joint following errors, you have the encoders or outputs reversed in HAL (no need to change the wiring usually) so try adding a - in front of the encoder scale and test again.
Use AXIS GUI till you set things up, in the machine menu there are "show hal configuration", "halscope", and "calibration", those are all you need to get things done.

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

More
19 Sep 2021 20:07 #221144 by SteveCorr
Replied by SteveCorr on topic Help With Anilam retrofit
I think i am getting this figured out, i now have 3 drives that seem to be working with the feedback from the scales. in the event someone else reads this I had the motor direction reversed from the scale direction, so it was slowly running away until the f error took it down.

So now I am trying to tune this machine, and having problems. I have done as the tutorial states, and tried to set P to where the drives quit vibrating, perhaps i'm doing it wrong but X and Z both oscillate with the oscillation getting worse until the following error kicks them out. lowering P makes this happen slower, raising p makes it happen faster, I have tried values from 1 to 100. I is set to zero and D is set to zero and FF1 is set to .01 with everything else at zero. I can't seem to get away from this oscillation.

Also having problems with halscope, cant seem to get anything but a solid line Joint cmd and joint f error. tried zooming pinching gaining pos level, zoom and nothing is giving me any feedback

I do appreciate your help. I'd be in a real world of hurt without the help I'm getting on this forum.
The following user(s) said Thank You: tommylight

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

More
19 Sep 2021 22:34 #221157 by tommylight
Scope, right top side, click on "roll" and "auto".

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

Time to create page: 0.131 seconds
Powered by Kunena Forum