2.8 hm2_encoder stops on machine power on
12 Apr 2019 13:23 #130726
by jgnoss
2.8 hm2_encoder stops on machine power on was created by jgnoss
Hi all,
I try to get a mesa THC-ad 10 to work together with my, ok a bit dusty
Mesa 5I23 on a 2.8 pre, built from git master.
The main hal file is pncconf generated for 4 axes, one of them is
tandem (gantry) and there are a bunch of limit switches. Nothing fancy
(hand edited) in the main hal file, so I'll post it if somebody asks for it.
All changes are in .ini and the hal files attached here.
I have a pyVCP attached to axis to show some values of THC comp and
others. The voltage-in on the THC-AD card comes for office testing from
a potentiometer.
The thing that makes me scratch my head is, if I start Linuxcnc, the VCP
shows all values and changes as expected.
If I press the Power On Button in Axis the voltage and velocity values in the
VCP are going to 0.
I investigated a bit and see, that the values in the mesa encoder are going to 0,
so the THC component cannot calculate anything and my VCP shows zero's.
Any idea what I'm missing?
here the files
thc.hal
# Torch Height Control
loadrt thc
addf thc servo-thread
# Set up the Encoder for the THC
setp hm2_5i23.0.encoder.00.counter-mode 1
net thc-vel-in hm2_5i23.0.encoder.00.velocity => thc.encoder-vel
setp thc.scale-offset 1818
setp thc.vel-scale 0.0007689
# this might need to be increased
setp thc.correction-vel 0.0001
# Net arc-ok with gpio
net arc_ok hm2_5i23.0.gpio.039.in_not => thc.arc-ok
net arc_ok => spindle.0.at-speed
net torch_on_ <= spindle.0.on
___________________________________________________________________
plasma_postgui.hal
______________________
#Torch On/Off controls
net manual_torch_on pyvcp.btn_torch_on => halui.spindle.0.start
net manual_torch_off pyvcp.btn_torch_off => halui.spindle.0.stop
net torch_on_indicator halui.spindle.0.is-on => pyvcp.my_torch-on
net torch_on_indicator => thc.torch-on
net thc_voltage thc.volts => pyvcp.act_torch_voltage
net thc-vel-in thc.encoder-vel => pyvcp.encoder-vel
net scale_offset pyvcp.scale-offset
sets scale_offset 1818
net vel-scale pyvcp.vel-scale
sets vel-scale 0.0007689
net correction-vel pyvcp.correction-vel
sets correction-vel 0.0001
net thc_voltage => pyvcp.volts
net volts-requested thc.volts-requested <= pyvcp.volts-requested
net arc_ok => pyvcp.arc-ok
net thc-enable thc.enable <= pyvcp.thc-enable
net thc-enable pyvcp.btn_thc_enable
I try to get a mesa THC-ad 10 to work together with my, ok a bit dusty
Mesa 5I23 on a 2.8 pre, built from git master.
The main hal file is pncconf generated for 4 axes, one of them is
tandem (gantry) and there are a bunch of limit switches. Nothing fancy
(hand edited) in the main hal file, so I'll post it if somebody asks for it.
All changes are in .ini and the hal files attached here.
I have a pyVCP attached to axis to show some values of THC comp and
others. The voltage-in on the THC-AD card comes for office testing from
a potentiometer.
The thing that makes me scratch my head is, if I start Linuxcnc, the VCP
shows all values and changes as expected.
If I press the Power On Button in Axis the voltage and velocity values in the
VCP are going to 0.
I investigated a bit and see, that the values in the mesa encoder are going to 0,
so the THC component cannot calculate anything and my VCP shows zero's.
Any idea what I'm missing?
here the files
thc.hal
# Torch Height Control
loadrt thc
addf thc servo-thread
# Set up the Encoder for the THC
setp hm2_5i23.0.encoder.00.counter-mode 1
net thc-vel-in hm2_5i23.0.encoder.00.velocity => thc.encoder-vel
setp thc.scale-offset 1818
setp thc.vel-scale 0.0007689
# this might need to be increased
setp thc.correction-vel 0.0001
# Net arc-ok with gpio
net arc_ok hm2_5i23.0.gpio.039.in_not => thc.arc-ok
net arc_ok => spindle.0.at-speed
net torch_on_ <= spindle.0.on
___________________________________________________________________
plasma_postgui.hal
______________________
#Torch On/Off controls
net manual_torch_on pyvcp.btn_torch_on => halui.spindle.0.start
net manual_torch_off pyvcp.btn_torch_off => halui.spindle.0.stop
net torch_on_indicator halui.spindle.0.is-on => pyvcp.my_torch-on
net torch_on_indicator => thc.torch-on
net thc_voltage thc.volts => pyvcp.act_torch_voltage
net thc-vel-in thc.encoder-vel => pyvcp.encoder-vel
net scale_offset pyvcp.scale-offset
sets scale_offset 1818
net vel-scale pyvcp.vel-scale
sets vel-scale 0.0007689
net correction-vel pyvcp.correction-vel
sets correction-vel 0.0001
net thc_voltage => pyvcp.volts
net volts-requested thc.volts-requested <= pyvcp.volts-requested
net arc_ok => pyvcp.arc-ok
net thc-enable thc.enable <= pyvcp.thc-enable
net thc-enable pyvcp.btn_thc_enable
Please Log in or Create an account to join the conversation.
12 Apr 2019 13:44 #130727
by PCW
Replied by PCW on topic 2.8 hm2_encoder stops on machine power on
Are you losing power somewhere at power-on?
(THCAD LED still blinking?)
(THCAD LED still blinking?)
Please Log in or Create an account to join the conversation.
12 Apr 2019 14:19 #130728
by jgnoss
Replied by jgnoss on topic 2.8 hm2_encoder stops on machine power on
No power lost, THCAD LED keeps blinking.
Just to clarify, with power on I refer to the machine power on button in axis.
Just to clarify, with power on I refer to the machine power on button in axis.
Please Log in or Create an account to join the conversation.
12 Apr 2019 14:22 - 12 Apr 2019 14:43 #130730
by jgnoss
Replied by jgnoss on topic 2.8 hm2_encoder stops on machine power on
In addition, if I press the power on button in axis again (power off) , hm2 encoder and VCP shows values as before.
actually there is, beside a "Arc OK" button, no drivers or anything else as the THCAD connected to the mesa card
actually there is, beside a "Arc OK" button, no drivers or anything else as the THCAD connected to the mesa card
Last edit: 12 Apr 2019 14:43 by jgnoss.
Please Log in or Create an account to join the conversation.
12 Apr 2019 15:02 #130732
by PCW
Replied by PCW on topic 2.8 hm2_encoder stops on machine power on
What card is between the 5I23 and the THCAD?
what encoder signal are you watching?
What does the encoder 'A' line read in halshow?
(should read random high/low)
can you post your complete hal file?
what encoder signal are you watching?
What does the encoder 'A' line read in halshow?
(should read random high/low)
can you post your complete hal file?
Please Log in or Create an account to join the conversation.
12 Apr 2019 16:34 #130736
by jgnoss
Replied by jgnoss on topic 2.8 hm2_encoder stops on machine power on
The 5I23 goes with its 3 flat cables to a custom made PCB, that changes mainly just the connectors to something where cables can be screwed in.
THCAD is powered by that custom PCB, custom PCB is powered by pc power supply. All share same GND.
THCAD FOUT+ goes to the encoder 0 A input.
As posted initially, THCAD arc voltage in+/- contacts are connected to a potentiometer for now that gives 0-10V
if the power on button in axis is not pressed (machine power off) all readings are correct. My VCP
meter shows the voltage that I have on the potentiometer.
In Hal I see the frequency coming from the THCAD, and changing with the Poti
Hal File
# Generated by PNCconf at Sat Apr 6 19:58:14 2019
# 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="firmware=hm2/5i23/SVST4_8.BIT num_encoders=4 num_pwmgens=4 num_stepgens=8"
setp hm2_5i23.0.pwmgen.pwm_frequency 20000
setp hm2_5i23.0.pwmgen.pdm_frequency 6000000
setp hm2_5i23.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.x2,pid.y,pid.z,pid.a
loadrt not names=torch_on_not
addf hm2_5i23.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.x2.do-pid-calcs servo-thread
addf pid.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.a.do-pid-calcs servo-thread
addf hm2_5i23.0.write servo-thread
addf torch_on_not servo-thread
# external output signals
# --- MACHINE-IS-ENABLED ---
setp hm2_5i23.0.gpio.040.is_output true
net machine-is-enabled hm2_5i23.0.gpio.040.out
# --- Torch-ON ---
setp hm2_5i23.0.gpio.041.is_output true
net torch_neg torch_on_not.out => hm2_5i23.0.gpio.041.out
net torch_on torch_on_not.in
# external input signals
# --- MIN-HOME-X ---
net min-home-x <= hm2_5i23.0.gpio.026.in_not
# --- MAX-X ---
net max-x <= hm2_5i23.0.gpio.027.in_not
# --- MIN-HOME-X2 ---
net min-home-x2 <= hm2_5i23.0.gpio.028.in_not
# --- MAX-X2 ---
net max-x2 <= hm2_5i23.0.gpio.029.in_not
# --- MIN-HOME-Y ---
net min-home-y <= hm2_5i23.0.gpio.032.in_not
# --- MAX-Y ---
net max-y <= hm2_5i23.0.gpio.033.in_not
# --- MIN-Z ---
net min-z <= hm2_5i23.0.gpio.034.in_not
# --- MAX-HOME-Z ---
net max-home-z <= hm2_5i23.0.gpio.035.in_not
# --- ESTOP-EXT ---
net estop-ext <= hm2_5i23.0.gpio.038.in
#*******************
# 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
setp pid.x.maxerror .0005
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# Step Gen signals/setup
setp hm2_5i23.0.stepgen.00.dirsetup [JOINT_0]DIRSETUP
setp hm2_5i23.0.stepgen.00.dirhold [JOINT_0]DIRHOLD
setp hm2_5i23.0.stepgen.00.steplen [JOINT_0]STEPLEN
setp hm2_5i23.0.stepgen.00.stepspace [JOINT_0]STEPSPACE
setp hm2_5i23.0.stepgen.00.position-scale [JOINT_0]STEP_SCALE
setp hm2_5i23.0.stepgen.00.step_type 0
setp hm2_5i23.0.stepgen.00.control-type 1
setp hm2_5i23.0.stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp hm2_5i23.0.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 <= hm2_5i23.0.stepgen.00.velocity-cmd
net x-pos-fb <= hm2_5i23.0.stepgen.00.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => hm2_5i23.0.stepgen.00.enable
# ---setup home / limit switch signals---
net min-home-x => joint.0.home-sw-in
net min-home-x => joint.0.neg-lim-sw-in
net max-x => joint.0.pos-lim-sw-in
#*******************
# Tandem AXIS X2 JOINT 1
#*******************
setp pid.x2.Pgain [JOINT_1]P
setp pid.x2.Igain [JOINT_1]I
setp pid.x2.Dgain [JOINT_1]D
setp pid.x2.bias [JOINT_1]BIAS
setp pid.x2.FF0 [JOINT_1]FF0
setp pid.x2.FF1 [JOINT_1]FF1
setp pid.x2.FF2 [JOINT_1]FF2
setp pid.x2.deadband [JOINT_1]DEADBAND
setp pid.x2.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.x2.error-previous-target true
setp pid.x2.maxerror .0005
net x2-index-enable <=> pid.x2.index-enable
net x2-enable => pid.x2.enable
net x2-pos-cmd => pid.x2.command
net x2-vel-cmd => pid.x2.command-deriv
net x2-pos-fb => pid.x2.feedback
net x2-output <= pid.x2.output
# Step Gen signals/setup for tandem axis
setp hm2_5i23.0.stepgen.01.dirsetup [JOINT_1]DIRSETUP
setp hm2_5i23.0.stepgen.01.dirhold [JOINT_1]DIRHOLD
setp hm2_5i23.0.stepgen.01.steplen [JOINT_1]STEPLEN
setp hm2_5i23.0.stepgen.01.stepspace [JOINT_1]STEPSPACE
setp hm2_5i23.0.stepgen.01.position-scale [JOINT_1]STEP_SCALE
setp hm2_5i23.0.stepgen.01.step_type 0
setp hm2_5i23.0.stepgen.01.control-type 1
setp hm2_5i23.0.stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp hm2_5i23.0.stepgen.01.maxvel [JOINT_1]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net x2-pos-cmd <= joint.1.motor-pos-cmd
net x2-vel-cmd <= joint.1.vel-cmd
net x2-output <= hm2_5i23.0.stepgen.01.velocity-cmd
net x2-pos-fb <= hm2_5i23.0.stepgen.01.position-fb
net x2-pos-fb => joint.1.motor-pos-fb
net x2-enable <= joint.1.amp-enable-out
net x2-enable => hm2_5i23.0.stepgen.01.enable
# ---setup home / limit switch signals---
net min-home-x2 => joint.1.home-sw-in
net min-home-x2 => joint.1.neg-lim-sw-in
net max-x2 => joint.1.pos-lim-sw-in
#*******************
# AXIS Y JOINT 2
#*******************
setp pid.y.Pgain [JOINT_2]P
setp pid.y.Igain [JOINT_2]I
setp pid.y.Dgain [JOINT_2]D
setp pid.y.bias [JOINT_2]BIAS
setp pid.y.FF0 [JOINT_2]FF0
setp pid.y.FF1 [JOINT_2]FF1
setp pid.y.FF2 [JOINT_2]FF2
setp pid.y.deadband [JOINT_2]DEADBAND
setp pid.y.maxoutput [JOINT_2]MAX_OUTPUT
setp pid.y.error-previous-target true
setp pid.y.maxerror .0005
net y-index-enable <=> pid.y.index-enable
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
net y-vel-cmd => pid.y.command-deriv
net y-pos-fb => pid.y.feedback
net y-output <= pid.y.output
# Step Gen signals/setup
setp hm2_5i23.0.stepgen.02.dirsetup [JOINT_2]DIRSETUP
setp hm2_5i23.0.stepgen.02.dirhold [JOINT_2]DIRHOLD
setp hm2_5i23.0.stepgen.02.steplen [JOINT_2]STEPLEN
setp hm2_5i23.0.stepgen.02.stepspace [JOINT_2]STEPSPACE
setp hm2_5i23.0.stepgen.02.position-scale [JOINT_2]STEP_SCALE
setp hm2_5i23.0.stepgen.02.step_type 0
setp hm2_5i23.0.stepgen.02.control-type 1
setp hm2_5i23.0.stepgen.02.maxaccel [JOINT_2]STEPGEN_MAXACCEL
setp hm2_5i23.0.stepgen.02.maxvel [JOINT_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net y-pos-cmd <= joint.2.motor-pos-cmd
net y-vel-cmd <= joint.2.vel-cmd
net y-output <= hm2_5i23.0.stepgen.02.velocity-cmd
net y-pos-fb <= hm2_5i23.0.stepgen.02.position-fb
net y-pos-fb => joint.2.motor-pos-fb
net y-enable <= joint.2.amp-enable-out
net y-enable => hm2_5i23.0.stepgen.02.enable
# ---setup home / limit switch signals---
net min-home-y => joint.2.home-sw-in
net min-home-y => joint.2.neg-lim-sw-in
net max-y => joint.2.pos-lim-sw-in
#*******************
# AXIS Z JOINT 3
#*******************
setp pid.z.Pgain [JOINT_3]P
setp pid.z.Igain [JOINT_3]I
setp pid.z.Dgain [JOINT_3]D
setp pid.z.bias [JOINT_3]BIAS
setp pid.z.FF0 [JOINT_3]FF0
setp pid.z.FF1 [JOINT_3]FF1
setp pid.z.FF2 [JOINT_3]FF2
setp pid.z.deadband [JOINT_3]DEADBAND
setp pid.z.maxoutput [JOINT_3]MAX_OUTPUT
setp pid.z.error-previous-target true
setp pid.z.maxerror .0005
net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-vel-cmd => pid.z.command-deriv
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp hm2_5i23.0.stepgen.03.dirsetup [JOINT_3]DIRSETUP
setp hm2_5i23.0.stepgen.03.dirhold [JOINT_3]DIRHOLD
setp hm2_5i23.0.stepgen.03.steplen [JOINT_3]STEPLEN
setp hm2_5i23.0.stepgen.03.stepspace [JOINT_3]STEPSPACE
setp hm2_5i23.0.stepgen.03.position-scale [JOINT_3]STEP_SCALE
setp hm2_5i23.0.stepgen.03.step_type 0
setp hm2_5i23.0.stepgen.03.control-type 1
setp hm2_5i23.0.stepgen.03.maxaccel [JOINT_3]STEPGEN_MAXACCEL
setp hm2_5i23.0.stepgen.03.maxvel [JOINT_3]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= joint.3.motor-pos-cmd
net z-vel-cmd <= joint.3.vel-cmd
net z-output <= hm2_5i23.0.stepgen.03.velocity-cmd
net z-pos-fb <= hm2_5i23.0.stepgen.03.position-fb
net z-pos-fb => joint.3.motor-pos-fb
net z-enable <= joint.3.amp-enable-out
net z-enable => hm2_5i23.0.stepgen.03.enable
# ---setup home / limit switch signals---
net max-home-z => joint.3.home-sw-in
net min-z => joint.3.neg-lim-sw-in
net max-home-z => joint.3.pos-lim-sw-in
#*******************
# AXIS A JOINT 4
#*******************
setp pid.a.Pgain [JOINT_4]P
setp pid.a.Igain [JOINT_4]I
setp pid.a.Dgain [JOINT_4]D
setp pid.a.bias [JOINT_4]BIAS
setp pid.a.FF0 [JOINT_4]FF0
setp pid.a.FF1 [JOINT_4]FF1
setp pid.a.FF2 [JOINT_4]FF2
setp pid.a.deadband [JOINT_4]DEADBAND
setp pid.a.maxoutput [JOINT_4]MAX_OUTPUT
setp pid.a.error-previous-target true
setp pid.a.maxerror .0005
net a-index-enable <=> pid.a.index-enable
net a-enable => pid.a.enable
net a-pos-cmd => pid.a.command
net a-vel-cmd => pid.a.command-deriv
net a-pos-fb => pid.a.feedback
net a-output <= pid.a.output
# Step Gen signals/setup
setp hm2_5i23.0.stepgen.04.dirsetup [JOINT_4]DIRSETUP
setp hm2_5i23.0.stepgen.04.dirhold [JOINT_4]DIRHOLD
setp hm2_5i23.0.stepgen.04.steplen [JOINT_4]STEPLEN
setp hm2_5i23.0.stepgen.04.stepspace [JOINT_4]STEPSPACE
setp hm2_5i23.0.stepgen.04.position-scale [JOINT_4]STEP_SCALE
setp hm2_5i23.0.stepgen.04.step_type 0
setp hm2_5i23.0.stepgen.04.control-type 1
setp hm2_5i23.0.stepgen.04.maxaccel [JOINT_4]STEPGEN_MAXACCEL
setp hm2_5i23.0.stepgen.04.maxvel [JOINT_4]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net a-pos-cmd <= joint.4.motor-pos-cmd
net a-vel-cmd <= joint.4.vel-cmd
net a-output <= hm2_5i23.0.stepgen.04.velocity-cmd
net a-pos-fb <= hm2_5i23.0.stepgen.04.position-fb
net a-pos-fb => joint.4.motor-pos-fb
net a-enable <= joint.4.amp-enable-out
net a-enable => hm2_5i23.0.stepgen.04.enable
# ---setup home / limit switch signals---
net a-home-sw => joint.4.home-sw-in
net a-neg-limit => joint.4.neg-lim-sw-in
net a-pos-limit => joint.4.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 axis-select-a halui.axis.a.select
net jog-a-pos halui.axis.a.plus
net jog-a-neg halui.axis.a.minus
net jog-a-analog halui.axis.a.analog
net a-is-homed halui.joint.3.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
net machine-is-on halui.machine.is-on
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi
# ---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
THCAD is powered by that custom PCB, custom PCB is powered by pc power supply. All share same GND.
THCAD FOUT+ goes to the encoder 0 A input.
As posted initially, THCAD arc voltage in+/- contacts are connected to a potentiometer for now that gives 0-10V
if the power on button in axis is not pressed (machine power off) all readings are correct. My VCP
meter shows the voltage that I have on the potentiometer.
In Hal I see the frequency coming from the THCAD, and changing with the Poti
Hal File
# Generated by PNCconf at Sat Apr 6 19:58:14 2019
# 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="firmware=hm2/5i23/SVST4_8.BIT num_encoders=4 num_pwmgens=4 num_stepgens=8"
setp hm2_5i23.0.pwmgen.pwm_frequency 20000
setp hm2_5i23.0.pwmgen.pdm_frequency 6000000
setp hm2_5i23.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.x2,pid.y,pid.z,pid.a
loadrt not names=torch_on_not
addf hm2_5i23.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.x2.do-pid-calcs servo-thread
addf pid.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.a.do-pid-calcs servo-thread
addf hm2_5i23.0.write servo-thread
addf torch_on_not servo-thread
# external output signals
# --- MACHINE-IS-ENABLED ---
setp hm2_5i23.0.gpio.040.is_output true
net machine-is-enabled hm2_5i23.0.gpio.040.out
# --- Torch-ON ---
setp hm2_5i23.0.gpio.041.is_output true
net torch_neg torch_on_not.out => hm2_5i23.0.gpio.041.out
net torch_on torch_on_not.in
# external input signals
# --- MIN-HOME-X ---
net min-home-x <= hm2_5i23.0.gpio.026.in_not
# --- MAX-X ---
net max-x <= hm2_5i23.0.gpio.027.in_not
# --- MIN-HOME-X2 ---
net min-home-x2 <= hm2_5i23.0.gpio.028.in_not
# --- MAX-X2 ---
net max-x2 <= hm2_5i23.0.gpio.029.in_not
# --- MIN-HOME-Y ---
net min-home-y <= hm2_5i23.0.gpio.032.in_not
# --- MAX-Y ---
net max-y <= hm2_5i23.0.gpio.033.in_not
# --- MIN-Z ---
net min-z <= hm2_5i23.0.gpio.034.in_not
# --- MAX-HOME-Z ---
net max-home-z <= hm2_5i23.0.gpio.035.in_not
# --- ESTOP-EXT ---
net estop-ext <= hm2_5i23.0.gpio.038.in
#*******************
# 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
setp pid.x.maxerror .0005
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# Step Gen signals/setup
setp hm2_5i23.0.stepgen.00.dirsetup [JOINT_0]DIRSETUP
setp hm2_5i23.0.stepgen.00.dirhold [JOINT_0]DIRHOLD
setp hm2_5i23.0.stepgen.00.steplen [JOINT_0]STEPLEN
setp hm2_5i23.0.stepgen.00.stepspace [JOINT_0]STEPSPACE
setp hm2_5i23.0.stepgen.00.position-scale [JOINT_0]STEP_SCALE
setp hm2_5i23.0.stepgen.00.step_type 0
setp hm2_5i23.0.stepgen.00.control-type 1
setp hm2_5i23.0.stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp hm2_5i23.0.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 <= hm2_5i23.0.stepgen.00.velocity-cmd
net x-pos-fb <= hm2_5i23.0.stepgen.00.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => hm2_5i23.0.stepgen.00.enable
# ---setup home / limit switch signals---
net min-home-x => joint.0.home-sw-in
net min-home-x => joint.0.neg-lim-sw-in
net max-x => joint.0.pos-lim-sw-in
#*******************
# Tandem AXIS X2 JOINT 1
#*******************
setp pid.x2.Pgain [JOINT_1]P
setp pid.x2.Igain [JOINT_1]I
setp pid.x2.Dgain [JOINT_1]D
setp pid.x2.bias [JOINT_1]BIAS
setp pid.x2.FF0 [JOINT_1]FF0
setp pid.x2.FF1 [JOINT_1]FF1
setp pid.x2.FF2 [JOINT_1]FF2
setp pid.x2.deadband [JOINT_1]DEADBAND
setp pid.x2.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.x2.error-previous-target true
setp pid.x2.maxerror .0005
net x2-index-enable <=> pid.x2.index-enable
net x2-enable => pid.x2.enable
net x2-pos-cmd => pid.x2.command
net x2-vel-cmd => pid.x2.command-deriv
net x2-pos-fb => pid.x2.feedback
net x2-output <= pid.x2.output
# Step Gen signals/setup for tandem axis
setp hm2_5i23.0.stepgen.01.dirsetup [JOINT_1]DIRSETUP
setp hm2_5i23.0.stepgen.01.dirhold [JOINT_1]DIRHOLD
setp hm2_5i23.0.stepgen.01.steplen [JOINT_1]STEPLEN
setp hm2_5i23.0.stepgen.01.stepspace [JOINT_1]STEPSPACE
setp hm2_5i23.0.stepgen.01.position-scale [JOINT_1]STEP_SCALE
setp hm2_5i23.0.stepgen.01.step_type 0
setp hm2_5i23.0.stepgen.01.control-type 1
setp hm2_5i23.0.stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp hm2_5i23.0.stepgen.01.maxvel [JOINT_1]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net x2-pos-cmd <= joint.1.motor-pos-cmd
net x2-vel-cmd <= joint.1.vel-cmd
net x2-output <= hm2_5i23.0.stepgen.01.velocity-cmd
net x2-pos-fb <= hm2_5i23.0.stepgen.01.position-fb
net x2-pos-fb => joint.1.motor-pos-fb
net x2-enable <= joint.1.amp-enable-out
net x2-enable => hm2_5i23.0.stepgen.01.enable
# ---setup home / limit switch signals---
net min-home-x2 => joint.1.home-sw-in
net min-home-x2 => joint.1.neg-lim-sw-in
net max-x2 => joint.1.pos-lim-sw-in
#*******************
# AXIS Y JOINT 2
#*******************
setp pid.y.Pgain [JOINT_2]P
setp pid.y.Igain [JOINT_2]I
setp pid.y.Dgain [JOINT_2]D
setp pid.y.bias [JOINT_2]BIAS
setp pid.y.FF0 [JOINT_2]FF0
setp pid.y.FF1 [JOINT_2]FF1
setp pid.y.FF2 [JOINT_2]FF2
setp pid.y.deadband [JOINT_2]DEADBAND
setp pid.y.maxoutput [JOINT_2]MAX_OUTPUT
setp pid.y.error-previous-target true
setp pid.y.maxerror .0005
net y-index-enable <=> pid.y.index-enable
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
net y-vel-cmd => pid.y.command-deriv
net y-pos-fb => pid.y.feedback
net y-output <= pid.y.output
# Step Gen signals/setup
setp hm2_5i23.0.stepgen.02.dirsetup [JOINT_2]DIRSETUP
setp hm2_5i23.0.stepgen.02.dirhold [JOINT_2]DIRHOLD
setp hm2_5i23.0.stepgen.02.steplen [JOINT_2]STEPLEN
setp hm2_5i23.0.stepgen.02.stepspace [JOINT_2]STEPSPACE
setp hm2_5i23.0.stepgen.02.position-scale [JOINT_2]STEP_SCALE
setp hm2_5i23.0.stepgen.02.step_type 0
setp hm2_5i23.0.stepgen.02.control-type 1
setp hm2_5i23.0.stepgen.02.maxaccel [JOINT_2]STEPGEN_MAXACCEL
setp hm2_5i23.0.stepgen.02.maxvel [JOINT_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net y-pos-cmd <= joint.2.motor-pos-cmd
net y-vel-cmd <= joint.2.vel-cmd
net y-output <= hm2_5i23.0.stepgen.02.velocity-cmd
net y-pos-fb <= hm2_5i23.0.stepgen.02.position-fb
net y-pos-fb => joint.2.motor-pos-fb
net y-enable <= joint.2.amp-enable-out
net y-enable => hm2_5i23.0.stepgen.02.enable
# ---setup home / limit switch signals---
net min-home-y => joint.2.home-sw-in
net min-home-y => joint.2.neg-lim-sw-in
net max-y => joint.2.pos-lim-sw-in
#*******************
# AXIS Z JOINT 3
#*******************
setp pid.z.Pgain [JOINT_3]P
setp pid.z.Igain [JOINT_3]I
setp pid.z.Dgain [JOINT_3]D
setp pid.z.bias [JOINT_3]BIAS
setp pid.z.FF0 [JOINT_3]FF0
setp pid.z.FF1 [JOINT_3]FF1
setp pid.z.FF2 [JOINT_3]FF2
setp pid.z.deadband [JOINT_3]DEADBAND
setp pid.z.maxoutput [JOINT_3]MAX_OUTPUT
setp pid.z.error-previous-target true
setp pid.z.maxerror .0005
net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-vel-cmd => pid.z.command-deriv
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp hm2_5i23.0.stepgen.03.dirsetup [JOINT_3]DIRSETUP
setp hm2_5i23.0.stepgen.03.dirhold [JOINT_3]DIRHOLD
setp hm2_5i23.0.stepgen.03.steplen [JOINT_3]STEPLEN
setp hm2_5i23.0.stepgen.03.stepspace [JOINT_3]STEPSPACE
setp hm2_5i23.0.stepgen.03.position-scale [JOINT_3]STEP_SCALE
setp hm2_5i23.0.stepgen.03.step_type 0
setp hm2_5i23.0.stepgen.03.control-type 1
setp hm2_5i23.0.stepgen.03.maxaccel [JOINT_3]STEPGEN_MAXACCEL
setp hm2_5i23.0.stepgen.03.maxvel [JOINT_3]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= joint.3.motor-pos-cmd
net z-vel-cmd <= joint.3.vel-cmd
net z-output <= hm2_5i23.0.stepgen.03.velocity-cmd
net z-pos-fb <= hm2_5i23.0.stepgen.03.position-fb
net z-pos-fb => joint.3.motor-pos-fb
net z-enable <= joint.3.amp-enable-out
net z-enable => hm2_5i23.0.stepgen.03.enable
# ---setup home / limit switch signals---
net max-home-z => joint.3.home-sw-in
net min-z => joint.3.neg-lim-sw-in
net max-home-z => joint.3.pos-lim-sw-in
#*******************
# AXIS A JOINT 4
#*******************
setp pid.a.Pgain [JOINT_4]P
setp pid.a.Igain [JOINT_4]I
setp pid.a.Dgain [JOINT_4]D
setp pid.a.bias [JOINT_4]BIAS
setp pid.a.FF0 [JOINT_4]FF0
setp pid.a.FF1 [JOINT_4]FF1
setp pid.a.FF2 [JOINT_4]FF2
setp pid.a.deadband [JOINT_4]DEADBAND
setp pid.a.maxoutput [JOINT_4]MAX_OUTPUT
setp pid.a.error-previous-target true
setp pid.a.maxerror .0005
net a-index-enable <=> pid.a.index-enable
net a-enable => pid.a.enable
net a-pos-cmd => pid.a.command
net a-vel-cmd => pid.a.command-deriv
net a-pos-fb => pid.a.feedback
net a-output <= pid.a.output
# Step Gen signals/setup
setp hm2_5i23.0.stepgen.04.dirsetup [JOINT_4]DIRSETUP
setp hm2_5i23.0.stepgen.04.dirhold [JOINT_4]DIRHOLD
setp hm2_5i23.0.stepgen.04.steplen [JOINT_4]STEPLEN
setp hm2_5i23.0.stepgen.04.stepspace [JOINT_4]STEPSPACE
setp hm2_5i23.0.stepgen.04.position-scale [JOINT_4]STEP_SCALE
setp hm2_5i23.0.stepgen.04.step_type 0
setp hm2_5i23.0.stepgen.04.control-type 1
setp hm2_5i23.0.stepgen.04.maxaccel [JOINT_4]STEPGEN_MAXACCEL
setp hm2_5i23.0.stepgen.04.maxvel [JOINT_4]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net a-pos-cmd <= joint.4.motor-pos-cmd
net a-vel-cmd <= joint.4.vel-cmd
net a-output <= hm2_5i23.0.stepgen.04.velocity-cmd
net a-pos-fb <= hm2_5i23.0.stepgen.04.position-fb
net a-pos-fb => joint.4.motor-pos-fb
net a-enable <= joint.4.amp-enable-out
net a-enable => hm2_5i23.0.stepgen.04.enable
# ---setup home / limit switch signals---
net a-home-sw => joint.4.home-sw-in
net a-neg-limit => joint.4.neg-lim-sw-in
net a-pos-limit => joint.4.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 axis-select-a halui.axis.a.select
net jog-a-pos halui.axis.a.plus
net jog-a-neg halui.axis.a.minus
net jog-a-analog halui.axis.a.analog
net a-is-homed halui.joint.3.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
net machine-is-on halui.machine.is-on
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi
# ---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
Please Log in or Create an account to join the conversation.
12 Apr 2019 17:05 #130739
by PCW
Replied by PCW on topic 2.8 hm2_encoder stops on machine power on
What encoder signal did you watch and did you examine the encoder A signal with halshow?
Please Log in or Create an account to join the conversation.
12 Apr 2019 17:17 #130740
by jgnoss
Replied by jgnoss on topic 2.8 hm2_encoder stops on machine power on
OK it works now, but I don't know why.
I transferred my setup to the shop, installed it into the machine and it behaves as it should.
Thanks for the help.
Ju
I transferred my setup to the shop, installed it into the machine and it behaves as it should.
Thanks for the help.
Ju
Please Log in or Create an account to join the conversation.
Time to create page: 0.087 seconds