claude init

This commit is contained in:
Thaddeus Hughes
2026-04-03 21:47:22 -05:00
parent f3953d66ae
commit 9d2379205f
26 changed files with 2382 additions and 4243 deletions

View File

@@ -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