diff --git a/mayo-mill-remora.hal b/mayo-mill-remora.hal new file mode 100644 index 0000000..9344845 --- /dev/null +++ b/mayo-mill-remora.hal @@ -0,0 +1,69 @@ +# Generated by stepconf, adapted for Remora Ethernet on RP2040 +# Using W5500-EVB-Pico or RP2040 with W5500 module + +loadrt [KINS]KINEMATICS +loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS num_dio=6 num_aio=3 +loadrt remora-eth-3.0 + +# Add Remora read/update/write functions to the servo thread +addf remora.read servo-thread +addf motion-command-handler servo-thread +addf motion-controller servo-thread +addf remora.update servo-thread +addf remora.write servo-thread + +# --- ESTOP --- +net estop-out <= iocontrol.0.user-enable-out + +# E-stop input from Remora input 3 (GP28) +# If your hardware E-stop switch is active-low (Normally Closed to GND, open on press) +# and you need to invert it in HAL, you can load a 'not' component. +# Otherwise, we connect it directly here: +net estop-ext <= remora.input.3 => iocontrol.0.emc-enable-in + +# --- PROBE --- +# Probe input from Remora input 4 (GP27) +net probe-in <= remora.input.4 => motion.probe-input + +# --- SPINDLE --- +# Spindle signal is driven in custom.hal, we connect it here to the Remora output 0 (GP8) +net spindle-on => remora.output.0 + +# --- JOINT 0 (X AXIS) --- +setp remora.joint.0.scale [JOINT_0]SCALE +setp remora.joint.0.maxaccel [JOINT_0]STEPGEN_MAXACCEL +setp remora.joint.0.pgain [JOINT_0]P_GAIN +setp remora.joint.0.deadband [JOINT_0]DEADBAND + +net xpos-cmd joint.0.motor-pos-cmd => remora.joint.0.pos-cmd +net xpos-fb remora.joint.0.pos-fb => joint.0.motor-pos-fb +net xenable joint.0.amp-enable-out => remora.joint.0.enable +net home-x <= remora.input.0 => joint.0.home-sw-in + +# --- JOINT 1 (Y AXIS) --- +setp remora.joint.1.scale [JOINT_1]SCALE +setp remora.joint.1.maxaccel [JOINT_1]STEPGEN_MAXACCEL +setp remora.joint.1.pgain [JOINT_1]P_GAIN +setp remora.joint.1.deadband [JOINT_1]DEADBAND + +net ypos-cmd joint.1.motor-pos-cmd => remora.joint.1.pos-cmd +net ypos-fb remora.joint.1.pos-fb => joint.1.motor-pos-fb +net yenable joint.1.amp-enable-out => remora.joint.1.enable +net home-y <= remora.input.1 => joint.1.home-sw-in + +# --- JOINT 2 (Z AXIS) --- +setp remora.joint.2.scale [JOINT_2]SCALE +setp remora.joint.2.maxaccel [JOINT_2]STEPGEN_MAXACCEL +setp remora.joint.2.pgain [JOINT_2]P_GAIN +setp remora.joint.2.deadband [JOINT_2]DEADBAND + +net zpos-cmd joint.2.motor-pos-cmd => remora.joint.2.pos-cmd +net zpos-fb remora.joint.2.pos-fb => joint.2.motor-pos-fb +net zenable joint.2.amp-enable-out => remora.joint.2.enable +net home-z <= remora.input.2 => joint.2.home-sw-in + +# --- TOOL CHANGE --- +net tool-change-request <= iocontrol.0.tool-change +net tool-change-confirmed => iocontrol.0.tool-changed +net tool-number <= iocontrol.0.tool-prep-number +net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared diff --git a/mayo-mill-remora.ini b/mayo-mill-remora.ini new file mode 100644 index 0000000..b575e71 --- /dev/null +++ b/mayo-mill-remora.ini @@ -0,0 +1,188 @@ +# Generated by stepconf 1.1 at Thu May 29 11:48:34 2025 +# Modified for Remora Ethernet configuration + +[EMC] +MACHINE = mayo-mill-remora +DEBUG = 0 +VERSION = 1.1 + +[DISPLAY] +DISPLAY = probe_basic +OPEN_FILE = ~/linuxcnc/nc_files/pb_examples/blank.ngc +CONFIG_FILE = custom_config.yml +LOG_FILE = mayo-mill-remora.log +LOG_LEVEL = DEBUG +#PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files +INTRO_GRAPHIC = pbsplash.png +INTRO_TIME = 5 + +#ARCDIVISION = 64 +#GRIDS = 10mm 20mm 50mm 100mm + +GEOMETRY = xyz +INCREMENTS = JOG 10mm 1mm .1mm .01mm +POSITION_OFFSET = RELATIVE +POSITION_FEEDBACK = ACTUAL +MAX_FEED_OVERRIDE = 1.2 +MAX_SPINDLE_OVERRIDE = 1.2 +MIN_SPINDLE_OVERRIDE = 0.5 +MIN_LINEAR_VELOCITY = 0 +MAX_LINEAR_VELOCITY = 50.00 +DEFAULT_LINEAR_VELOCITY = 5.00 + +USER_TABS_PATH = user_tabs/ +USER_BUTTONS_PATH = user_buttons/ +USER_DROS_PATH = user_dro_display/ +DRO_DISPLAY = xyz +# ATC tab display options, 0 = no atc tab displayed, 1 = Carousel atc display, 2 = rack atc display +ATC_TAB_DISPLAY = 0 +#USER_ATC_BUTTONS_PATH = user_atc_buttons/ +CYCLE_TIME = 0.100 + +KEYBOARD_JOG = true +KEYBOARD_JOG_SAFETY_OFF = true + + +TOOL_TABLE_COLUMNS = TZDR + +[FILTER] +PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image +PROGRAM_EXTENSION = .py Python Script +PROGRAM_EXTENSION = .nc,.tap G-Code File +png = image-to-gcode +gif = image-to-gcode +jpg = image-to-gcode +py = python + +[PYTHON] +TOPLEVEL = ./python/toplevel.py +PATH_APPEND = ./python/ + +[TASK] +TASK = milltask +CYCLE_TIME = 0.010 + +[RS274NGC] +RS274NGC_STARTUP_CODE = G17 G21 G40 G43H0 G54 G64P0.0127 G80 G90 G94 G97 M5 M9 +#RS274NGC_STARTUP_CODE = F10 S300 G20 G17 G40 G49 G54 G64 P.001 G80 G90 G91.1 G92.1 G94 G97 G98 +PARAMETER_FILE = linuxcnc.var +OWORD_NARGS = 1 +NO_DOWNCASE_OWORD = 1 +SUBROUTINE_PATH = subroutines + +# The remap code for QtVCP's versaprobe's automatic tool probe of Z +REMAP=M6 modalgroup=6 prolog=change_prolog ngc=aaa epilog=change_epilog + +[HAL] +HALUI = halui +HALFILE = mayo-mill-remora.hal +HALFILE = custom.hal +POSTGUI_HALFILE = probe_basic_postgui.hal +TWOPASS = one + +[EMCMOT] +EMCMOT = motmod +COMM_TIMEOUT = 1.0 +# BASE_PERIOD is not required for Remora hardware step generation +# BASE_PERIOD = 100000 +SERVO_PERIOD = 1000000 + +[EMCIO] +EMCIO = io +CYCLE_TIME = 0.100 +TOOL_TABLE = tool.tbl + +[CHANGE_POSITION] +X = 10 +Y = 10 +Z = -2 + +[KINS] +JOINTS = 3 +KINEMATICS = trivkins coordinates=XYZ + +[TRAJ] +AXES = 3 +COORDINATES = X Y Z +LINEAR_UNITS = mm +ANGULAR_UNITS = degree +DEFAULT_LINEAR_VELOCITY = 5.00 +MAX_LINEAR_VELOCITY = 50.00 + +#*** AXIS_X ******************************* +[AXIS_X] +MAX_VELOCITY = 50.0 +MAX_ACCELERATION = 500.0 +MIN_LIMIT = -0.001 +MAX_LIMIT = 780.0 + +[JOINT_0] +TYPE = LINEAR +HOME = 0.0 +MIN_LIMIT = -0.001 +MAX_LIMIT = 780.0 +MAX_VELOCITY = 50.0 +MAX_ACCELERATION = 500.0 +STEPGEN_MAXACCEL = 625.0 +SCALE = 80.0 +FERROR = 1 +MIN_FERROR = .25 +HOME_OFFSET = 0.000000 +HOME_SEARCH_VEL = -20.000000 +HOME_LATCH_VEL = -6.250000 +HOME_SEQUENCE = 2 +P_GAIN = 1000.0 +DEADBAND = 0.001 +#****************************************** + +#*** AXIS_Y ******************************* +[AXIS_Y] +MAX_VELOCITY = 50.0 +MAX_ACCELERATION = 500.0 +MIN_LIMIT = -0.001 +MAX_LIMIT = 485.0 + +[JOINT_1] +TYPE = LINEAR +HOME = 0.0 +MIN_LIMIT = -0.001 +MAX_LIMIT = 485.0 +MAX_VELOCITY = 50.0 +MAX_ACCELERATION = 500.0 +STEPGEN_MAXACCEL = 625.0 +SCALE = 80.0 +FERROR = 1 +MIN_FERROR = .25 +HOME_OFFSET = 0.000000 +HOME_SEARCH_VEL = -20.000000 +HOME_LATCH_VEL = -6.250000 +HOME_SEQUENCE = 1 +P_GAIN = 1000.0 +DEADBAND = 0.001 +#****************************************** + +#*** AXIS_Z ******************************* +[AXIS_Z] +MAX_VELOCITY = 25.0 +MAX_ACCELERATION = 500.0 +MIN_LIMIT = -100.0 +MAX_LIMIT = 0.001 + +[JOINT_2] +TYPE = LINEAR +HOME = 0.0 +MIN_LIMIT = -100.0 +MAX_LIMIT = 0.001 +MAX_VELOCITY = 25.0 +MAX_ACCELERATION = 500.0 +STEPGEN_MAXACCEL = 625.0 +SCALE = 80.0 +FERROR = 1 +MIN_FERROR = .25 +HOME_OFFSET = 0.000000 +HOME_SEARCH_VEL = 10.000000 +HOME_LATCH_VEL = 6.250000 +HOME_SEQUENCE = 0 +P_GAIN = 1000.0 +DEADBAND = 0.001 +#****************************************** diff --git a/remora_pico_config.json b/remora_pico_config.json new file mode 100644 index 0000000..534bd5a --- /dev/null +++ b/remora_pico_config.json @@ -0,0 +1,69 @@ +{ + "Version": "1.0", + "Communication": { + "Type": "Ethernet", + "IP": "10.10.10.10", + "Port": 27182 + }, + "Hardware": { + "Modules": [ + { + "Type": "Stepgen", + "Joint": 0, + "Step Pin": "GP2", + "Direction Pin": "GP3", + "Enable Pin": "GP9" + }, + { + "Type": "Stepgen", + "Joint": 1, + "Step Pin": "GP4", + "Direction Pin": "GP5", + "Enable Pin": "GP10" + }, + { + "Type": "Stepgen", + "Joint": 2, + "Step Pin": "GP6", + "Direction Pin": "GP7", + "Enable Pin": "GP11" + }, + { + "Type": "Digital Input", + "Pin": "GP13", + "Mode": "PullUp", + "Data Bit": 0 + }, + { + "Type": "Digital Input", + "Pin": "GP14", + "Mode": "PullUp", + "Data Bit": 1 + }, + { + "Type": "Digital Input", + "Pin": "GP15", + "Mode": "PullUp", + "Data Bit": 2 + }, + { + "Type": "Digital Input", + "Pin": "GP28", + "Mode": "PullUp", + "Data Bit": 3 + }, + { + "Type": "Digital Input", + "Pin": "GP27", + "Mode": "PullUp", + "Data Bit": 4 + }, + { + "Type": "Digital Output", + "Pin": "GP8", + "Invert": true, + "Data Bit": 0 + } + ] + } +}