5i25 + 7i85s +....
(I have a test config that does about 3 million mm/m = ~90 MPH and 10 MHz step rates)
I didnt know LinuxCNC is also used for Bullriding O.o
Sadly as a usual Windows user im accustomed to input fields, buttons and little popup infoboxes.
But after the last days i have to say, its amazing to work "the Linux way"!
All my respekt to you guys for creating an Software Package like this!
I just love the endless possibilitys!
And i figured my problem out. (*proud*)
PID MAX_OUTPUT was set to 100
Here is my HAL anyway. Im interested in your opinion about my segmentation.
For some reason i just realized how HAL works while i created my own order.
loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hostmot2
loadrt hm2_pci config=" num_encoders=4 num_pwmgens=1 num_stepgens=4 sserial_port_0=00xxxx"
setp hm2_5i25.0.pwmgen.pwm_frequency 20000
setp hm2_5i25.0.pwmgen.pdm_frequency 6000000
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
#****************************************************************************
# SPS
#****************************************************************************
#net amp-enable <= axis.0.amp-enable-out
#net amp-enable => parport.0.pin-16-out
#****************************************************************************
# AXIS X
#****************************************************************************
#~~~~~~~~~~~~~~~~~~~
# PID Parameter 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
setp pid.x.maxerror .0005
#~~~~~~~~~~~~~~~~~~~
# MESA Parameter X
#~~~~~~~~~~~~~~~~~~~
setp hm2_5i25.0.stepgen.00.dirsetup [AXIS_0]DIRSETUP
setp hm2_5i25.0.stepgen.00.dirhold [AXIS_0]DIRHOLD
setp hm2_5i25.0.stepgen.00.steplen [AXIS_0]STEPLEN
setp hm2_5i25.0.stepgen.00.stepspace [AXIS_0]STEPSPACE
setp hm2_5i25.0.stepgen.00.position-scale [AXIS_0]STEP_SCALE
setp hm2_5i25.0.stepgen.00.step_type 0
setp hm2_5i25.0.stepgen.00.control-type 1
setp hm2_5i25.0.stepgen.00.maxaccel [AXIS_0]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.00.maxvel [AXIS_0]STEPGEN_MAXVEL
#~~~~~~~~~~~~~~~~~~~
# Signals X
#~~~~~~~~~~~~~~~~~~~
net x-enable <= axis.0.amp-enable-out
net x-enable => hm2_5i25.0.stepgen.00.enable
net x-enable => pid.x.enable
net x-pos-cmd <= axis.0.motor-pos-cmd
net x-pos-cmd => pid.x.command
net x-vel-cmd <= axis.0.joint-vel-cmd
net x-vel-cmd => pid.x.command-deriv
net x-output <= pid.x.output
net x-output => hm2_5i25.0.stepgen.00.velocity-cmd
net x-pos-fb <= hm2_5i25.0.stepgen.00.position-fb
net x-pos-fb => pid.x.feedback
net x-pos-fb => axis.0.motor-pos-fb
#net x-vel-fb <= hm2_5i25.0.encoder.00.velocity
#net x-vel-fb => pid.x.feedback-deriv
net x-index-enable <=> pid.x.index-enable
#net x-index-enable axis.0.index-enable <=> hm2_5i25.0.encoder.00.index-enable
#~~~~~~~~~~~~~~~~~~~
# Limit Switch X
#~~~~~~~~~~~~~~~~~~~
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
#****************************************************************************
#****************************************************************************
# AXIS Z
#****************************************************************************
#****************************************************************************
# 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
setp pid.s.maxerror .0005
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-out => 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.
And any file layout that works and makes sense to you is OK, they are your files, after all
(and yours are a lot neater than mine)
Please Log in or Create an account to join the conversation.
Much to learn and alot to achieve! But im so happy, that i wasnt to lazy to start that work.
Old Setup: NEMA 34 + LPT + Wormdrive = 300mm/min at 0.001mm Resolution
Now: 1.5Kw Servo + MESA + direct connection = 30.000mm/min at 0.005mm / 15.000mm/min at 0.001mm
Max testet Speed was 60.000 at 0.005 and 30.000 at 0.001. But i wont need that AT ALL.
Its just amazing! Thos values are close to an 20.000$ Simens Sinumerik (OK,... no hardware based PID. But still close!)
Next Steps:
- marry Miss Linearscale and Mr. PID
- get rid of G64 (stole me 3 hours where i tweaked around in my INI to find acceleration issues)
- figure out a position mode with PWM for Toolchange
Please Log in or Create an account to join the conversation.
Please Log in or Create an account to join the conversation.
Update:
Encoder works
Hal split into seperate Files for X,Y,Z,SPS
I just ask myselfe if that is a good Idea. It doesnt change anything for cycle time right?
Please Log in or Create an account to join the conversation.
Hal split into seperate Files for X,Y,Z,SPS
I just ask myselfe if that is a good Idea. It doesnt change anything for cycle time right?
No, the HAL file only runs once at startup to make the connections, there is no disadvantage to splitting up the files as you see fit.
Please Log in or Create an account to join the conversation.
Hm... im not able to get rid of G64 at startup.
When i google it, i just find explanations what it does.
Please Log in or Create an account to join the conversation.
Hm... im not able to get rid of G64 at startup.
When i google it, i just find explanations what it does.
Can you try re-phrasing the question? I can't work out what you are asking?
Can you explain what you expect to happen, and what actually happens, and what you consider the difference to be?
Please Log in or Create an account to join the conversation.
I was talking about the G-Code G64.
It allways shows up whit the startfile of axis GUI.
At the Moment i edited the INI to load another File with G61 set.
But i totaly wona avoid G64.
And is it possible to use the encoder as DRO only?
I use direct Step/Dir instead of +-10V and my real difference after a long loop testrun was about 0.002mm.
Or even better, as an emergency Stop when a diverence (maybe +-1mm) hapens + DRO
Please Log in or Create an account to join the conversation.
I was talking about the G-Code G64.
It allways shows up whit the startfile of axis GUI.
At the Moment i edited the INI to load another File with G61 set.
There is another way, using RS274NGC_STARTUP_CODE
If you set the GUI to display actual position rather than commanded position you might get what you want.And is it possible to use the encoder as DRO only?
Please Log in or Create an account to join the conversation.