配置完全指南:从公式推导到挤出机实测校准)
Klipper 步进电机 rotation_distance旋转距离配置完全指南从公式推导到挤出机实测校准【免费下载链接】klipperKlipper is a 3d-printer firmware项目地址: https://gitcode.com/GitHub_Trending/kl/klipperrotation_distance旋转距离是 Klipper 固件中每个步进电机配置节stepper config section都必须提供的核心参数它定义了步进电机每旋转一整圈所对应运动的轴位移距离毫米。本文以 docs/Rotation_Distance.md 为骨架结合 klippy/stepper.py 的源码实现与仓库中的示例配置系统讲解如何从steps_per_mm反推、通过测量-修正流程校准挤出机以及如何通过直接检查皮带、丝杆和齿轮硬件来计算该参数最终让你能独立、精确地配置任意轴与挤出机的rotation_distance。rotation_distance 是什么在 Klipper 中每个 stepper 配置节 都必须提供一个rotation_distance参数[stepper_x] step_pin: dir_pin: rotation_distance: # 距离单位 mm步进电机若指定了 gear_ratio 则为末级齿轮 # 每旋转一整圈时轴所移动的距离。此参数必须提供。 microsteps: # 步进电机驱动所使用的微步数。此参数必须提供。按照 docs/Config_Reference.md 的定义rotation_distance是轴随步进电机或末级齿轮若指定了 gear_ratio每完整旋转一圈所行进的以 mm 为单位的距离。Klipper 正是依据它把抽象的步数指令换算成真实的三维空间位移。之所以用rotation_distance而不是传统固件如 Marlin中的steps_per_mm是因为它直接对应物理硬件皮带节距、丝杆导程、齿数可读性和可维护性都更好。在 Klipper 源码 klippy/stepper.py 的parse_step_distance()中可以看到二者的换算关系rotation_dist config.getfloat(rotation_distance, above0., ...) microsteps config.getint(microsteps, minval1, ...) full_steps config.getint(full_steps_per_rotation, 200, minval1, ...) if full_steps % 4: raise config.error(full_steps_per_rotation invalid in section %s) gearing parse_gear_ratio(config, ...) return rotation_dist, full_steps * microsteps * gearing这里返回的第二项full_steps * microsteps * gearing就是每旋转一圈的微步总数steps per rotationKlipper 用它和rotation_distance共同完成步数与距离的换算。注意源码中有一项校验full_steps_per_rotation必须是 4 的倍数否则配置加载会直接报错如 200、400 均满足201 则不满足。从 steps_per_mm或 step_distance反推 rotation_distance你的打印机原厂设计者当初就是根据 rotation distance 计算出steps_per_mm的。如果已知steps_per_mm就可以用下面的通用公式还原出原始的 rotation distancerotation_distance full_steps_per_rotation * microsteps / steps_per_mm如果拿到的是旧版 Klipper 配置中的step_distance参数则使用rotation_distance full_steps_per_rotation * microsteps * step_distance两个公式中的两个变量取值规则如下full_steps_per_rotation由步进电机类型决定。绝大多数步进电机是1.8 度步进电机即 360 ÷ 1.8 200 整步/圈部分电机是0.9 度步进电机为 400 整步/圈其他类型比较罕见。如果不确定不要在配置文件中设置full_steps_per_rotation默认值就是 200见 docs/Config_Reference.md并在公式中使用 200。microsteps由步进电机驱动器决定。大多数驱动器使用 16 微步不确定时在配置中设置microsteps: 16并在公式中使用 16。取值后务必取整几乎所有打印机的 X、Y、Z 轴其rotation_distance都应当是一个整数。如果上面公式算出的结果与某个整数的差值在 0.01 以内就把它四舍五入为那个整数。例如一条典型的皮带驱动 cartesian 轴若结果为 39.99直接配置为 40。挤出机 rotation_distance 的测量-修正校准流程对挤出机而言rotation_distance就是步进电机每旋转一整圈时耗材实际前进的距离。由于挤出轮hobbed bolt对耗材的咬合力度因打印机而异、甚至因不同耗材卷而异最准确的做法是采用measure and trim测量-修正流程实测校准。先通过 steps_per_mm 公式 或 检查硬件 得到一个初始猜测值然后执行以下步骤确保挤出机已装好耗材、热端已加热到合适温度打印机处于可挤出状态。用记号笔在距挤出机进料口约 70mm 处的耗材上做一个标记再用数显卡尺尽可能精确地测量该标记到挤出机进料口的实际距离记为initial_mark_distance。依次执行以下两条 G 代码挤出 50mm 耗材G91切换到相对坐标模式后接G1 E50 F60以 60mm/min 的慢速挤出 50mm记 50mm 为requested_extrude_distance。等待挤出动作完成大约需要 50 秒。必须使用慢速挤出较快的挤出速率会在挤出机内产生高压使结果失真不要使用图形前端界面上的挤出按钮它们通常以快速率挤出会污染测量结果。用数显卡尺重新测量挤出机进料口到标记的新距离记为subsequent_mark_distance然后计算actual_extrude_distance initial_mark_distance - subsequent_mark_distance计算新的 rotation_distancerotation_distance previous_rotation_distance * actual_extrude_distance / requested_extrude_distance将结果四舍五入到三位小数。如果actual_extrude_distance与requested_extrude_distance相差超过约 2mm建议把上述步骤完整地再执行一遍迭代收敛。⚠️重要警告不要用测量-修正方法校准 X、Y、Z 轴该方法精度不足以满足直线轴的需求反而很可能让配置变得更差。如需校准这些轴请使用下文检查硬件的方法通过测量皮带、带轮和丝杆硬件来精确计算。在源码层面这个校准流程与 Klipper 挤出机模块的接口是对应的配置解析时 klippy/kinematics/extruder.py 会调用self.stepper.set_rotation_distance(rotation_dist)写入新值而运行时通过get_rotation_distance()读取当前值参与运动学换算——实测校准本质上是算出一个新值、写回配置、再验证的迭代过程。检查硬件计算 rotation_distance当不知道steps_per_mm、或者正在设计一台新打印机时可以结合步进电机与打印机运动学知识直接计算rotation_distance。皮带驱动轴belt driven axes皮带直线轴的计算非常简单确定皮带类型大多数打印机使用 2mm 节距的皮带即皮带上每个齿相距 2mm。数出步进电机带轮上的齿数。代入公式rotation_distance belt_pitch * number_of_teeth_on_pulley例如一台打印机使用 2mm 节距皮带、20 齿带轮则 rotation distance 为 40。这也正是仓库大量示例配置中 X/Y 轴取值 40 的来源例如 config/example-cartesian.cfg[stepper_x] step_pin: PF0 dir_pin: PF1 enable_pin: !PD7 microsteps: 16 rotation_distance: 40带丝杆的轴axes with a lead screw常见丝杆可用如下公式rotation_distance screw_pitch * number_of_separate_threads其中screw_pitch是丝杆螺纹导程丝杆上每条螺纹沟槽之间的距离。例如常见的 T8 丝杆 rotation distance 为 8——它的螺距是 2mm、有 4 条独立螺纹2 × 4 8。仓库中 config/example-cartesian.cfg 的 Z 轴即配置为[stepper_z] step_pin: PL3 dir_pin: PL1 enable_pin: !PK0 microsteps: 16 rotation_distance: 8而较老打印机使用螺纹杆threaded rod只有一条螺纹此时 rotation distance 就等于螺距本身。例如M6 公制杆的 rotation distance 为 1M8 杆为 1.25。挤出机extruder可以通过测量推动耗材的咬合轮hobbed bolt直径来获得挤出机的初始 rotation distancerotation_distance diameter * 3.14如果挤出机带有齿轮减速还需要按下文方法 确定并设置 gear_ratio 并写入配置。需要再次强调由于咬合轮对耗材的咬合存在差异甚至不同耗材卷之间都不同实测的 rotation distance 会因打印机而异。因此在获得初始值之后务必用前文测量-修正流程进一步校准得到更精确的值。仓库示例配置 config/example-cartesian.cfg 中挤出机使用rotation_distance: 33.500作为起点正是这种先估后测工作流的体现。使用 gear_ratiogear_ratio参数用于简化步进电机通过齿轮箱或类似减速机构连接到轴的配置。大多数步进电机没有齿轮箱——如果不确定就不要在配置中设置gear_ratio。设置gear_ratio之后rotation_distance表示的是齿轮箱末级齿轮每旋转一整圈时轴移动的距离。例如使用 5:1 的齿轮箱时可以先按检查硬件的方法算出 rotation distance再在配置中加上gear_ratio: 5:1。针对皮带/带轮实现的齿轮减速可以通过数带轮齿数来确定 gear_ratio例如一个 16 齿带轮驱动下一个 80 齿带轮就使用gear_ratio: 80:16。同理拆开一个常见的成品齿轮箱数清齿数即可确认其真实减速比。需要特别留意的几点标注比率可能与实际不符常见的 BMG 挤出机电机齿轮标注为 3:1实际却是 50:17 减速比使用无公约数的齿数组合可以减少齿轮磨损因为每转一圈齿的啮合位置不会总是相同常见的 5.18:1 行星齿轮箱 更准确的配置是gear_ratio: 57:11。多级减速用逗号分隔若一个轴上有多级齿轮可给 gear_ratio 传逗号分隔的列表。例如一个 5:1 齿轮箱再驱动 16 齿到 80 齿的带轮可写为gear_ratio: 5:1, 80:16。浮点数场景大多数情况下 gear_ratio 应使用整数常见齿轮和带轮的齿数都是整数但如果皮带是靠摩擦而非齿啮合驱动的用浮点数可能更合理例如gear_ratio: 107.237:16。从源码看klippy/stepper.py 的parse_gear_ratio()支持以:或,作为分隔符、每级两个数count2并把所有级联比率连乘def parse_gear_ratio(config, note_valid): gear_ratio config.getlists(gear_ratio, (), seps(:, ,), count2, parserfloat, note_validnote_valid) result 1. for g1, g2 in gear_ratio: result * g1 / g2 return result最终full_steps * microsteps * gearing中gearing即为各级减速比的乘积参与每圈微步总数的换算。此外还有一个容易被忽略的细节见 klippy/stepper.py当配置中只设置了gear_ratio而未设置rotation_distance时Klipper 会推断该轴以弧度为单位此时 rotation distance 被自动设为2 * pi一整圈的弧度——这是旋转轴如 polar 类运动学的特殊约定普通直线轴请始终显式配置rotation_distance。常见误区与最佳实践小结X/Y/Z 轴优先取整公式结果与整数相差 0.01 以内就四舍五入皮带轴的belt_pitch × 齿数与丝杆轴的螺距 × 螺纹数本身通常就是整数。挤出机必须实测咬合轮的抓持差异让理论值只能作为起点务必执行 测量-修正流程并且当误差超过 2mm 时重复迭代。别对 X/Y/Z 用测量-修正法该法精度不足反而可能劣化配置这类轴应通过检查硬件确定。full_steps_per_rotation需为 4 的倍数1.8° 电机填 200、0.9° 电机填 400不确定时省略该参数使用默认值 200。不确定是否有齿轮箱就别写gear_ratio写出后rotation_distance的语义会变为末级齿轮转一圈的位移。配置完成后验证修改配置后重启 Klipper 服务让配置生效并通过SET类命令或实际移动测试确认行程正确。校准过程中如涉及G91/G1 E50 F60等手动挤出命令完成后可参考仓库 docs/G-Codes.md 复位相关状态。把握住每转一圈 多少毫米位移这一核心概念再配合上述公式、实测流程与源码换算逻辑无论面对何种运动学结构cartesian、corexy、delta、极坐标等你都能为 stepper 配置节 准确写出rotation_distance让 Klipper 的运动控制建立在一个物理上可信的基础之上。【免费下载链接】klipperKlipper is a 3d-printer firmware项目地址: https://gitcode.com/GitHub_Trending/kl/klipper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考