pATAq 发表于 2021-11-13 00:43:46

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

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

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

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

## 1、目前的调试方法
### 1.1 图片对比法
* 从 3dphell 网站引用 VoronDesign 的方法
!(https://wiki.3dphell.com/v1-motor-configuration-guide.png)
【~~反正我没看懂~~】
* 参考小树的文档,[链接](https://www.minitree.fun/?page_id=17907)
!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20211112232808.png)

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

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

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

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

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20211112233050.png)

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

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

## 2、我的新调试方法

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

首先 (http://corexy.com/) 可以看到其原理图,我们从这里入手。还有一种 H/D-Bot 架构,本文不展开讨论。

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20211112233403.png)

实际的绕线图:

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20211112234535.png)

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

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

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

> 由于是并联臂结构,其实很多配置里说的 X、Y 电机是不恰当的。除了 X 横梁,A、B电机分别可以放在图示三个位置。我们约定,将 A 电机接到 3D 打印机主板的 X 电机插槽,B 电机接到 Y 电机插槽。
>
> 也推荐观看 `工程部老周` 的视频 [《【DIY3d打印入门指南】结构详解,hbot和corexy结构的原理和区别》 ](https://www.bilibili.com/video/BV1RJ411a7U2)

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

### 4.1 启用强制移动方便调试

由于 Klipper 的保护措施,只有归零后才能控制轴移动,所以我们要解除这一限制。[参考文档](https://www.klipper3d.org/Config_Reference.html#force_move)。

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

# CoreXY 电机方向测试,日常使用请勿开启

enable_force_move: True

# 使能 M118 控制台输出

```

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

### 4.2 控制单个电机

由于我们仅需要控制一个电机,无法使用诸如`G1 X100 F3000` 的命令,[查看文档](https://www.klipper3d.org/G-Codes.html#force-movement) 可知使用以下命令 `FORCE_MOVE STEPPER=<config_name> DISTANCE=<value> VELOCITY=<value> ` 进行控制。我们写一个宏,方便操作。

```

description: 思兼 | 快速确定 A、B 电机方向,需要设置 为 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
```

![](http://corexy.com/principles2.png)

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

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



!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20211113001553.png)

## 后记

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



页: [1]
查看完整版本: 跟着思兼学习3D打印 Klipper 固件(01)XY电机方向调整新方法