Firmware
PhysiClaw’s hardware talks to the computer through the FluidNC firmware. The computer sends G-code (the GRBL protocol) to drive the motors and switch the solenoid, performing taps, swipes, and other gestures.
Prerequisites
Section titled “Prerequisites”- MKS DLC32 V2.1 control board.
- USB-B to USB-A data cable.
- 12 V 2 A power supply.
- Google Chrome (only for the manual option below).
You can flash FluidNC with a single command, or manually with FluidNC’s web installer.
Command-line flash (recommended)
Section titled “Command-line flash (recommended)”Connect the board over USB (12 V power on, stepper motors disconnected), then run:
physiclaw flashVerification
Section titled “Verification”Connect the two motors and the solenoid, then drive the machine by hand to confirm everything works:
physiclaw testdriveTry X10 / Y10 and check that each move follows the axes illustrated above. Run tap to check the solenoid works.
Manual flash
Section titled “Manual flash”If physiclaw flash succeeds, you can skip this part.
manual flash flow
-
Power up the board. Connect 12 V power, then connect USB to the computer.
-
Open the installer. Open the FluidNC web installer in Chrome. The page shows two products. Click Continue under FluidNC.
-
Connect to the board. Click Connect. A dialog lists available serial ports. Select USB Serial and click Connect.
-
Go to Install. The Home page appears. Click Install in the left sidebar.
-
Select the firmware variant. Pick the latest version from the dropdown. Three variants appear. Select
noradio. -
Select the installation type. Select fresh-install.
-
Confirm. A confirmation dialog appears. Make sure Installation speed is 115200 baud, then click Install.
-
Wait. A progress bar appears. Wait until it completes.
-
Installation complete. A “Done” dialog confirms it. Click Continue.
-
Open the File browser. The Home page shows a red “invalid configuration” warning. That’s because the board has firmware but no config yet. Click File browser in the left sidebar.
-
Create the config file. The File browser prompts you to create one. Click Create config. A dialog appears with
config.yamlpre-filled as the filename. Click OK. -
Open the Source tab. The editor opens on the General tab. Click the Source tab (rightmost).
-
Paste the config. Select all the existing text, delete it, and paste the full contents of The config file below.
-
Save. Click Save.
-
Go to Terminal. Click Terminal in the left sidebar.
-
Restart the board. Click the red Restart button. The board reboots and prints the startup log.
-
Verify. Every message should be green, and the last line should read
<Idle|...>, meaning the firmware flashed and the config loaded successfully.
The config file
Section titled “The config file”The command-line flash installs this for you. For the manual flash, paste it in step 13. The FluidNC config:
config.yaml
# FluidNC config — MKS DLC32 v2.1 — CoreXY + Solenoid# Comments ONLY on their own lines (FluidNC YAML subset rule)# Tune: steps_per_mm, max_travel_mm, acceleration, direction pins
board: MKS-DLC32 V2.1name: PhysiClaw
# I2S bus — hardwired on DLC32 v2.1, do not changei2so: bck_pin: gpio.16 data_pin: gpio.21 ws_pin: gpio.17
# I2S_STATIC only — I2S_STREAM causes drift on this boardstepping: engine: I2S_STATIC idle_ms: 250 pulse_us: 4 dir_delay_us: 1 disable_delay_us: 0
kinematics: corexy:
axes: shared_stepper_disable_pin: I2SO.0
x: # Tune: (motor_steps x microsteps) / mm_per_rev # e.g. 200 x 16 / 40mm (20T GT2) = 80 steps_per_mm: 80.000 max_rate_mm_per_min: 10000.000 acceleration_mm_per_sec2: 1000.000 # Set max_travel_mm to your actual X travel max_travel_mm: 200.000 soft_limits: false
motor0: hard_limits: false stepstick: step_pin: I2SO.1 # Add :low after I2SO.2 if X runs backwards direction_pin: I2SO.2:low
y: steps_per_mm: 80.000 max_rate_mm_per_min: 10000.000 acceleration_mm_per_sec2: 1000.000 # Set max_travel_mm to your actual Y travel max_travel_mm: 200.000 soft_limits: false
motor0: hard_limits: false stepstick: step_pin: I2SO.5 # Add :low after I2SO.6 if Y runs backwards direction_pin: I2SO.6:low
PWM: pwm_hz: 1000 output_pin: gpio.32 enable_pin: NO_PIN direction_pin: NO_PIN disable_with_s0: false s0_with_disable: true spinup_ms: 0 spindown_ms: 0 tool_num: 0 speed_map: 0=0% 1000=100% off_on_alarm: true
start: must_home: false