How to wire up a SpinX1 to 5i20 / 7i37
- MATZE-ATZE-SCH
- Offline
- Senior Member
Less
More
- Posts: 51
- Thank you received: 6
13 Jan 2019 22:33 #124115
by MATZE-ATZE-SCH
How to wire up a SpinX1 to 5i20 / 7i37 was created by MATZE-ATZE-SCH
Hello.
Im new to the Linux Stuff an want to convert a manual Mill to CNC with the help of LinuxCNC and Mesa Cards.
Now im on the Point, where I need to control a VFD via LinuxCNC. I have a 5i20, a 7i37TA and a 7i33TA for the axis motion.
Also a SpinX1. It is possible, to connect the SpinX1 to the 7i37TA, to get the PWM, ENA and DIR Signal?
And if it is, how I would connect it?
Would like to use Out0 for PWM, Out2 for ENA and Out4 for the DIR Signal.
The 7i37 is on P3 on the 5i20.
Best regards,
Marcel
Im new to the Linux Stuff an want to convert a manual Mill to CNC with the help of LinuxCNC and Mesa Cards.
Now im on the Point, where I need to control a VFD via LinuxCNC. I have a 5i20, a 7i37TA and a 7i33TA for the axis motion.
Also a SpinX1. It is possible, to connect the SpinX1 to the 7i37TA, to get the PWM, ENA and DIR Signal?
And if it is, how I would connect it?
Would like to use Out0 for PWM, Out2 for ENA and Out4 for the DIR Signal.
The 7i37 is on P3 on the 5i20.
Best regards,
Marcel
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17860
- Thank you received: 4775
14 Jan 2019 01:35 #124131
by PCW
Replied by PCW on topic How to wire up a SpinX1 to 5i20 / 7i37
Unfortunately The 7I37 outputs are a bit too slow for the SPINX1
The SpinX1 would be better connected directly to the 5I20s I/O pins
If you use a SV12 configuration you could have
P2 7I33
P3 SPINX1 using 3 pins directly from 5I20
P4 7I37
The SpinX1 would be better connected directly to the 5I20s I/O pins
If you use a SV12 configuration you could have
P2 7I33
P3 SPINX1 using 3 pins directly from 5I20
P4 7I37
Please Log in or Create an account to join the conversation.
- MATZE-ATZE-SCH
- Offline
- Senior Member
Less
More
- Posts: 51
- Thank you received: 6
14 Jan 2019 08:58 #124146
by MATZE-ATZE-SCH
Replied by MATZE-ATZE-SCH on topic How to wire up a SpinX1 to 5i20 / 7i37
Hello,
I have the SVST8_4 firmware on the 5i20.
Will this work, too?
And can I do the config with the wizard?
Or need I to change the files manuel?
Best regards
Marcel
I have the SVST8_4 firmware on the 5i20.
Will this work, too?
And can I do the config with the wizard?
Or need I to change the files manuel?
Best regards
Marcel
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17860
- Thank you received: 4775
14 Jan 2019 15:48 #124163
by PCW
Replied by PCW on topic How to wire up a SpinX1 to 5i20 / 7i37
I think you can hand edit the hal file and change the firmware name
and the num_pwmgens token. This should not change anything else in your setup.
Then you will need to setup the hal PWM initialization and net connections
for the PWM pins on P3 you wish to use for the SPINX1
and the num_pwmgens token. This should not change anything else in your setup.
Then you will need to setup the hal PWM initialization and net connections
for the PWM pins on P3 you wish to use for the SPINX1
Please Log in or Create an account to join the conversation.
- MATZE-ATZE-SCH
- Offline
- Senior Member
Less
More
- Posts: 51
- Thank you received: 6
14 Jan 2019 17:13 #124171
by MATZE-ATZE-SCH
Replied by MATZE-ATZE-SCH on topic How to wire up a SpinX1 to 5i20 / 7i37
Hello,
Ok, I changed the input and output pins in the .hal from P3 to P4. That works fine.
The num_pwmgens i change from 4 to 5.
Now, how do i setup the hal to get the pwm, enable and dir signal to P3?
Can you show me an example?
Best regards
Marcel
Ok, I changed the input and output pins in the .hal from P3 to P4. That works fine.
The num_pwmgens i change from 4 to 5.
Now, how do i setup the hal to get the pwm, enable and dir signal to P3?
Can you show me an example?
Best regards
Marcel
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17860
- Thank you received: 4775
14 Jan 2019 17:19 #124172
by PCW
Replied by PCW on topic How to wire up a SpinX1 to 5i20 / 7i37
You should be able to just copy paste a motion axis set of PWM initialization and net connections (changing the PWM mode to 0) and scaling/spindle net connections as appropriate
Please Log in or Create an account to join the conversation.
- MATZE-ATZE-SCH
- Offline
- Senior Member
Less
More
- Posts: 51
- Thank you received: 6
15 Jan 2019 18:14 #124252
by MATZE-ATZE-SCH
Replied by MATZE-ATZE-SCH on topic How to wire up a SpinX1 to 5i20 / 7i37
Hello,
OK, I have wired up the SpinX1.
But I don get it to work...
This is the things, I added to my .hal:
loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=4 num_pwmgens=5 num_stepgens=0"
-There I changes the num pwmgens from 4 to 5
loadrt pwmgen output_type=0
addf pwmgen.update servo-thread
addf pwmgen.make-pulses servo-thread
net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value
net spindle-on motion.spindle-on => pwmgen.0.enable
net spindle-pwm pwmgen.0.pwm => hm2_5i20.0.gpio.024.out
# Set the spindle's top speed in RPM
setp pwmgen.0.scale 3000
net spindle-enable motion.spindle-on => hm2_5i20.0.gpio.025.out
net spindle-fwd motion.spindle-forward => hm2_5i20.0.gpio.026.out
But I can not get it to run?
Best regards
Marcel
OK, I have wired up the SpinX1.
But I don get it to work...
This is the things, I added to my .hal:
Warning: Spoiler!
loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=4 num_pwmgens=5 num_stepgens=0"
-There I changes the num pwmgens from 4 to 5
loadrt pwmgen output_type=0
addf pwmgen.update servo-thread
addf pwmgen.make-pulses servo-thread
net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value
net spindle-on motion.spindle-on => pwmgen.0.enable
net spindle-pwm pwmgen.0.pwm => hm2_5i20.0.gpio.024.out
# Set the spindle's top speed in RPM
setp pwmgen.0.scale 3000
net spindle-enable motion.spindle-on => hm2_5i20.0.gpio.025.out
net spindle-fwd motion.spindle-forward => hm2_5i20.0.gpio.026.out
But I can not get it to run?
Best regards
Marcel
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17860
- Thank you received: 4775
15 Jan 2019 18:34 #124254
by PCW
Replied by PCW on topic How to wire up a SpinX1 to 5i20 / 7i37
Umm you are setting up a software PWM which is not needed and will not work well
You really want to enable and setup the hardware PWMGen channel 4
(on P3 pins 15,19,23 = IO 31,33,35 = PWM, DIR,ENA )
If you post your existing hal and ini files and I can copy paste a bit back at you with pwm channel 4 support
You really want to enable and setup the hardware PWMGen channel 4
(on P3 pins 15,19,23 = IO 31,33,35 = PWM, DIR,ENA )
If you post your existing hal and ini files and I can copy paste a bit back at you with pwm channel 4 support
Please Log in or Create an account to join the conversation.
- MATZE-ATZE-SCH
- Offline
- Senior Member
Less
More
- Posts: 51
- Thank you received: 6
15 Jan 2019 19:15 #124258
by MATZE-ATZE-SCH
Replied by MATZE-ATZE-SCH on topic How to wire up a SpinX1 to 5i20 / 7i37
Hello,
here is the .HAL:
# Generated by PNCconf at Sat Nov 24 21:24:44 2018
# Änderungen an dieser Datei werden beim nächsten
# overwritten when you run PNCconf again
loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hostmot2
loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=4 num_pwmgens=5 num_stepgens=0"
setp hm2_5i20.0.pwmgen.pwm_frequency 60000
setp hm2_5i20.0.pwmgen.pdm_frequency 6000000
setp hm2_5i20.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s
addf hm2_5i20.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_5i20.0.write servo-thread
# Spindel
loadrt pwmgen output_type=0
addf pwmgen.update servo-thread
addf pwmgen.make-pulses servo-thread
net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value
net spindle-on motion.spindle-on => pwmgen.0.enable
net spindle-pwm pwmgen.0.pwm => hm2_5i20.0.gpio.024.out
# Set the spindle's top speed in RPM
setp pwmgen.0.scale 3000
net spindle-enable motion.spindle-on => hm2_5i20.0.gpio.025.in
net spindle-fwd motion.spindle-forward => hm2_5i20.0.gpio.026.out
#net spindle-rev motion.spindle-reverse => hm2_5i20.0.gpio.026.out
# external output signals
# --- COOLANT-FLOOD ---
setp hm2_5i20.0.gpio.065.is_output true
net coolant-flood hm2_5i20.0.gpio.065.out
setp hm2_5i20.0.gpio.065.invert_output true
# external input signals
# --- ESTOP-EXT ---
net estop-ext <= hm2_5i20.0.gpio.049.in
# --- MIN-X ---
net min-x <= hm2_5i20.0.gpio.048.in
# --- MAX-X ---
net max-x <= hm2_5i20.0.gpio.050.in
# --- MIN-Z ---
net min-z <= hm2_5i20.0.gpio.051.in
# --- MIN-Y ---
net min-y <= hm2_5i20.0.gpio.052.in
# --- MAX-Z ---
net max-z <= hm2_5i20.0.gpio.053.in
# --- MAX-Y ---
net max-y <= hm2_5i20.0.gpio.054.in
#*******************
# AXIS X
#*******************
setp pid.x.Pgain [AXIS_0]P
setp pid.x.Igain [AXIS_0]I
setp pid.x.Dgain [AXIS_0]D
setp pid.x.bias [AXIS_0]BIAS
setp pid.x.FF0 [AXIS_0]FF0
setp pid.x.FF1 [AXIS_0]FF1
setp pid.x.FF2 [AXIS_0]FF2
setp pid.x.deadband [AXIS_0]DEADBAND
setp pid.x.maxoutput [AXIS_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-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output => pid.x.output
# ---PWM Generator signals/setup---
setp hm2_5i20.0.pwmgen.00.output-type 1
setp hm2_5i20.0.pwmgen.00.scale [AXIS_0]OUTPUT_SCALE
net x-output => hm2_5i20.0.pwmgen.00.value
net x-pos-cmd axis.0.motor-pos-cmd
net x-enable axis.0.amp-enable-out => hm2_5i20.0.pwmgen.00.enable
# ---Encoder feedback signals/setup---
setp hm2_5i20.0.encoder.00.counter-mode 0
setp hm2_5i20.0.encoder.00.filter 1
setp hm2_5i20.0.encoder.00.index-invert 0
setp hm2_5i20.0.encoder.00.index-mask 0
setp hm2_5i20.0.encoder.00.index-mask-invert 0
setp hm2_5i20.0.encoder.00.scale [AXIS_0]ENCODER_SCALE
net x-pos-fb <= hm2_5i20.0.encoder.00.position
net x-vel-fb <= hm2_5i20.0.encoder.00.velocity
net x-pos-fb => axis.0.motor-pos-fb
net x-index-enable axis.0.index-enable <=> hm2_5i20.0.encoder.00.index-enable
net x-pos-rawcounts <= hm2_5i20.0.encoder.00.rawcounts
# ---setup home / limit switch signals---
net x-home-sw => axis.0.home-sw-in
net x-neg-limit => axis.0.neg-lim-sw-in
net x-pos-limit => axis.0.pos-lim-sw-in
#*******************
# AXIS Y
#*******************
setp pid.y.Pgain [AXIS_1]P
setp pid.y.Igain [AXIS_1]I
setp pid.y.Dgain [AXIS_1]D
setp pid.y.bias [AXIS_1]BIAS
setp pid.y.FF0 [AXIS_1]FF0
setp pid.y.FF1 [AXIS_1]FF1
setp pid.y.FF2 [AXIS_1]FF2
setp pid.y.deadband [AXIS_1]DEADBAND
setp pid.y.maxoutput [AXIS_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-vel-cmd => pid.y.command-deriv
net y-pos-fb => pid.y.feedback
net y-output => pid.y.output
# ---PWM Generator signals/setup---
setp hm2_5i20.0.pwmgen.01.output-type 1
setp hm2_5i20.0.pwmgen.01.scale [AXIS_1]OUTPUT_SCALE
net y-output => hm2_5i20.0.pwmgen.01.value
net y-pos-cmd axis.1.motor-pos-cmd
net y-enable axis.1.amp-enable-out => hm2_5i20.0.pwmgen.01.enable
# ---Encoder feedback signals/setup---
setp hm2_5i20.0.encoder.01.counter-mode 0
setp hm2_5i20.0.encoder.01.filter 1
setp hm2_5i20.0.encoder.01.index-invert 0
setp hm2_5i20.0.encoder.01.index-mask 0
setp hm2_5i20.0.encoder.01.index-mask-invert 0
setp hm2_5i20.0.encoder.01.scale [AXIS_1]ENCODER_SCALE
net y-pos-fb <= hm2_5i20.0.encoder.01.position
net y-vel-fb <= hm2_5i20.0.encoder.01.velocity
net y-pos-fb => axis.1.motor-pos-fb
net y-index-enable axis.1.index-enable <=> hm2_5i20.0.encoder.01.index-enable
net y-pos-rawcounts <= hm2_5i20.0.encoder.01.rawcounts
# ---setup home / limit switch signals---
net y-home-sw => axis.1.home-sw-in
net y-neg-limit => axis.1.neg-lim-sw-in
net y-pos-limit => axis.1.pos-lim-sw-in
#*******************
# AXIS Z
#*******************
setp pid.z.Pgain [AXIS_2]P
setp pid.z.Igain [AXIS_2]I
setp pid.z.Dgain [AXIS_2]D
setp pid.z.bias [AXIS_2]BIAS
setp pid.z.FF0 [AXIS_2]FF0
setp pid.z.FF1 [AXIS_2]FF1
setp pid.z.FF2 [AXIS_2]FF2
setp pid.z.deadband [AXIS_2]DEADBAND
setp pid.z.maxoutput [AXIS_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-vel-cmd => pid.z.command-deriv
net z-pos-fb => pid.z.feedback
net z-output => pid.z.output
# ---PWM Generator signals/setup---
setp hm2_5i20.0.pwmgen.02.output-type 1
setp hm2_5i20.0.pwmgen.02.scale [AXIS_2]OUTPUT_SCALE
net z-output => hm2_5i20.0.pwmgen.02.value
net z-pos-cmd axis.2.motor-pos-cmd
net z-enable axis.2.amp-enable-out => hm2_5i20.0.pwmgen.02.enable
# ---Encoder feedback signals/setup---
setp hm2_5i20.0.encoder.02.counter-mode 0
setp hm2_5i20.0.encoder.02.filter 1
setp hm2_5i20.0.encoder.02.index-invert 0
setp hm2_5i20.0.encoder.02.index-mask 0
setp hm2_5i20.0.encoder.02.index-mask-invert 0
setp hm2_5i20.0.encoder.02.scale [AXIS_2]ENCODER_SCALE
net z-pos-fb <= hm2_5i20.0.encoder.02.position
net z-vel-fb <= hm2_5i20.0.encoder.02.velocity
net z-pos-fb => axis.2.motor-pos-fb
net z-index-enable axis.2.index-enable <=> hm2_5i20.0.encoder.02.index-enable
net z-pos-rawcounts <= hm2_5i20.0.encoder.02.rawcounts
# ---setup home / limit switch signals---
net z-home-sw => axis.2.home-sw-in
net z-neg-limit => axis.2.neg-lim-sw-in
net z-pos-limit => axis.2.pos-lim-sw-in
#*******************
# SPINDLE S
#*******************
#setp pid.s.Pgain [SPINDLE_9]P
#setp pid.s.Igain [SPINDLE_9]I
#setp pid.s.Dgain [SPINDLE_9]D
#setp pid.s.bias [SPINDLE_9]BIAS
#setp pid.s.FF0 [SPINDLE_9]FF0
#setp pid.s.FF1 [SPINDLE_9]FF1
#setp pid.s.FF2 [SPINDLE_9]FF2
#setp pid.s.deadband [SPINDLE_9]DEADBAND
#setp pid.s.maxoutput [SPINDLE_9]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 => pid.s.command
#net spindle-vel-fb-rpm => pid.s.feedback
#net spindle-output <= pid.s.output
# ---setup spindle control signals---
#net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
#net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
#net spindle-vel-cmd-rpm <= motion.spindle-speed-out
#net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
#net spindle-enable <= motion.spindle-on
#net spindle-cw <= motion.spindle-forward
#net spindle-ccw <= motion.spindle-reverse
#net spindle-brake <= motion.spindle-brake
#net spindle-revs => motion.spindle-revs
#net spindle-at-speed => motion.spindle-at-speed
#net spindle-vel-fb-rps => motion.spindle-speed-in
#net spindle-index-enable <=> motion.spindle-index-enable
# ---Setup spindle at speed signals---
#sets spindle-at-speed true
#******************************
# connect miscellaneous signals
#******************************
# ---HALUI signals---
net joint-select-a halui.joint.0.select
net x-is-homed halui.joint.0.is-homed
net jog-x-pos halui.jog.0.plus
net jog-x-neg halui.jog.0.minus
net jog-x-analog halui.jog.0.analog
net joint-select-b halui.joint.1.select
net y-is-homed halui.joint.1.is-homed
net jog-y-pos halui.jog.1.plus
net jog-y-neg halui.jog.1.minus
net jog-y-analog halui.jog.1.analog
net joint-select-c halui.joint.2.select
net z-is-homed halui.joint.2.is-homed
net jog-z-pos halui.jog.2.plus
net jog-z-neg halui.jog.2.minus
net jog-z-analog halui.jog.2.analog
net jog-selected-pos halui.jog.selected.plus
net jog-selected-neg halui.jog.selected.minus
net spindle-manual-cw halui.spindle.forward
net spindle-manual-ccw halui.spindle.reverse
net spindle-manual-stop halui.spindle.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.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-inhttps://forum.linuxcnc.org/27-driver-boards/35843-how-to-wire-up-a-spinx1-to-5i20-7i37/reply#
# ---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
And here is my .INI
# Generated by PNCconf at Sat Nov 24 21:24:44 2018
# Änderungen an dieser Datei werden beim nächsten
# overwritten when you run PNCconf again
[EMC]
MACHINE = Fraese
DEBUG = 0
[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 1.500000
MAX_SPINDLE_OVERRIDE = 1.500000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/marcel/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 6.000000
MAX_LINEAR_VELOCITY = 83.333400
MIN_LINEAR_VELOCITY = 0.500000
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
COMM_WAIT = 0.010
SERVO_PERIOD = 1000000
[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i20
[HAL]
HALUI = halui
HALFILE = Fraese.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal
[HALUI]
[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 83.33
MAX_LINEAR_VELOCITY = 166.666
NO_FORCE_HOMING = 1
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
TOOL_CHANGE_QUILL_UP = 1
#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 10.0
MAX_VELOCITY = 83.33333333
MAX_ACCELERATION = 1000.0
P = 10
I = 0
D = 0
FF0 = 0
FF1 = 0.02
FF2 = 0.001
BIAS = 0
DEADBAND = 0.0001
MAX_OUTPUT = 10
ENCODER_SCALE = -1000
OUTPUT_SCALE = -10
MIN_LIMIT = -300
MAX_LIMIT = 300
HOME_OFFSET = 0.0
#********************
# Axis Y
#********************
[AXIS_1]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 750.0
P = 50
I = 0
D = 0
FF0 = 0
FF1 = 1
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 0
ENCODER_SCALE = 1
OUTPUT_SCALE = 10
MIN_LIMIT = -0.01
MAX_LIMIT = 2e+11
HOME_OFFSET = 0.0
#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 10.0
MAX_VELOCITY = 83.33333333
MAX_ACCELERATION = 1000.0
P = 15
I = 0
D = 0
FF0 = 0
FF1 = 0.02
FF2 = 0.001
BIAS = 0
DEADBAND = 0.0001
MAX_OUTPUT = 10
# ENCODER_SCALE = -2672.0107
ENCODER_SCALE = -1000
OUTPUT_SCALE = 10
MIN_LIMIT = -300.0
MAX_LIMIT = 300.0
HOME_OFFSET = 0.0
#********************
# Spindle
#********************
[SPINDLE_9]
P = 0.0
I = 0.0
D = 0.0
FF0 = 1.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 2000.0
Thank you for your help!
Best regards
Marcel
here is the .HAL:
Warning: Spoiler!
# Generated by PNCconf at Sat Nov 24 21:24:44 2018
# Änderungen an dieser Datei werden beim nächsten
# overwritten when you run PNCconf again
loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hostmot2
loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=4 num_pwmgens=5 num_stepgens=0"
setp hm2_5i20.0.pwmgen.pwm_frequency 60000
setp hm2_5i20.0.pwmgen.pdm_frequency 6000000
setp hm2_5i20.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s
addf hm2_5i20.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_5i20.0.write servo-thread
# Spindel
loadrt pwmgen output_type=0
addf pwmgen.update servo-thread
addf pwmgen.make-pulses servo-thread
net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value
net spindle-on motion.spindle-on => pwmgen.0.enable
net spindle-pwm pwmgen.0.pwm => hm2_5i20.0.gpio.024.out
# Set the spindle's top speed in RPM
setp pwmgen.0.scale 3000
net spindle-enable motion.spindle-on => hm2_5i20.0.gpio.025.in
net spindle-fwd motion.spindle-forward => hm2_5i20.0.gpio.026.out
#net spindle-rev motion.spindle-reverse => hm2_5i20.0.gpio.026.out
# external output signals
# --- COOLANT-FLOOD ---
setp hm2_5i20.0.gpio.065.is_output true
net coolant-flood hm2_5i20.0.gpio.065.out
setp hm2_5i20.0.gpio.065.invert_output true
# external input signals
# --- ESTOP-EXT ---
net estop-ext <= hm2_5i20.0.gpio.049.in
# --- MIN-X ---
net min-x <= hm2_5i20.0.gpio.048.in
# --- MAX-X ---
net max-x <= hm2_5i20.0.gpio.050.in
# --- MIN-Z ---
net min-z <= hm2_5i20.0.gpio.051.in
# --- MIN-Y ---
net min-y <= hm2_5i20.0.gpio.052.in
# --- MAX-Z ---
net max-z <= hm2_5i20.0.gpio.053.in
# --- MAX-Y ---
net max-y <= hm2_5i20.0.gpio.054.in
#*******************
# AXIS X
#*******************
setp pid.x.Pgain [AXIS_0]P
setp pid.x.Igain [AXIS_0]I
setp pid.x.Dgain [AXIS_0]D
setp pid.x.bias [AXIS_0]BIAS
setp pid.x.FF0 [AXIS_0]FF0
setp pid.x.FF1 [AXIS_0]FF1
setp pid.x.FF2 [AXIS_0]FF2
setp pid.x.deadband [AXIS_0]DEADBAND
setp pid.x.maxoutput [AXIS_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-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output => pid.x.output
# ---PWM Generator signals/setup---
setp hm2_5i20.0.pwmgen.00.output-type 1
setp hm2_5i20.0.pwmgen.00.scale [AXIS_0]OUTPUT_SCALE
net x-output => hm2_5i20.0.pwmgen.00.value
net x-pos-cmd axis.0.motor-pos-cmd
net x-enable axis.0.amp-enable-out => hm2_5i20.0.pwmgen.00.enable
# ---Encoder feedback signals/setup---
setp hm2_5i20.0.encoder.00.counter-mode 0
setp hm2_5i20.0.encoder.00.filter 1
setp hm2_5i20.0.encoder.00.index-invert 0
setp hm2_5i20.0.encoder.00.index-mask 0
setp hm2_5i20.0.encoder.00.index-mask-invert 0
setp hm2_5i20.0.encoder.00.scale [AXIS_0]ENCODER_SCALE
net x-pos-fb <= hm2_5i20.0.encoder.00.position
net x-vel-fb <= hm2_5i20.0.encoder.00.velocity
net x-pos-fb => axis.0.motor-pos-fb
net x-index-enable axis.0.index-enable <=> hm2_5i20.0.encoder.00.index-enable
net x-pos-rawcounts <= hm2_5i20.0.encoder.00.rawcounts
# ---setup home / limit switch signals---
net x-home-sw => axis.0.home-sw-in
net x-neg-limit => axis.0.neg-lim-sw-in
net x-pos-limit => axis.0.pos-lim-sw-in
#*******************
# AXIS Y
#*******************
setp pid.y.Pgain [AXIS_1]P
setp pid.y.Igain [AXIS_1]I
setp pid.y.Dgain [AXIS_1]D
setp pid.y.bias [AXIS_1]BIAS
setp pid.y.FF0 [AXIS_1]FF0
setp pid.y.FF1 [AXIS_1]FF1
setp pid.y.FF2 [AXIS_1]FF2
setp pid.y.deadband [AXIS_1]DEADBAND
setp pid.y.maxoutput [AXIS_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-vel-cmd => pid.y.command-deriv
net y-pos-fb => pid.y.feedback
net y-output => pid.y.output
# ---PWM Generator signals/setup---
setp hm2_5i20.0.pwmgen.01.output-type 1
setp hm2_5i20.0.pwmgen.01.scale [AXIS_1]OUTPUT_SCALE
net y-output => hm2_5i20.0.pwmgen.01.value
net y-pos-cmd axis.1.motor-pos-cmd
net y-enable axis.1.amp-enable-out => hm2_5i20.0.pwmgen.01.enable
# ---Encoder feedback signals/setup---
setp hm2_5i20.0.encoder.01.counter-mode 0
setp hm2_5i20.0.encoder.01.filter 1
setp hm2_5i20.0.encoder.01.index-invert 0
setp hm2_5i20.0.encoder.01.index-mask 0
setp hm2_5i20.0.encoder.01.index-mask-invert 0
setp hm2_5i20.0.encoder.01.scale [AXIS_1]ENCODER_SCALE
net y-pos-fb <= hm2_5i20.0.encoder.01.position
net y-vel-fb <= hm2_5i20.0.encoder.01.velocity
net y-pos-fb => axis.1.motor-pos-fb
net y-index-enable axis.1.index-enable <=> hm2_5i20.0.encoder.01.index-enable
net y-pos-rawcounts <= hm2_5i20.0.encoder.01.rawcounts
# ---setup home / limit switch signals---
net y-home-sw => axis.1.home-sw-in
net y-neg-limit => axis.1.neg-lim-sw-in
net y-pos-limit => axis.1.pos-lim-sw-in
#*******************
# AXIS Z
#*******************
setp pid.z.Pgain [AXIS_2]P
setp pid.z.Igain [AXIS_2]I
setp pid.z.Dgain [AXIS_2]D
setp pid.z.bias [AXIS_2]BIAS
setp pid.z.FF0 [AXIS_2]FF0
setp pid.z.FF1 [AXIS_2]FF1
setp pid.z.FF2 [AXIS_2]FF2
setp pid.z.deadband [AXIS_2]DEADBAND
setp pid.z.maxoutput [AXIS_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-vel-cmd => pid.z.command-deriv
net z-pos-fb => pid.z.feedback
net z-output => pid.z.output
# ---PWM Generator signals/setup---
setp hm2_5i20.0.pwmgen.02.output-type 1
setp hm2_5i20.0.pwmgen.02.scale [AXIS_2]OUTPUT_SCALE
net z-output => hm2_5i20.0.pwmgen.02.value
net z-pos-cmd axis.2.motor-pos-cmd
net z-enable axis.2.amp-enable-out => hm2_5i20.0.pwmgen.02.enable
# ---Encoder feedback signals/setup---
setp hm2_5i20.0.encoder.02.counter-mode 0
setp hm2_5i20.0.encoder.02.filter 1
setp hm2_5i20.0.encoder.02.index-invert 0
setp hm2_5i20.0.encoder.02.index-mask 0
setp hm2_5i20.0.encoder.02.index-mask-invert 0
setp hm2_5i20.0.encoder.02.scale [AXIS_2]ENCODER_SCALE
net z-pos-fb <= hm2_5i20.0.encoder.02.position
net z-vel-fb <= hm2_5i20.0.encoder.02.velocity
net z-pos-fb => axis.2.motor-pos-fb
net z-index-enable axis.2.index-enable <=> hm2_5i20.0.encoder.02.index-enable
net z-pos-rawcounts <= hm2_5i20.0.encoder.02.rawcounts
# ---setup home / limit switch signals---
net z-home-sw => axis.2.home-sw-in
net z-neg-limit => axis.2.neg-lim-sw-in
net z-pos-limit => axis.2.pos-lim-sw-in
#*******************
# SPINDLE S
#*******************
#setp pid.s.Pgain [SPINDLE_9]P
#setp pid.s.Igain [SPINDLE_9]I
#setp pid.s.Dgain [SPINDLE_9]D
#setp pid.s.bias [SPINDLE_9]BIAS
#setp pid.s.FF0 [SPINDLE_9]FF0
#setp pid.s.FF1 [SPINDLE_9]FF1
#setp pid.s.FF2 [SPINDLE_9]FF2
#setp pid.s.deadband [SPINDLE_9]DEADBAND
#setp pid.s.maxoutput [SPINDLE_9]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 => pid.s.command
#net spindle-vel-fb-rpm => pid.s.feedback
#net spindle-output <= pid.s.output
# ---setup spindle control signals---
#net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
#net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
#net spindle-vel-cmd-rpm <= motion.spindle-speed-out
#net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
#net spindle-enable <= motion.spindle-on
#net spindle-cw <= motion.spindle-forward
#net spindle-ccw <= motion.spindle-reverse
#net spindle-brake <= motion.spindle-brake
#net spindle-revs => motion.spindle-revs
#net spindle-at-speed => motion.spindle-at-speed
#net spindle-vel-fb-rps => motion.spindle-speed-in
#net spindle-index-enable <=> motion.spindle-index-enable
# ---Setup spindle at speed signals---
#sets spindle-at-speed true
#******************************
# connect miscellaneous signals
#******************************
# ---HALUI signals---
net joint-select-a halui.joint.0.select
net x-is-homed halui.joint.0.is-homed
net jog-x-pos halui.jog.0.plus
net jog-x-neg halui.jog.0.minus
net jog-x-analog halui.jog.0.analog
net joint-select-b halui.joint.1.select
net y-is-homed halui.joint.1.is-homed
net jog-y-pos halui.jog.1.plus
net jog-y-neg halui.jog.1.minus
net jog-y-analog halui.jog.1.analog
net joint-select-c halui.joint.2.select
net z-is-homed halui.joint.2.is-homed
net jog-z-pos halui.jog.2.plus
net jog-z-neg halui.jog.2.minus
net jog-z-analog halui.jog.2.analog
net jog-selected-pos halui.jog.selected.plus
net jog-selected-neg halui.jog.selected.minus
net spindle-manual-cw halui.spindle.forward
net spindle-manual-ccw halui.spindle.reverse
net spindle-manual-stop halui.spindle.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.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-inhttps://forum.linuxcnc.org/27-driver-boards/35843-how-to-wire-up-a-spinx1-to-5i20-7i37/reply#
# ---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
And here is my .INI
Warning: Spoiler!
# Generated by PNCconf at Sat Nov 24 21:24:44 2018
# Änderungen an dieser Datei werden beim nächsten
# overwritten when you run PNCconf again
[EMC]
MACHINE = Fraese
DEBUG = 0
[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 1.500000
MAX_SPINDLE_OVERRIDE = 1.500000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/marcel/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 6.000000
MAX_LINEAR_VELOCITY = 83.333400
MIN_LINEAR_VELOCITY = 0.500000
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
COMM_WAIT = 0.010
SERVO_PERIOD = 1000000
[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i20
[HAL]
HALUI = halui
HALFILE = Fraese.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal
[HALUI]
[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 83.33
MAX_LINEAR_VELOCITY = 166.666
NO_FORCE_HOMING = 1
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
TOOL_CHANGE_QUILL_UP = 1
#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 10.0
MAX_VELOCITY = 83.33333333
MAX_ACCELERATION = 1000.0
P = 10
I = 0
D = 0
FF0 = 0
FF1 = 0.02
FF2 = 0.001
BIAS = 0
DEADBAND = 0.0001
MAX_OUTPUT = 10
ENCODER_SCALE = -1000
OUTPUT_SCALE = -10
MIN_LIMIT = -300
MAX_LIMIT = 300
HOME_OFFSET = 0.0
#********************
# Axis Y
#********************
[AXIS_1]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 750.0
P = 50
I = 0
D = 0
FF0 = 0
FF1 = 1
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 0
ENCODER_SCALE = 1
OUTPUT_SCALE = 10
MIN_LIMIT = -0.01
MAX_LIMIT = 2e+11
HOME_OFFSET = 0.0
#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 10.0
MAX_VELOCITY = 83.33333333
MAX_ACCELERATION = 1000.0
P = 15
I = 0
D = 0
FF0 = 0
FF1 = 0.02
FF2 = 0.001
BIAS = 0
DEADBAND = 0.0001
MAX_OUTPUT = 10
# ENCODER_SCALE = -2672.0107
ENCODER_SCALE = -1000
OUTPUT_SCALE = 10
MIN_LIMIT = -300.0
MAX_LIMIT = 300.0
HOME_OFFSET = 0.0
#********************
# Spindle
#********************
[SPINDLE_9]
P = 0.0
I = 0.0
D = 0.0
FF0 = 1.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 2000.0
Thank you for your help!
Best regards
Marcel
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17860
- Thank you received: 4775
15 Jan 2019 20:45 #124265
by PCW
Replied by PCW on topic How to wire up a SpinX1 to 5i20 / 7i37
The Spinx1 would like PWM at about 5 KHz
setp hm2_5i20.0.pwmgen.pwm_frequency 5000
Ideal drive for 7I33TA is PDM
That means all axis PWMGens should be set to mode 3
setp hm2_5i20.0.pwmgen.00.output-type 3
setp hm2_5i20.0.pwmgen.01.output-type 3
setp hm2_5i20.0.pwmgen.02.output-type 3
setp hm2_5i20.0.pwmgen.03.output-type 3
Then set PWMGen 04 to PWM mode
setp hm2_5i20.0.pwmgen.04.output-type 1
net spindle-speed-cmd motion.spindle-speed-out => hm2_5i20.0.pwmgen.04.value
net spindle-on motion.spindle-on => hm2_5i20.0.pwmgen.04.enable
# Set the spindle's top speed in RPM
setp hm2_5i20.0.pwmgen.04.scale 3000
This is just a sketch of whats needed so don't expect it to be perfect...
setp hm2_5i20.0.pwmgen.pwm_frequency 5000
Ideal drive for 7I33TA is PDM
That means all axis PWMGens should be set to mode 3
setp hm2_5i20.0.pwmgen.00.output-type 3
setp hm2_5i20.0.pwmgen.01.output-type 3
setp hm2_5i20.0.pwmgen.02.output-type 3
setp hm2_5i20.0.pwmgen.03.output-type 3
Then set PWMGen 04 to PWM mode
setp hm2_5i20.0.pwmgen.04.output-type 1
net spindle-speed-cmd motion.spindle-speed-out => hm2_5i20.0.pwmgen.04.value
net spindle-on motion.spindle-on => hm2_5i20.0.pwmgen.04.enable
# Set the spindle's top speed in RPM
setp hm2_5i20.0.pwmgen.04.scale 3000
This is just a sketch of whats needed so don't expect it to be perfect...
Please Log in or Create an account to join the conversation.
Moderators: PCW, jmelson
Time to create page: 0.187 seconds