跟着思兼学习 Klipper 固件(01)XY电机方向调整新方法

前言

原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正交流。| 思兼,sjqlwy@gmail.com,2021年11月12日
这段时间研究了一下 Klipper 固件的文档和源码,对它的使用有了更深入的了解,功能丰富,拓展性极强,仅修改参数不需要每次编译固件这点就比 Marlin 方便太多。如果有疑问欢迎留言,简单问题请自行查看文档,复杂问题我会给个思路,实在搞不定可以付费咨询、远程协助,收费是为了证明知识是有价值的,也排除一些连简单基础的问题都伸手白嫖,转嫁时间成本的人。

本来想要列个大纲,按照计划一篇一篇写,但是后来发现有难有易,所以索性想到哪写到哪,最后再整理汇总,先做出来,再做完美。

3D嘛,由 XYZ 3 个轴构成,常见的 3D 打印机架构有笛卡尔和并联臂等,其中前者可以理解为一个轴由一个步进电机控制,比如 i3 龙门架构;后者一个方向的运动由 2 个以上的电机控制,比如 Delta、CoreXY。由于 Voron 等外观好看的 DIY 开源 3D 打印机的流行以及步进电机绕法的区别,很多朋友安装完毕之后需要调试电机方向。

1、目前的调试方法

1.1 图片对比法

  • 从 3dphell 网站引用 VoronDesign 的方法
    v1-motor-configuration-guide
    反正我没看懂
  • 参考小树的文档,链接
    image-20211112232801518

这个比上面的好理解点,起码有文字注释。我看了一会儿,也没太搞懂

1.2 人类高质量CoreXY电机方向调整

参考链接:https://wiki.3dphell.com/zh/basic/calibration

也需要三步,如下图所示:

image-20211112233050188

此流程操作傻瓜,比那些八张图,八个判断条件的流程高到不知道哪里去了。

遗憾地表示,我试了一下也没成功。 而且最差的情况,每一步都要调整配置文件。

2、我的新调试方法

以上方法都需要多次归零(G28)和急停(M112),操作繁琐,理解困难。我的方法只需要运行一个宏,迅速判断出结果,修改一次配置文件。

首先 CoreXY 的官方网站 可以看到其原理图,我们从这里入手。还有一种 H/D-Bot 架构,本文不展开讨论。

image-20211112233403556

实际的绕线图:

image-20211112234535255

我们首先来分析一下 CoreXY 的特点:

  • 整个系统有 2 根皮带,对应 2 个电机:A 和 B。挤出头在 X 和 Y 方向上的移动,由两个电机参与完成。

  • 当挤出头在斜 45° 移动时,只有一个电机参与。

由于是并联臂结构,其实很多配置里说的 X、Y 电机是不恰当的。除了 X 横梁,A、B电机分别可以放在图示三个位置。我们约定,将 A 电机接到 3D 打印机主板的 X 电机插槽,B 电机接到 Y 电机插槽。

也推荐观看 工程部老周 的视频 《【DIY3d打印入门指南】结构详解,hbot和corexy结构的原理和区别》

之前存在的两种的方法之所以复杂,是因为归零操作一直需要两个电机共同参与,那如果我们观察斜 45° 挤出头的运动方向,此时就像简单的 i3 架构,其运动方向仅一个电机参与,那么就可以快速确认电机方向。

4.1 启用强制移动方便调试

由于 Klipper 的保护措施,只有归零后才能控制轴移动,所以我们要解除这一限制。参考文档

# 修改 printer.cfg,添加以下内容

# CoreXY 电机方向测试,日常使用请勿开启
[force_move]
enable_force_move: True

# 使能 M118 控制台输出
[respond]

同时,为了防止喷嘴顶到热床,我们先把 Z 轴归零,然后挤出头离开热床 30mm(此过程可以使用下方的宏)。再把挤出头手动移到热床中间,防止调试过程中撞到框架。

4.2 控制单个电机

由于我们仅需要控制一个电机,无法使用诸如 G1 X100 F3000 的命令,查看文档 可知使用以下命令 FORCE_MOVE STEPPER=<config_name> DISTANCE=<value> VELOCITY=<value> [ACCEL=<value>] 进行控制。我们写一个宏,方便操作。

[gcode_macro DIRECTION]
description: 思兼 | 快速确定 A、B 电机方向,需要设置 [force_move] 为 True
gcode:
  # 归零 Z轴并抬高30mm,防止误触热床。也可以手动操作。
  G28 Z
  G1 Z30 F2000
  M117 Goto Right-Back # 提示信息显示在屏幕上
  M118 Goto Right-Back # 显示在控制台
  # 此时挤出头应向右后方移动
  FORCE_MOVE STEPPER=stepper_x DISTANCE=20 VELOCITY=10
  # 等待 2秒
  G4 S2
  M117 Goto Right-Front
  M118 Goto Right-Front
  # 此时挤出头应向右前方移动
  FORCE_MOVE STEPPER=stepper_y DISTANCE=20 VELOCITY=10

我们记下挤出头两次的移动情况,对照这个图,理论上 先沿红色向右后方移动 20mm -> 等待 2s -> 再沿蓝色向右前方移动 20mm 。那么根据实际情况,我们进行分析:

  1. 挤出头先沿蓝色方向移动 —— AB电机接反,配置文件中交换引脚,[stepper_x] 和 [stepper_y] 的 x、y 字母对调
  2. 先沿红色方向向左前方移动 —— A 电机反向,取反 DIR 引脚,对应区域 [dir_pin: ] 取消或者增加后面的 !
  3. 同样,再沿红色方向向左后方移动 —— B电机接反,取反 DIR 引脚,[dir_pin: ] 取消或者增加后面的 !
  4. 修改完成后,建议及时关闭 [force_move]

image-20211113001553819

后记

这种方法个人测试下来还是非常方便的,只需要执行一次宏,就可以快速确认电机方向,适合我这种懒人。后续会分享其他更多好玩、无聊的功能。
另外,由于 CoreXY 在 斜 45°移动时,只有一个电机运行,当速度/加速度过快,空驶的时候速度很快,超过单电机的物理能力,就会出现 geng-geng 的声音,这时就是丢步了。那么如何判断电机是否丢步、如何设置电机的理想电流、速度/加速度?请看下文分解。

posted @ 2021-11-13 00:40  思兼  阅读(6452)  评论(0编辑  收藏  举报