My Grizzly G0619 mill
- my1987toyota
- Topic Author
- Offline
- Platinum Member
- Posts: 815
- Thank you received: 331
So when I was setting up the G0602 lathe for CNC with dedicated X and Z
jog wheels I decided to work on an MPG for My Mach3 to Linuxcnc G0619 mill conversion as well. Little did I know the can of worms
that would turn into. I am sure it didn't help that I was also setting it up for Feed and Spindle override at the same time.
Right know I have the Hal. file with everything on it .
# Generated by PNCconf at Thu Jun 24 20:14:27 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_eth board_ip="10.10.10.10" config=" num_encoders=1 num_pwmgens=0 num_stepgens=5 sserial_port_0=20xxxx"
setp [HMOT](CARD0).watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.a,pid.s
loadrt abs names=abs.spindle
loadrt lowpass names=lowpass.spindle
loadrt scale names=scale.spindle
loadrt classicladder_rt numPhysInputs=15 numPhysOutputs=15 numS32in=10 numS32out=10 numFloatIn=10 numFloatOut=10 numBits=50 numWords=50
loadrt mux16 names=jogincr,foincr,soincr
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.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.a.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf classicladder.0.refresh servo-thread
addf jogincr servo-thread
addf foincr servo-thread
addf soincr servo-thread
addf scale.spindle servo-thread
addf abs.spindle servo-thread
addf lowpass.spindle servo-thread
addf [HMOT](CARD0).write servo-thread
setp [HMOT](CARD0).dpll.01.timer-us -50
setp [HMOT](CARD0).stepgen.timer-number 1
# external output signals
# --- COOLANT-MIST ---
net coolant-mist => [HMOT](CARD0).7i76.0.0.output-06
# --- COOLANT-FLOOD ---
net coolant-flood => [HMOT](CARD0).7i76.0.0.output-07
# external input signals
# --- ESTOP-EXT ---
net estop-ext <= [HMOT](CARD0).7i76.0.0.input-00
# --- SPINDLE-AT-SPEED ---
net spindle-at-speed <= [HMOT](CARD0).7i76.0.0.input-01
# --- HOME-X ---
net home-x <= [HMOT](CARD0).7i76.0.0.input-02
# --- HOME-Y ---
net home-y <= [HMOT](CARD0).7i76.0.0.input-03
# --- HOME-Z ---
net home-z <= [HMOT](CARD0).7i76.0.0.input-04
# --- JOG-INCR-A ---
net jog-incr-a <= [HMOT](CARD0).7i76.0.0.input-05
# --- JOG-INCR-B ---
net jog-incr-b <= [HMOT](CARD0).7i76.0.0.input-06
# --- JOINT-SELECT-D ---
#net joint-select-d -commented out
net axis-select-a <= [HMOT](CARD0).7i76.0.0.input-20
# --- JOINT-SELECT-C ---
#net joint-select-c -commented out
net axis-select-z <= [HMOT](CARD0).7i76.0.0.input-21
# --- JOINT-SELECT-B ---
#net joint-select-b -commented out
net axis-select-y <= [HMOT](CARD0).7i76.0.0.input-22
# --- JOINT-SELECT-A JOINT AXIS X SELECT---
#net joint-select-a -commented out
net axis-select-x <= [HMOT](CARD0).7i76.0.0.input-23
# ---feed-overide-enable---
net fo-enable <= [HMOT](CARD0).7i76.0.0.input-24
# --- spindle-overide enable---
net so-enable <= [HMOT](CARD0).7i76.0.0.input-25
#*******************
# 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.000500
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 home-x => 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
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.y.maxerror 0.000500
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
# 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 y-pos-cmd <= joint.1.motor-pos-cmd
net y-vel-cmd <= joint.1.vel-cmd
net y-output <= [HMOT](CARD0).stepgen.01.velocity-cmd
net y-pos-fb <= [HMOT](CARD0).stepgen.01.position-fb
net y-pos-fb => joint.1.motor-pos-fb
net y-enable <= joint.1.amp-enable-out
net y-enable => [HMOT](CARD0).stepgen.01.enable
# ---setup home / limit switch signals---
net home-y => 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
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.000500
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.02.dirsetup [JOINT_2]DIRSETUP
setp [HMOT](CARD0).stepgen.02.dirhold [JOINT_2]DIRHOLD
setp [HMOT](CARD0).stepgen.02.steplen [JOINT_2]STEPLEN
setp [HMOT](CARD0).stepgen.02.stepspace [JOINT_2]STEPSPACE
setp [HMOT](CARD0).stepgen.02.position-scale [JOINT_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 [JOINT_2]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.02.maxvel [JOINT_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= joint.2.motor-pos-cmd
net z-vel-cmd <= joint.2.vel-cmd
net z-output <= [HMOT](CARD0).stepgen.02.velocity-cmd
net z-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net z-pos-fb => joint.2.motor-pos-fb
net z-enable <= joint.2.amp-enable-out
net z-enable => [HMOT](CARD0).stepgen.02.enable
# ---setup home / limit switch signals---
net home-z => 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
#*******************
# AXIS A JOINT 3
#*******************
setp pid.a.Pgain [JOINT_3]P
setp pid.a.Igain [JOINT_3]I
setp pid.a.Dgain [JOINT_3]D
setp pid.a.bias [JOINT_3]BIAS
setp pid.a.FF0 [JOINT_3]FF0
setp pid.a.FF1 [JOINT_3]FF1
setp pid.a.FF2 [JOINT_3]FF2
setp pid.a.deadband [JOINT_3]DEADBAND
setp pid.a.maxoutput [JOINT_3]MAX_OUTPUT
setp pid.a.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.a.maxerror 0.000500
net a-index-enable <=> pid.a.index-enable
net a-enable => pid.a.enable
net a-pos-cmd => pid.a.command
net a-pos-fb => pid.a.feedback
net a-output <= pid.a.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.03.dirsetup [JOINT_3]DIRSETUP
setp [HMOT](CARD0).stepgen.03.dirhold [JOINT_3]DIRHOLD
setp [HMOT](CARD0).stepgen.03.steplen [JOINT_3]STEPLEN
setp [HMOT](CARD0).stepgen.03.stepspace [JOINT_3]STEPSPACE
setp [HMOT](CARD0).stepgen.03.position-scale [JOINT_3]STEP_SCALE
setp [HMOT](CARD0).stepgen.03.step_type 0
setp [HMOT](CARD0).stepgen.03.control-type 1
setp [HMOT](CARD0).stepgen.03.maxaccel [JOINT_3]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.03.maxvel [JOINT_3]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net a-pos-cmd <= joint.3.motor-pos-cmd
net a-vel-cmd <= joint.3.vel-cmd
net a-output <= [HMOT](CARD0).stepgen.03.velocity-cmd
net a-pos-fb <= [HMOT](CARD0).stepgen.03.position-fb
net a-pos-fb => joint.3.motor-pos-fb
net a-enable <= joint.3.amp-enable-out
net a-enable => [HMOT](CARD0).stepgen.03.enable
# ---setup home / limit switch signals---
net a-home-sw => joint.3.home-sw-in
net a-neg-limit => joint.3.neg-lim-sw-in
net a-pos-limit => joint.3.pos-lim-sw-in
#*******************
# SPINDLE
#*******************
setp pid.s.Pgain [SPINDLE_0]P
setp pid.s.Igain [SPINDLE_0]I
setp pid.s.Dgain [SPINDLE_0]D
setp pid.s.bias [SPINDLE_0]BIAS
setp pid.s.FF0 [SPINDLE_0]FF0
setp pid.s.FF1 [SPINDLE_0]FF1
setp pid.s.FF2 [SPINDLE_0]FF2
setp pid.s.deadband [SPINDLE_0]DEADBAND
setp pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT
setp pid.s.error-previous-target true
net spindle-index-enable <=> pid.s.index-enable
net spindle-enable => pid.s.enable
net spindle-vel-cmd-rpm-abs => pid.s.command
net spindle-vel-fb-rpm-abs => pid.s.feedback
net spindle-output <= pid.s.output
# ---digital potentionmeter output signals/setup---
setp [HMOT](CARD0).7i76.0.0.spinout-minlim [SPINDLE_0]OUTPUT_MIN_LIMIT
setp [HMOT](CARD0).7i76.0.0.spinout-maxlim [SPINDLE_0]OUTPUT_MAX_LIMIT
setp [HMOT](CARD0).7i76.0.0.spinout-scalemax [SPINDLE_0]OUTPUT_SCALE
net spindle-output => [HMOT](CARD0).7i76.0.0.spinout
net spindle-enable => [HMOT](CARD0).7i76.0.0.spinena
net spindle-ccw => [HMOT](CARD0).7i76.0.0.spindir
# ---Encoder feedback signals/setup---
setp [HMOT](CARD0).encoder.00.counter-mode 0
setp [HMOT](CARD0).encoder.00.filter 1
setp [HMOT](CARD0).encoder.00.index-invert 0
setp [HMOT](CARD0).encoder.00.index-mask 0
setp [HMOT](CARD0).encoder.00.index-mask-invert 0
setp [HMOT](CARD0).encoder.00.scale [SPINDLE_0]ENCODER_SCALE
net spindle-revs <= [HMOT](CARD0).encoder.00.position
net spindle-vel-fb-rps <= [HMOT](CARD0).encoder.00.velocity
net spindle-index-enable <=> [HMOT](CARD0).encoder.00.index-enable
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= spindle.0.speed-out-rps
net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs
net spindle-vel-cmd-rpm <= spindle.0.speed-out
net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs
net spindle-enable <= spindle.0.on
net spindle-cw <= spindle.0.forward
net spindle-ccw <= spindle.0.reverse
net spindle-brake <= spindle.0.brake
net spindle-revs => spindle.0.revs
net spindle-at-speed => spindle.0.at-speed
net spindle-vel-fb-rps => spindle.0.speed-in
net spindle-index-enable <=> spindle.0.index-enable
# Use ACTUAL spindle velocity from spindle encoder
# spindle-velocity bounces around so we filter it with lowpass
# spindle-velocity is signed so we use absolute component to remove sign
# ACTUAL velocity is in RPS not RPM so we scale it.
setp scale.spindle.gain 60
setp lowpass.spindle.gain 1.000000
net spindle-vel-fb-rps => scale.spindle.in
net spindle-fb-rpm scale.spindle.out => abs.spindle.in
net spindle-fb-rpm-abs abs.spindle.out => lowpass.spindle.in
net spindle-fb-rpm-abs-filtered lowpass.spindle.out
#******************************
# 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 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
# ---jogwheel signals to mesa encoder - shared MPG---
net axis-selected-count <= [HMOT](CARD0).7i76.0.0.enc0.count
# ---mpg signals---
# for axis x MPG
setp axis.x.jog-vel-mode 0
net selected-jog-incr => axis.x.jog-scale
net axis-select-x => axis.x.jog-enable
net axis-selected-count => axis.x.jog-counts
# for axis y MPG
setp axis.y.jog-vel-mode 0
net selected-jog-incr => axis.y.jog-scale
net axis-select-y => axis.y.jog-enable
net axis-selected-count => axis.y.jog-counts
# for axis z MPG
setp axis.z.jog-vel-mode 0
net selected-jog-incr => axis.z.jog-scale
net axis-select-z => axis.z.jog-enable
net axis-selected-count => axis.z.jog-counts
# for axis a MPG
setp axis.a.jog-vel-mode 0
net selected-jog-incr => axis.a.jog-scale
net axis-select-a => axis.a.jog-enable
net axis-selected-count => axis.a.jog-counts
# connect selectable mpg jog increments
net jog-incr-a => jogincr.sel0
net jog-incr-b => jogincr.sel1
net jog-incr-c => jogincr.sel2
net jog-incr-d => jogincr.sel3
net selected-jog-incr <= jogincr.out-f
setp jogincr.debounce-time 0.200000
setp jogincr.use-graycode False
setp jogincr.suppress-no-input False
setp jogincr.in00 0.000000
setp jogincr.in01 0.000100
setp jogincr.in02 0.001000
setp jogincr.in03 0.000000
setp jogincr.in04 0.010000
setp jogincr.in05 0.000000
setp jogincr.in06 0.000000
setp jogincr.in07 0.000000
setp jogincr.in08 0.100000
setp jogincr.in09 0.000000
setp jogincr.in10 0.000000
setp jogincr.in11 0.000000
setp jogincr.in12 0.000000
setp jogincr.in13 0.000000
setp jogincr.in14 0.000000
setp jogincr.in15 0.000000
# connect feed overide increments - MPG
setp halui.feed-override.direct-value false
setp halui.feed-override.scale .01
net fo-enable => halui.feed-override.count-enable
net axis-selected-count => halui.feed-override.counts
# connect spindle overide increments - MPG
setp halui.spindle.0.override.direct-value false
setp halui.spindle.0.override.scale .01
net so-enable => halui.spindle.0.override.count-enable
net axis-selected-count => halui.spindle.0.override.counts
# ---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
# Load Classicladder without GUI (can reload LADDER GUI in AXIS GUI
loadusr classicladder --nogui custom.clp
I found a few different hal. files to check out and that really helped me figure out how to make mine work. I guess Like with Arduino their are many ways to write a program to achieve the same goal. Still very frustrating to Noobs like me.
Thanks to rodw if he reads this, your hal. file on page 3 of your spaceship build is one of the ones that helped
forum.linuxcnc.org/show-your-stuff/32029...build?start=20#85279
forum.linuxcnc.org/show-your-stuff/32029...build?start=20#85305
another one that helped isn't on this site but if you are using the 5i25/6i25 and 7i76 cards this my help as well.
wapl.es/cnc/2020/02/23/linuxcnc-jog-wheel-setup.html
All in All I have so much to do as I continue to tumble down the Linuxcnc rabbit hole. I am starting to wonder which is more
enjoyable building the machines to make parts or actually making the parts? HMMM
Please Log in or Create an account to join the conversation.
- tommylight
- Away
- Moderator
- Posts: 19304
- Thank you received: 6463
Please Log in or Create an account to join the conversation.
- my1987toyota
- Topic Author
- Offline
- Platinum Member
- Posts: 815
- Thank you received: 331
Building the machines!
what if its making the parts to build more machines ?
Please Log in or Create an account to join the conversation.
- tommylight
- Away
- Moderator
- Posts: 19304
- Thank you received: 6463
That's why i have 3D printers now, printing parts for more 3D printers !
Building the machines!
what if its making the parts to build more machines ?
SEND HELP !!!!
Please Log in or Create an account to join the conversation.
- my1987toyota
- Topic Author
- Offline
- Platinum Member
- Posts: 815
- Thank you received: 331
See tommylight first step is admitting it. LOL
Please Log in or Create an account to join the conversation.
- my1987toyota
- Topic Author
- Offline
- Platinum Member
- Posts: 815
- Thank you received: 331
in the process of doing that I ended up writing a simple MPG hal. for a 5 axis with Feed and Spindle override.
I will actually be using a 4 axis on the mill. If anyone is interested check out this subject here on the forum
forum.linuxcnc.org/47-hal-examples/42913-simple-mpg-hal-s
Please Log in or Create an account to join the conversation.
Your next challenge is to use some of the MUX components to reduce the pin count.
eg you can do scale select with 2 pins and 5 axis select with 3 pins
To do 5 axis plus 2 overrides you will need 4 pins which would allow 16 seperate selections
to do this you have to think in binary and from memory you need to convert from a float to long integer using the correct hal component..
Please Log in or Create an account to join the conversation.
- my1987toyota
- Topic Author
- Offline
- Platinum Member
- Posts: 815
- Thank you received: 331
Admittedly yes it's a bit of a pin hog . Simple can mean many things this would be the easiest one I feel a nooby ( like myself ) could wrap their head around.rodw post=213064 userid=20660Great work but it looks like you are consuming a lot of pins. This could pose a problem down the track if you are really a machine building addict who by definition wants to consume all the available pins!
Your next challenge is to use some of the MUX components to reduce the pin count.
eg you can do scale select with 2 pins and 5 axis select with 3 pins
To do 5 axis plus 2 overrides you will need 4 pins which would allow 16 seperate selections
to do this you have to think in binary and from memory you need to convert from a float to long integer using the correct hal component..
Also I am not fully up to speed yet on using mux4 or mux16 to bring the pin count down . I did fiddle around with mux16 a little to bring the pin count down but I didn't feel comfortable baking that into the code at this point . In my opinion their is a lack of easy hal. examples and integration of MPG panels or pendants. Even pro athletes have to start with baby steps. Linuxcnc is no different. That said I do intend to do more complicated but lower pin count MPG's down the road.
Please Log in or Create an account to join the conversation.
I've actually been meaning to take my MPG code and move it into a dedicated hal file so it can be shared
Here is what I came up with excluding the loadrt and addf commands.. Still not sure the ilowpass has been done correct. First time I tried to use it I had a massive crash because 1 click was equal to one metre!
# ilowpass filter
setp ilowpass.0.scale 10
setp ilowpass.0.gain 0.01
# Setup Jog Pendant on each axis
setp axis.x.jog-vel-mode 0
setp axis.y.jog-vel-mode 0
setp axis.z.jog-vel-mode 0
# Scale Select metric (mm)
setp mux4.0.in0 0.0
setp mux4.0.in1 1.0
setp mux4.0.in2 0.01
setp mux4.0.in3 0.1
#Axis Select (0=off, 1=x, 2=z, 3=y, na, 5=6, 6=4, 7=5)
setp mux8.0.in0 0
setp mux8.0.in1 1
setp mux8.0.in2 2
setp mux8.0.in3 3
setp mux8.0.in4 4
setp mux8.0.in5 5
setp mux8.0.in6 6
setp mux8.0.in7 7
net mux8-sel0 <= hm2_7i76e.0.7i76.0.0.input-23
net mux8-sel1 <= hm2_7i76e.0.7i76.0.0.input-24
net mux8-sel2 <= hm2_7i76e.0.7i76.0.0.input-25
net mux8-sel0 => mux8.0.sel0
net mux8-sel1 => mux8.0.sel1
net mux8-sel2 => mux8.0.sel2
net mux-float conv-float-s32.1.in <= mux8.0.out
net mux-s32 <= conv-float-s32.1.out
net mux-s32 => select8.0.sel
net axis-select-x <= select8.0.out1
net axis-select-y <= select8.0.out3
net axis-select-z <= select8.0.out2
net axis-select-4 <= select8.0.out6
net axis-select-5 <= select8.0.out7
net axis-select-6 <= select8.0.out5
net axis-select-x => axis.x.jog-enable
net axis-select-y => axis.y.jog-enable
net axis-select-z => axis.z.jog-enable
# Encoder counts
net jog-counter <= hm2_7i76e.0.7i76.0.0.enc0.count
net jog-counter => ilowpass.0.in
net smooth-counter <= ilowpass.0.out
net jog-counter => axis.x.jog-counts
net jog-counter => axis.y.jog-counts
net jog-counter => axis.z.jog-counts
net mux4-sel1 <= hm2_7i76e.0.7i76.0.0.input-22
net mux4-sel0 <= hm2_7i76e.0.7i76.0.0.input-21
net mux4-sel1 => mux4.0.sel1
net mux4-sel0 => mux4.0.sel0
net jog-scale <= mux4.0.out
net jog-scale => axis.x.jog-scale
net jog-scale => axis.y.jog-scale
net jog-scale => axis.z.jog-scale
Hmm, I wonder where the preview has gone?
Please Log in or Create an account to join the conversation.
net axis-select-4 <= select8.0.out6
net axis-select-5 <= select8.0.out7
net axis-select-6 <= select8.0.out5
Please Log in or Create an account to join the conversation.