搭建路径中级一个周末

做一台笔式绘图机:两根能准确到位的步进轴

一台绘图机:能自己回零,画出一个最后一角与第一角相差不过零点几毫米的 100 mm 方框,而且能重复画出来。

做一台笔式绘图机:两根能准确到位的步进轴 技术示意图FIELDROTORCARRIAGE80 STEPS/MM · 1.8° · 1/16LAG ANGLE DECIDES WHETHER IT ARRIVES

做的是什么

一台笛卡尔坐标绘图机:两条互相垂直的皮带传动轴、一支可以抬起的笔,以及一台知道笔在哪儿的控制器——因为它在开机时靠限位开关回过原点,并且此后一直在数每一个脉冲。

有必要说清楚它为什么会是一台适合入门的精密机器,因为它并不是本站最炫的项目。本站其他项目——循迹车、避障车、平衡车——都有反馈:传感器看到世界,代码作出反应,误差被持续修正。这台机器完全没有这些。上面没有任何部件在测量笔在哪里。纸上的线条之所以能落在正确的位置,唯一的原因就是你内置的每一个假设都成立。

这让它成为一位异常诚实的老师。漂了位的循迹车照样还能跟着线走。漂了位的绘图机画出的方框却合不上,而那道缺口就以墨水的形式留在纸上、以毫米为单位,精确地告诉你你错得有多厉害。

贯穿整个项目的那一个数

画一个 100 mm 的方框,量一量本该重合的最后一个角和第一个角之间差了多少。

这一个测量值就是整个项目的记分牌,它之所以有价值,在于误差的形状本身就能告诉你原因:

方框的表现 原因 在哪里解决
总是大几个百分点或小几个百分点 每毫米步数不对 标定
任何尺寸下开口都差不多大 背隙 皮带张力与顶丝
每次开口都不一样 丢步 电流、速度与加速度
能闭合,但是个平行四边形 两轴不垂直 框架
慢速能闭合,一快就开口 超过拉入转速或拐角速度 加速度,或者改用 24 V

这五条里有四条属于参数设置,一条是框架问题。动手改之前先弄清自己遇到的是哪一种,这就是这件事的全部难点所在。

物料清单

零件 数量 价格 备注
NEMA 17 步进电机,1.5–1.8 A 2 £18–28 40 mm 机身。别买 20 mm 的薄饼款。
A4988 驱动器 2(另备 1 块) £6–12 或者用 DRV8825——注意 Vref 的公式不一样
Arduino Uno 1 £4–20 Nano 也能用,而且更小
CNC 扩展板 v3 1 £5 可选但推荐——自带大容量电容
SG90 舵机 1 £2 用来抬笔
杠杆式微动开关 2 £1 每轴一个,装在行程最小的一端
GT2 皮带,6 mm 2 m £5 玻纤芯的。纯橡胶的会拉伸。
GT2 20 齿同步轮,5 mm 孔径 2 £4 80 步/mm 就是从这里来的
GT2 惰轮 4 £5 光孔、不带齿,用作回程轮
8 mm 光轴,400 mm 4 £10 或者用 2020 铝型材配滑块
LM8UU 直线轴承 8 £6 每根轴两端各两个
12–24 V 电源,2 A 以上 1 £8–15 想要速度就用 24 V
100 µF 电解电容,35 V 以上 1 £0.20 不是可选项;不用扩展板的话就必须配它
万用表 1 £10–25 调 Vref 必需。没有替代品。
M3 紧固件、打印支架 — £5 或者用激光切割的胶合板

**大约 £90–130。**万用表和电源以后还能复用;运动部件大约 £60。

有两个看起来省钱、其实并不省钱的做法值得点出来。其一,纯橡胶芯的 GT2 皮带拉伸量足以表现为背隙,而玻纤芯的只贵一镑。其二,只买两块驱动器而不是三块,意味着你第一次因为忘记加电容而烧掉一块驱动器时,项目要停摆一周。

整体怎么接线

                12–24 V  ──┬── 100 µF ──┬── VMOT (X driver)
                           │            └── VMOT (Y driver)
                           └── GND ─────┬── Arduino GND
                                        │
  Arduino Uno                           │
    D2 ── X STEP        D5 ── Y STEP    │      X driver ── coil A ── motor X
    D3 ── X DIR         D6 ── Y DIR     │                └ coil B
    D8 ── ENABLE (both, active low)     │      Y driver ── coil A ── motor Y
    D9 ── X endstop  (INPUT_PULLUP)     │                └ coil B
    D10 ── Y endstop (INPUT_PULLUP)     │
    D11 ── pen servo signal ────────────┴── servo 5 V from the Arduino

唯一一条不容易想到的规则:**限位开关的线要远离电机线走。**步进电机的线缆是一个斩波电流源,而与它并行 300 mm 的限位线就是一根天线。如果你的机器在电机断电时能正常回零、一开动就失败,那问题就是这个,别无其他。

按里程碑来做

每个里程碑都以一次测试收尾。不要跳过任何一个——它们各自都能抓出一个故障,而等到那时另外三样东西也一起坏了,这种故障就难查得多。

**1. 台架上的单个电机。**驱动器接好线,Vref 调好,ENABLE 拉低,命令输出 3200 个脉冲。 → *通过:*轴正好转一整圈,轴上做的记号回到原处,连续十次都如此。

**2. 两块驱动器的 Vref。**根据电机额定值和你自己板子上的采样电阻来算——看清丝印,是 R100 还是 R050。 → *通过:*两块的读数都在目标值的 ±0.02 V 以内,通电保持十分钟后电机只是温热,手指还能一直放在上面。

**3. 框架装好,两轴都能动。**皮带装好并张紧——要结实,不要紧到像吉他弦。 → *通过:*电机关闭时用手推动,每个轴都能从一端到另一端顺畅滑动,没有卡死的点。现在就把卡滞修掉;否则它以后会永远伪装成丢步。

**4. 每毫米步数。**在每个轴上命令走 100 mm,用直尺量出实际值,按比例修正,再量一次。 → *通过:*命令 100 mm,两轴实测都是 99.5–100.5 mm,连做两次都成立。

**5. 背隙。**从左边接近标记,记下位置;从右边接近,记下位置。 → *通过:*差值小于 0.2 mm。超过这个数,就把皮带张紧,并检查皮带轮的顶丝是否打在轴的平面上。

**6. 先找到极限,再退回来。**逐步提高速度和加速度,直到某个轴开始丢步,然后把两项都设成该值的 50–60%。 → *通过:*在设定的参数下,往返二十次都能回到同一个标记,误差在 0.1 mm 以内。

**7. 回零。**装上限位开关,实现三段式找零,做十次回零,每次做一个记号。 → *通过:*十个记号都在 0.05 mm 以内。另外还要做这一项:拔掉一个限位开关再回零,确认它会报错放弃,而不是一路磨着往前走。

**8. 抬笔机构。**装好舵机,反复试出抬起和落下的角度。 → *通过:*笔以轻微而均匀的压力接触纸面,整个台面范围内压力都一致。笔如果刚性安装,在不平的台面上就会往一侧扎——用弹簧或者重力悬挂会宽容得多。

**9. 方框。**先回零,然后在纸上画 100 mm。 → *通过:*最后一个角和第一个角的偏差在 0.3 mm 以内,而且连画三次,三个方框都落在同一处。

做到什么程度算好

测量项 第一台能跑起来的机器 标定之后 极限
100 mm 方框的闭合度 1–3 mm 0.2–0.3 mm 框架方正度
回零重复精度 0.3 mm 0.02–0.05 mm 限位开关的重复精度
背隙 0.5 mm 0.05–0.15 mm 皮带与同步轮的配合
绘制速度 20 mm/s 100–200 mm/s 先受拉入转速限制,再受拐角速度限制
微步距 — 0.0125 mm 远细于其他任何环节

最后两行合起来就是整个项目最核心的教训。电机的分辨率——0.0125 mm——大约比你实际能达到的误差还细二十倍。最终精度没有任何一项是受步进电机限制的。全部取决于皮带、框架和方正度。

在为了解决绘图问题而去买一台更好的电机之前,这一点值得先记清楚;这也正是步进模拟器被列进学习路径的原因:它会告诉你,在真实的负载下,转子已经落在驱动器以为的位置之后三四微步,无论你选择哪种细分方式。

值得注意的硬件细节

**如果可以选,就用 24 V 而不是 12 V。**两种都能用。差别在于扭矩从哪里开始往下掉:同样的电机、同样的限流下,12 V 大约在 280 rpm 之后掉扭矩,24 V 要到 600 rpm 之后。配上 20 齿的 GT2 同步轮,机器开始吃力之前大约分别是 190 mm/s 和 400 mm/s。如果绘图机永远只会慢慢爬,12 V 也够。

**把 MS1–MS3 跳线接高。**十六细分并不会让机器更准,但它能让电机不再在每一步都发出振铃般的响声——在单薄的框架上,这决定了机器听起来像一台机器,还是像一只愤怒的黄蜂。代价是在 100 mm/s 时每秒多出 8 000 个脉冲,Uno 完全应付得了。

**皮带张到结实,而不是绷紧。**过紧的皮带给电机轴承增加负载,还会引入吃掉扭矩裕量的摩擦;过松的皮带则会增加背隙。弹起来声音发闷,就说明松紧合适了。

**两个顶丝都要压在同步轮的平面齿上。**在轴上打滑的 20 齿同步轮,产生的误差看起来和丢步一模一样,而针对丢步的任何办法都不管用。这里用一点螺纹胶并不算过头。

出问题时看这张表

现象 原因 处理
电机嗡嗡响却不转 线圈分组接错,或没有加速斜坡 用万用表重新配线;加上斜坡
某个轴每走一趟都多偏一点 加速段丢步 降低加速度、提高 Vref,或者整体减速
慢速正常,一快就跳步 超过拐角速度 换 24 V——加大电流没有用
方框总是大 2% 每毫米步数不对 用直尺标定并按比例修正
方框开口量固定 背隙 张紧皮带;检查顶丝
每次回零都落在不同位置 缺少慢速二次找零 加入 1–3 mm/s 的二次找零
单独回零正常,绘制时却失败 限位线拾取了驱动器的噪声 重新布线;在引脚处对地加 100 nF
上电瞬间驱动器就烧 VMOT 上没有大容量电容 100 µF,尽量贴近板子
绘制中途驱动器进入保护 热保护 降低 Vref;加散热片和通风
笔在纸的一侧拖行 台面不平,或笔刚性安装 找平;笔用弹性悬挂,不要固定死
线条只在某一个速度下抖动 中段共振 略微改变速度,或给龙门增加配重
各项都对,图形还是歪的 两轴不垂直 找方框架——没有参数能解决这个问题

接下来可以往哪走

**换用 GRBL。**机器验证通过之后,烧上 GRBL,你就得到了一台真正的 G 代码解释器,回零、软限位、坐标系和加速都已经写好了。用标定出来的每毫米步数配置好 $100 和 $101,就可以用任何 CAM 软件驱动它。

**CoreXY。**还是那两台电机,但都固定在框架上,皮带走向改成让 X 和 Y 成为两台电机速度的组合,而不是各由一台驱动。运动质量更小,所以更快也更准——代价是在坐标和电机之间多出一层运动学混合。

**用激光代替笔。**机械上就是同一台机器换个工具,但二极管激光会带来实打实的眼睛安全要求,还需要外壳和联锁。把它当成一个独立项目,而不是一次简单替换。

**改用丝杠 Z 轴。**如果你想在有高度的表面上绘制,或者转做浅雕,一根 T8 丝杠可以做到 400 步/mm,而且断电后仍能保持位置。

**闭环步进电机。**这是唯一一个能彻底去掉本项目最尖锐失效模式的升级。每台电机后面装一个编码器,就能在悄悄丢步时给出修正或报警。代价是三到四倍的价格,如果上面的里程碑全部通过,那确实没有必要。

项目路线图

搭建路径

沿着技术树,从零件一路走到一台能正常工作的机器人。每个节点在其前置条件完成后解锁,你的进度会保存在这台设备上。

已完成 0 / 20

100%
目标

画出闭合方框的绘图机

整个项目

教程

步进电机为什么能到位,或者到不了位

35 分钟

打开教程
搭建

装配、标定、绘图

一个周末

元器件

本路径中的教程

接线之前先练习

用在线模拟器把它调好

搭建路径会经过一个浏览器实验台。先在这里把行为调对,再把参数迁移到真实的机器人上。

常见问题解答

业余笔式绘图机能有多精确?

一台精心制作的皮带传动绘图机,重复精度大约在 0.1 到 0.2 mm,画出的 100 mm 方框能闭合到零点几毫米以内。限制并不在电机:20 齿 GT2 同步轮在 1/16 细分下,一个微步是 0.0125 mm,远比机器里其他任何环节都细。真正决定误差的是皮带张力、框架刚度、同步轮处的背隙,以及两根轴之间的垂直度。如果你的误差超过半毫米,在动任何固件设置之前,先把这四项量一量。

需要 CNC 扩展板吗,还是可以用面包板搭?

两种都行。CNC 扩展板大约五英镑,给驱动器提供插座,引出限位开关和主轴引脚,还自带大容量电容——这就消除了烧毁驱动器最常见的那一种方式。只有两根轴的话,用面包板也没问题,前提是你自己在 VMOT 上跨接一颗 100 µF 电容,并让电机线远离步进信号线;不过扩展板的价钱,比你原本可能烧掉的第二块驱动器还便宜。

为什么抬笔用舵机,而不用第三台步进电机?

因为笔只需要两个位置——抬起和落下——而且哪个位置都不需要精度。一只业余舵机只用一个信号引脚、完全不需要驱动器就能做到,这正是它擅长的活儿。用步进电机做 Z 轴则需要第三块驱动器、第三组引脚、一根丝杠和一个回零开关,而这一切只是为了复现一只两英镑的舵机用一行代码就能做到的事。

X 轴和 Y 轴用皮带还是丝杠?

用皮带,不用太犹豫。GT2 皮带是 80 步/mm,跑到 200 mm/s 甚至更快都没问题;T8 丝杠是 400 步/mm,但同样的距离需要五倍的脉冲,这在 Arduino Uno 上会把你限制在大约 30 mm/s。绘图机几乎不承载任何重量,却需要在纸面上快速移动,这正是皮带擅长的情况。丝杠的用武之地是必须撑住重量的 Z 轴。

为什么我的方框合不上?

有四种原因,而且可以区分开来。如果误差是距离的一个固定百分比,那就是每毫米步数不对——用直尺来标定。如果无论尺寸大小,误差都是一个固定量,那就是背隙,要张紧皮带并检查同步轮的顶丝。如果每次误差都不一样,说明你在丢步,要降低加速度或提高电流。而如果方框变成了平行四边形而不是开口,说明两根轴互相不垂直,这是框架问题,任何设置都修不好。

可以直接用 GRBL,而不是自己写固件吗?

可以,而且一旦机器能正常工作,这就是明智的做法。GRBL 能把 Uno 变成一台 G 代码解释器,回零、软限位、加速度和坐标系都已经实现好了,你只需要用 $100 和 $101 来配置每毫米步数。之所以要先自己写一个简单版本,是因为同时调试一台机器和一份固件配置,要比一件一件分开做难得多。