跳转到内容

固件

PhysiClaw 硬件通过 FluidNC 固件与电脑通信。电脑用 G-code(GRBL 协议)发送指令,控制电机转动和电磁铁开关,完成点击和滑动等手势。

  • MKS DLC32 V2.1 控制板。
  • USB-B 转 USB-A 数据线。
  • 12 V 2 A 电源。
  • Chrome 浏览器(仅下面的手动方式需要)。

你可以用一条命令烧录 FluidNC,也可以通过 FluidNC 网页安装器手动烧录。

通过 USB 连接控制板(接通 12 V 电源、断开步进电机),然后运行:

bash
physiclaw flash

连接两个电机和电磁铁,手动测试一遍,确认一切正常:

bash
physiclaw testdrive
ABX+Y+

试试 X10 / Y10,确认每次移动都与上图坐标轴的方向一致。再用 tap 检查电磁铁是否正常。

physiclaw flash 执行成功,可跳过这部分。

手动烧录流程
  1. 给控制板上电。12 V 电源,用 USB 串口线连接到电脑。

  2. 打开安装器。 在 Chrome 里打开 FluidNC 网页安装器。页面会显示两个产品,在 FluidNC 下点击 Continue

  3. 连接控制板。 点击 Connect。弹出的对话框会列出可用串口。选 USB Serial,点击 Connect

  4. 进入 Install。 出现 Home 页。点击左侧栏的 Install

  5. 选择固件变体。 从下拉里选最新版本。会出现三个变体,选择 noradio

  6. 选择安装类型。 选择 fresh-install

  7. 确认。 弹出确认框。确保 Installation speed115200 baud,然后点击 Install

  8. 等待。 出现进度条,等待完成。

  9. 安装完成。 一个 “Done” 对话框确认完成。点击 Continue

  10. 打开 File browser。 Home 页会显示红色的 “invalid configuration” 警告,这是因为控制板已经刷入固件,但还没有配置。点击左侧栏的 File browser

  11. 创建配置文件。 File browser 会提示你创建一个。点击 Create config。弹出的对话框里 config.yaml 已预填为文件名。点击 OK

  12. 打开 Source 标签页。 编辑器停在 General 标签。点击最右侧的 Source 标签。

  13. 粘贴配置。 全选已有文本,删掉,再把下面配置文件一节的全部内容粘进去。

  14. 保存。 点击 Save

  15. 进入 Terminal。 点击左侧栏的 Terminal

  16. 重启控制板。 点击红色的 Restart 按钮。控制板重启并打印启动日志。

  17. 验证。 每条消息都应当是绿色的,最后一行应为 <Idle|...>,说明刷入固件并配置成功。

命令行烧录会自动帮你刷入。手动烧录则需在第 13 步粘贴。FluidNC 配置:

config.yaml
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.1
name: PhysiClaw
# I2S bus — hardwired on DLC32 v2.1, do not change
i2so:
bck_pin: gpio.16
data_pin: gpio.21
ws_pin: gpio.17
# I2S_STATIC only — I2S_STREAM causes drift on this board
stepping:
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