项目

一般

简介

任务支持 #2610 » config.yaml

孙乃宇, 2026-09-20 17:57

 
board: MKS DLC32 (Single Axis)
name: LO-TTA-03
stepping:
engine: I2S_STATIC
idle_ms: 255
pulse_us: 4
dir_delay_us: 0
disable_delay_us: 0
segments: 12

axes:
shared_stepper_disable_pin: i2so.0
shared_stepper_reset_pin: NO_PIN
x:
steps_per_mm: 3200
# ★ 900 mm/min = **15 mm/s = 15 转/s = 900 RPM**(导程 1mm ⇒ 1 rev/s = 1 mm/s)。
# —— 与平台侧「位置模式时的最大速度」maxValue = **15**(mm/s) 精确对齐(15 × 60 = 900)。
# 【上限依据】SERVO42C 手册**脉冲口上限 60 kHz** ÷ 3200 步/mm = 18.75 mm/s = 1125 mm/min
# ⇒ MStep=16 下的**物理天花板 = 1125 mm/min**(DLC32 的 I2S 上限 125 kHz 不是瓶颈;
# pulse_us:4 ⇒ 4µs高+4µs低=8µs=125kHz 自洽)。
# 本值 900 = 48 kHz ≈ **80%**,留 20% 余量。
# ★ **不要设 >1125**:DLC32 会真发 100+ kHz、42C 收不全 ⇒ 丢步 / 闭环下 err 飙 17.99。
# ★ 商家说的 2000 RPM = 33.3 mm/s 需 106.7 kHz,**超 60 kHz 近一倍 ⇒ 做不到**。
# 真要 2000 RPM 只能把 42C 的 MStep 16→4(⇒ 本文件 steps_per_mm 改 800)+ 重做空载 CAL。
# ★ 第二道门槛是**加速度**(见下一条):v_peak = √(Acc × 行程),
# Acc 平台上限 15 ⇒ **要真正跑到 15 mm/s 至少需要 15mm 行程**,短行程到不了。
# 沿革:60(=1mm/s,会把一切都钳到 1) → 600(=10mm/s) → 1000 → **900(本次)**。
max_rate_mm_per_min: 900.0
# ⚠ 这个值只是"上电初值",**永远不影响实际运动**:
# DLL 每次下发运动前都执行 $axes/X/acceleration_mm_per_sec2=<平台「加减速度」>,
# 覆盖它(FluidNCDeviceOperator.cpp:309-311)。
# ⇒ 想改加速度要改**平台侧**,且看该指令的 ishide:
# · ishide=0(如「相对定位运动(自定义参数)」)→ 改**指令面板里的「加减速度」输入框**
# · ishide=1(如「相对定位运动(默认参数)」/回零/预设)→ 改**全局参数区「加减速度」**
# 两处上限都是 15 mm/s²。改本文件 100% 无效。
acceleration_mm_per_sec2: 100.0
# ★★ 软限位区间由 FluidNC 按下面规则算(Machine/Limit.cpp limitsMaxPosition/MinPosition):
# positive_direction: true ⇒ 允许区间 = [mpos_mm - max_travel_mm, mpos_mm]
# positive_direction: false ⇒ 允许区间 = [mpos_mm, mpos_mm + max_travel_mm]
# 注意**整个区间是锚在 homing/mpos_mm 上的**:
# 没有 homing 段时 mpos 恒为 0 ⇒ 区间退化成 [-max_travel_mm, 0]
# ⇒ 正向限位永远是 0、负向限位 = -max_travel_mm。这正是之前"正向设多少都没用"的根因。
# ★ 本机取 positive_direction: false —— 这是【不改 DLL 也能正确】的关键:
# DLL 下发 OpenSoftwareLimit 时会发
# $axes/x/max_travel_mm = pos - neg
# $axes/x/homing/mpos_mm = neg ← 注意 DLL 传的锚点是 neg
# (FluidNCDeviceOperator.cpp::OpenSoftwareLimit → FluidNC_Impl.cpp::setSoftLimitRange)
# · 若 positive_direction = true :区间 = [mpos-maxTravel, mpos] = [2*neg-pos, neg] ❌
# · 取 positive_direction = false:区间 = [mpos, mpos+maxTravel]
# = [neg, neg+(pos-neg)] = **[neg, pos]** ✅
# ⇒ 与平台「负向软限位 / 正向软限位」的字面语义精确一致。
# ⚠ 将来若把 DLL 锚点由 neg 改成 pos(见整合指南 §9.3 方案乙),本项必须同时改回 true。
# 这两个必须匹配,否则区间会整体错位。
# ★ 本项在无回零动作时的唯一功能影响就是软限位区间朝向;其余引用处
# (回零动作方向 Cartesian.cpp / $23 位 Axes.cpp / "限位开关不支持该方向"警告 Axis.cpp)
# 在没有回零动作、没有限位开关的本机上都不产生实际影响。
max_travel_mm: 30.0
soft_limits: true
# ★★ 必须有 homing 段:否则 $axes/x/homing/mpos_mm 这个设置项根本不存在,
# 运行时写入会静默失败(DLL 侧原先还丢弃了返回值),锚点只能是 0。
# cycle: -1 = set_mpos_only —— 只提供 mpos 锚点:不注册回零轴、不做任何回零动作,
# 没有限位开关也能用。
homing:
cycle: -1
positive_direction: false
mpos_mm: -10.0
motor0:
stepstick:
step_pin: i2so.1
direction_pin: i2so.2
start:
must_home: false
check_limits: true
arc_tolerance_mm: 0.002
junction_deviation_mm: 0.01
verbose_errors: true
report_inches: false
use_line_numbers: false
planner_blocks: 16

i2so:
bck_pin: gpio.16
data_pin: gpio.21
ws_pin: gpio.17
(3-3/3)