claude init
This commit is contained in:
@@ -1,20 +1,30 @@
|
||||
# ============================================================================
|
||||
# Lagun milling machine - Main HAL configuration
|
||||
# Generated by PNCconf at Fri Jul 26 13:18:08 2024
|
||||
# Using LinuxCNC version: Master (2.9)
|
||||
# If you make changes to this file, they will be
|
||||
# overwritten when you run PNCconf again
|
||||
# ============================================================================
|
||||
|
||||
# --- Load realtime modules ---
|
||||
loadrt [KINS]KINEMATICS
|
||||
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS base_thread_fp=1
|
||||
loadrt hostmot2
|
||||
loadrt hm2_pci config="num_encoders=6 num_pwmgens=6"
|
||||
loadrt hm2_pci config="num_encoders=6 num_pwmgens=6"
|
||||
# mux16: used by pendant for jog increment, feed override, max velocity override, spindle override
|
||||
loadrt mux16 names=jogincr,foincr,mvoincr,soincr
|
||||
# mux2: selects ferror value based on z-override state (attempted but unused)
|
||||
loadrt mux2 count=1
|
||||
# sum2: sums dual PID outputs for X(0), Y(1), Z(2)
|
||||
loadrt sum2 count=3
|
||||
|
||||
# logic: 2-input AND gate for z-override mechanism
|
||||
# personality 0x0102 = 1 output, 2 inputs, AND function
|
||||
loadrt logic count=1 personality=0x0102
|
||||
addf logic.0 servo-thread
|
||||
addf mux2.0 servo-thread
|
||||
|
||||
# weighted_sum: for ADC reading (currently unused)
|
||||
loadrt weighted_sum wsum_sizes=8 #wsum_sizes=[128,64,32,16,8,4,2,1] # default should do conversion??
|
||||
addf process_wsums servo-thread
|
||||
|
||||
@@ -26,11 +36,19 @@ addf foincr servo-thread
|
||||
addf mvoincr servo-thread
|
||||
addf soincr servo-thread
|
||||
|
||||
# --- Mesa 5i24 global PWM/watchdog settings ---
|
||||
setp hm2_5i24.0.pwmgen.pwm_frequency 15500
|
||||
setp hm2_5i24.0.pwmgen.pdm_frequency 15500
|
||||
setp hm2_5i24.0.watchdog.timeout_ns 5000000
|
||||
|
||||
# --- Load PID controllers ---
|
||||
# pid.x / pid.xl = X motor encoder / linear scale (dual loop)
|
||||
# pid.y / pid.yl = Y motor encoder / linear scale (dual loop)
|
||||
# pid.zl = Z linear scale (single loop, no motor encoder)
|
||||
# pid.s = spindle (not actively used)
|
||||
loadrt pid names=pid.x,pid.y,pid.s,pid.xl,pid.yl,pid.zl
|
||||
|
||||
# --- Servo thread function execution order ---
|
||||
addf hm2_5i24.0.read servo-thread
|
||||
addf motion-command-handler servo-thread
|
||||
addf motion-controller servo-thread
|
||||
@@ -42,7 +60,10 @@ addf pid.zl.do-pid-calcs servo-thread
|
||||
addf pid.s.do-pid-calcs servo-thread
|
||||
addf hm2_5i24.0.write servo-thread
|
||||
|
||||
# relay outputs
|
||||
# --- GPIO relay outputs (active low / inverted) ---
|
||||
# GPIO 041 = spindle on/off relay
|
||||
# GPIO 044 = Z-axis servo enable relay
|
||||
# GPIO 046 = X-axis servo enable relay
|
||||
setp hm2_5i24.0.gpio.041.is_output true
|
||||
setp hm2_5i24.0.gpio.044.is_output true
|
||||
setp hm2_5i24.0.gpio.046.is_output true
|
||||
@@ -50,13 +71,15 @@ setp hm2_5i24.0.gpio.041.invert_output true
|
||||
setp hm2_5i24.0.gpio.044.invert_output true
|
||||
setp hm2_5i24.0.gpio.046.invert_output true
|
||||
|
||||
# some inputs
|
||||
# --- GPIO button inputs (active low, not all wired into HAL logic) ---
|
||||
# GPIO 029 = ESTOP, 030 = START, 031 = STOP
|
||||
setp hm2_5i24.0.gpio.027.is_output false
|
||||
setp hm2_5i24.0.gpio.028.is_output false
|
||||
setp hm2_5i24.0.gpio.028.is_output false
|
||||
setp hm2_5i24.0.gpio.029.is_output false # ESTOP
|
||||
setp hm2_5i24.0.gpio.030.is_output false # START
|
||||
setp hm2_5i24.0.gpio.031.is_output false # STOP
|
||||
|
||||
# Button wiring attempts - commented out, caused machine to shut off unexpectedly
|
||||
#net machine_estop_out <= hm2_5i24.0.gpio.029.in_not
|
||||
#net machine_estop_out => halui.machine.on
|
||||
|
||||
@@ -69,7 +92,8 @@ setp hm2_5i24.0.gpio.031.is_output false # STOP
|
||||
# net btn-start hm2_5i24.0.gpio.030.in_not => halui.program.resume
|
||||
|
||||
|
||||
# first ADC
|
||||
# --- ADC inputs (commented out, unused) ---
|
||||
# first ADC (GPIO 032-039)
|
||||
#setp hm2_5i24.0.gpio.032.is_output false
|
||||
#setp hm2_5i24.0.gpio.033.is_output false
|
||||
#setp hm2_5i24.0.gpio.034.is_output false
|
||||
@@ -79,7 +103,7 @@ setp hm2_5i24.0.gpio.031.is_output false # STOP
|
||||
#setp hm2_5i24.0.gpio.038.is_output false
|
||||
#setp hm2_5i24.0.gpio.039.is_output false
|
||||
|
||||
# second ADC
|
||||
# second ADC (GPIO 040-047)
|
||||
#setp hm2_5i24.0.gpio.040.is_output false
|
||||
#setp hm2_5i24.0.gpio.041.is_output false
|
||||
#setp hm2_5i24.0.gpio.042.is_output false
|
||||
@@ -89,7 +113,7 @@ setp hm2_5i24.0.gpio.031.is_output false # STOP
|
||||
#setp hm2_5i24.0.gpio.046.is_output false
|
||||
#setp hm2_5i24.0.gpio.047.is_output false
|
||||
|
||||
|
||||
# weighted_sum wiring for ADC (unused)
|
||||
#net hm2_5i24.0.gpio.032 <= wsum.0.bit.0.in
|
||||
#net hm2_5i24.0.gpio.033 <= wsum.0.bit.1.in
|
||||
#net hm2_5i24.0.gpio.034 <= wsum.0.bit.2.in
|
||||
@@ -99,10 +123,16 @@ setp hm2_5i24.0.gpio.031.is_output false # STOP
|
||||
#net hm2_5i24.0.gpio.038 <= wsum.0.bit.6.in
|
||||
#net hm2_5i24.0.gpio.039 <= wsum.0.bit.7.in
|
||||
|
||||
# ******************
|
||||
# AXIS X JOINT 0
|
||||
# ******************
|
||||
# ============================================================================
|
||||
# AXIS X - JOINT 0
|
||||
# Dual PID: pid.x (motor encoder) + pid.xl (linear scale), summed via sum2.0
|
||||
# Motor encoder: hm2 encoder 03
|
||||
# Linear scale: hm2 encoder 00
|
||||
# PWM output: pwmgen.00
|
||||
# Enable relay: GPIO 046 (active low)
|
||||
# ============================================================================
|
||||
|
||||
# --- X motor encoder PID (velocity/damping loop) ---
|
||||
setp pid.x.Pgain [JOINT_0]P
|
||||
setp pid.x.Igain 0
|
||||
setp pid.x.Dgain [JOINT_0]D
|
||||
@@ -118,6 +148,7 @@ net x-enable => pid.x.enable
|
||||
net x-pos-mtr => pid.x.feedback
|
||||
net x-output-mtr <= pid.x.output
|
||||
|
||||
# --- X linear scale PID (position correction loop) ---
|
||||
setp pid.xl.Pgain [JOINT_0]P_LIN
|
||||
setp pid.xl.Igain [JOINT_0]I_LIN
|
||||
setp pid.xl.Dgain [JOINT_0]D_LIN
|
||||
@@ -133,11 +164,13 @@ net x-enable => pid.xl.enable
|
||||
net x-pos-lin => pid.xl.feedback
|
||||
net x-output-lin <= pid.xl.output
|
||||
|
||||
# Sum motor + linear PID outputs for final X drive signal
|
||||
net x-output-lin => sum2.0.in0
|
||||
net x-output-mtr => sum2.0.in1
|
||||
net x-output <= sum2.0.out
|
||||
|
||||
net x-pos-cmd <= joint.0.motor-pos-cmd
|
||||
# Position command feeds both PID loops
|
||||
net x-pos-cmd <= joint.0.motor-pos-cmd
|
||||
net x-pos-cmd => pid.xl.command
|
||||
net x-pos-cmd => pid.x.command
|
||||
|
||||
@@ -149,11 +182,13 @@ setp hm2_5i24.0.pwmgen.00.offset-mode 1
|
||||
|
||||
net x-output => hm2_5i24.0.pwmgen.00.value
|
||||
net x-enable joint.0.amp-enable-out => hm2_5i24.0.pwmgen.00.enable
|
||||
# X enable also drives GPIO 046 relay
|
||||
net x-enable => hm2_5i24.0.gpio.046.out
|
||||
net x-pos-rawcounts <= hm2_5i24.0.encoder.00.rawcounts
|
||||
|
||||
# ---Encoder feedback signals/setup---
|
||||
|
||||
# Motor encoder (encoder 03)
|
||||
setp hm2_5i24.0.encoder.03.counter-mode 0
|
||||
setp hm2_5i24.0.encoder.03.filter 1
|
||||
setp hm2_5i24.0.encoder.03.index-invert 0
|
||||
@@ -161,6 +196,7 @@ setp hm2_5i24.0.encoder.03.index-mask 0
|
||||
setp hm2_5i24.0.encoder.03.index-mask-invert 0
|
||||
setp hm2_5i24.0.encoder.03.scale [JOINT_0]ENCODER_MTR_SCALE
|
||||
|
||||
# Linear scale (encoder 00)
|
||||
setp hm2_5i24.0.encoder.00.counter-mode 0
|
||||
setp hm2_5i24.0.encoder.00.filter 1
|
||||
setp hm2_5i24.0.encoder.00.index-invert 0
|
||||
@@ -173,15 +209,21 @@ net x-vel-mtr <= hm2_5i24.0.encoder.03.velocity
|
||||
net x-index-enable joint.0.index-enable <=> hm2_5i24.0.encoder.03.index-enable
|
||||
#net x-pos-mtr => joint.0.motor-pos-fb
|
||||
|
||||
# Linear scale provides the actual position feedback to the joint
|
||||
net x-pos-lin <= hm2_5i24.0.encoder.00.position
|
||||
net x-vel-lin <= hm2_5i24.0.encoder.00.velocity
|
||||
net x-index-enable joint.0.index-enable <=> hm2_5i24.0.encoder.00.index-enable
|
||||
net x-pos-lin => joint.0.motor-pos-fb
|
||||
|
||||
# ******************
|
||||
# AXIS Y JOINT 1
|
||||
# ******************
|
||||
# ============================================================================
|
||||
# AXIS Y - JOINT 1
|
||||
# Dual PID: pid.y (motor encoder) + pid.yl (linear scale), summed via sum2.1
|
||||
# Motor encoder: hm2 encoder 04
|
||||
# Linear scale: hm2 encoder 01
|
||||
# PWM output: pwmgen.02
|
||||
# ============================================================================
|
||||
|
||||
# --- Y motor encoder PID (velocity/damping loop) ---
|
||||
setp pid.y.Pgain [JOINT_1]P
|
||||
setp pid.y.Igain 0
|
||||
setp pid.y.Dgain [JOINT_1]D
|
||||
@@ -197,6 +239,7 @@ net y-enable => pid.y.enable
|
||||
net y-pos-mtr => pid.y.feedback
|
||||
net y-output-mtr <= pid.y.output
|
||||
|
||||
# --- Y linear scale PID (position correction loop) ---
|
||||
setp pid.yl.Pgain [JOINT_1]P_LIN
|
||||
setp pid.yl.Igain [JOINT_1]I_LIN
|
||||
setp pid.yl.Dgain [JOINT_1]D_LIN
|
||||
@@ -212,11 +255,13 @@ net y-enable => pid.yl.enable
|
||||
net y-pos-lin => pid.yl.feedback
|
||||
net y-output-lin <= pid.yl.output
|
||||
|
||||
# Sum motor + linear PID outputs for final Y drive signal
|
||||
net y-output-lin => sum2.1.in0
|
||||
net y-output-mtr => sum2.1.in1
|
||||
net y-output <= sum2.1.out
|
||||
|
||||
net y-pos-cmd <= joint.1.motor-pos-cmd
|
||||
# Position command feeds both PID loops
|
||||
net y-pos-cmd <= joint.1.motor-pos-cmd
|
||||
net y-pos-cmd => pid.yl.command
|
||||
net y-pos-cmd => pid.y.command
|
||||
|
||||
@@ -233,6 +278,7 @@ net y-pos-rawcounts <= hm2_5i24.0.encoder.01.rawcounts
|
||||
|
||||
# ---Encoder feedback signals/setup---
|
||||
|
||||
# Motor encoder (encoder 04)
|
||||
setp hm2_5i24.0.encoder.04.counter-mode 0
|
||||
setp hm2_5i24.0.encoder.04.filter 1
|
||||
setp hm2_5i24.0.encoder.04.index-invert 0
|
||||
@@ -240,6 +286,7 @@ setp hm2_5i24.0.encoder.04.index-mask 0
|
||||
setp hm2_5i24.0.encoder.04.index-mask-invert 0
|
||||
setp hm2_5i24.0.encoder.04.scale [JOINT_1]ENCODER_MTR_SCALE
|
||||
|
||||
# Linear scale (encoder 01)
|
||||
setp hm2_5i24.0.encoder.01.counter-mode 0
|
||||
setp hm2_5i24.0.encoder.01.filter 1
|
||||
setp hm2_5i24.0.encoder.01.index-invert 0
|
||||
@@ -252,15 +299,28 @@ net y-vel-mtr <= hm2_5i24.0.encoder.04.velocity
|
||||
net y-index-enable joint.1.index-enable <=> hm2_5i24.0.encoder.04.index-enable
|
||||
#net y-pos-mtr => joint.1.motor-pos-fb
|
||||
|
||||
# Linear scale provides the actual position feedback to the joint
|
||||
net y-pos-lin <= hm2_5i24.0.encoder.01.position
|
||||
net y-vel-lin <= hm2_5i24.0.encoder.01.velocity
|
||||
net y-index-enable joint.1.index-enable <=> hm2_5i24.0.encoder.01.index-enable
|
||||
net y-pos-lin => joint.1.motor-pos-fb
|
||||
|
||||
#*******************
|
||||
# AXIS Z JOINT 2
|
||||
#*******************
|
||||
# ============================================================================
|
||||
# AXIS Z - JOINT 2
|
||||
# Single PID: pid.zl (linear scale only), output via sum2.2
|
||||
# Linear scale: hm2 encoder 02
|
||||
# PWM output: pwmgen.04
|
||||
# Enable relay: GPIO 044 (active low), gated by z-override AND gate
|
||||
#
|
||||
# Z-OVERRIDE MECHANISM:
|
||||
# A HAL "logic AND" gate combines z-override (default TRUE) with z-enable.
|
||||
# When z-override is set FALSE (via M101), the AND output goes low,
|
||||
# disabling the Z servo and GPIO 044 relay. This allows manual quill use.
|
||||
# M102 sets z-override back to TRUE to re-enable CNC Z control.
|
||||
# MIN_FERROR is set to 100 in INI to prevent following errors during manual mode.
|
||||
# ============================================================================
|
||||
|
||||
# Z motor encoder PID commented out - no motor encoder on Z axis
|
||||
#setp pid.z.Pgain [JOINT_2]P
|
||||
#setp pid.z.Igain 0
|
||||
#setp pid.z.Dgain [JOINT_2]D
|
||||
@@ -276,6 +336,7 @@ net y-pos-lin => joint.1.motor-pos-fb
|
||||
#net z-pos-mtr => pid.z.feedback
|
||||
#net z-output-mtr <= pid.z.output
|
||||
|
||||
# --- Z linear scale PID ---
|
||||
setp pid.zl.Pgain [JOINT_2]P
|
||||
setp pid.zl.Igain [JOINT_2]I
|
||||
setp pid.zl.Dgain [JOINT_2]D
|
||||
@@ -287,13 +348,17 @@ setp pid.zl.deadband [JOINT_2]DEADBAND
|
||||
setp pid.zl.maxoutput [JOINT_2]MAX_OUTPUT
|
||||
setp pid.zl.error-previous-target true
|
||||
|
||||
# Z-override AND gate: z-enable-comb = z-override AND z-enable
|
||||
# When z-override is FALSE, Z servo is disabled (manual quill mode)
|
||||
net z-override => logic.0.in-00
|
||||
net z-enable => logic.0.in-01
|
||||
net z-enable-comb <= logic.0.and
|
||||
|
||||
# Default: z-override is TRUE (CNC controls Z)
|
||||
sets z-override TRUE
|
||||
|
||||
# this section about ferror doesnt work
|
||||
# Attempted dynamic ferror switching (not functional - see INI workaround)
|
||||
# mux2 selects between 100 (disabled) and 0.2 (enabled) based on z-enable-comb
|
||||
net z-enable-comb => mux2.0.sel
|
||||
setp mux2.0.in0 100
|
||||
setp mux2.0.in1 0.2
|
||||
@@ -304,11 +369,12 @@ net z-enable-comb => pid.zl.enable
|
||||
net z-pos-lin => pid.zl.feedback
|
||||
net z-output-lin <= pid.zl.output
|
||||
|
||||
# Z only has linear scale PID, no motor encoder sum needed
|
||||
net z-output-lin => sum2.2.in0
|
||||
#net z-output-mtr => sum2.2.in1
|
||||
net z-output <= sum2.2.out
|
||||
|
||||
net z-pos-cmd <= joint.2.motor-pos-cmd
|
||||
net z-pos-cmd <= joint.2.motor-pos-cmd
|
||||
net z-pos-cmd => pid.zl.command
|
||||
#net z-pos-cmd => pid.z.command
|
||||
|
||||
@@ -320,11 +386,13 @@ setp hm2_5i24.0.pwmgen.04.offset-mode 1
|
||||
|
||||
net z-output => hm2_5i24.0.pwmgen.04.value
|
||||
net z-enable joint.2.amp-enable-out => hm2_5i24.0.pwmgen.04.enable
|
||||
# Z enable relay gated through AND gate (z-override mechanism)
|
||||
net z-enable-comb => hm2_5i24.0.gpio.044.out
|
||||
net z-pos-rawcounts <= hm2_5i24.0.encoder.02.rawcounts
|
||||
|
||||
# ---Encoder feedback signals/setup---
|
||||
|
||||
# Motor encoder (encoder 05) - not used on Z axis
|
||||
#setp hm2_5i24.0.encoder.05.counter-mode 0
|
||||
#setp hm2_5i24.0.encoder.05.filter 1
|
||||
#setp hm2_5i24.0.encoder.05.index-invert 0
|
||||
@@ -332,6 +400,7 @@ net z-pos-rawcounts <= hm2_5i24.0.encoder.02.rawcounts
|
||||
#setp hm2_5i24.0.encoder.05.index-mask-invert 0
|
||||
#setp hm2_5i24.0.encoder.05.scale [JOINT_2]ENCODER_MTR_SCALE
|
||||
|
||||
# Linear scale (encoder 02)
|
||||
setp hm2_5i24.0.encoder.02.counter-mode 0
|
||||
setp hm2_5i24.0.encoder.02.filter 1
|
||||
setp hm2_5i24.0.encoder.02.index-invert 0
|
||||
@@ -344,19 +413,23 @@ setp hm2_5i24.0.encoder.02.scale [JOINT_2]ENCODER_LIN_SCALE
|
||||
#net z-index-enable joint.2.index-enable <=> hm2_5i24.0.encoder.05.index-enable
|
||||
#net z-pos-mtr => joint.2.motor-pos-fb
|
||||
|
||||
# Linear scale provides the actual position feedback to the joint
|
||||
net z-pos-lin <= hm2_5i24.0.encoder.02.position
|
||||
net z-vel-lin <= hm2_5i24.0.encoder.02.velocity
|
||||
net z-index-enable joint.2.index-enable <=> hm2_5i24.0.encoder.02.index-enable
|
||||
net z-pos-lin => joint.2.motor-pos-fb
|
||||
|
||||
|
||||
#### SPINDLE ####
|
||||
# ============================================================================
|
||||
# SPINDLE
|
||||
# On/off relay via GPIO 041 (active low). No speed control or feedback.
|
||||
# ============================================================================
|
||||
#net spindle.0.on spindle-enable
|
||||
net spindle-enable spindle.0.on => hm2_5i24.0.gpio.041.out
|
||||
|
||||
#******************************
|
||||
# connect miscellaneous signals
|
||||
#******************************
|
||||
# ============================================================================
|
||||
# MISCELLANEOUS SIGNALS
|
||||
# ============================================================================
|
||||
|
||||
# ---coolant signals---
|
||||
|
||||
@@ -375,7 +448,7 @@ net machine-is-enabled <= motion.motion-enabled
|
||||
# ---digital in / out signals---
|
||||
|
||||
# ---estop signals---
|
||||
|
||||
# Estop loops back: user-enable-out feeds emc-enable-in (no external estop chain)
|
||||
net estop-out <= iocontrol.0.user-enable-out
|
||||
net estop-out => iocontrol.0.emc-enable-in
|
||||
|
||||
@@ -395,4 +468,3 @@ net tool-number => hal_manualtoolchange.number
|
||||
|
||||
# ---ignore tool prepare requests---
|
||||
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
|
||||
|
||||
|
||||
Reference in New Issue
Block a user