“ Tom Nixon 打造了一台简易的 CNC 雕刻机,用于制造简单的 PCB。”

我制造了一台用于制作 PCB 等物品的微型 CNC 雕刻机。它的工作行程为 106 x 104 x 20 毫米,占用的空间约为 300 x 250 x 200 毫米。
它可用于制作带有 0.5 毫米引脚间距元件的 FR4 电路板,并且能够切割铝材。

这里是两个电路板示例,以及在亚克力和铝材上进行的实验:

为什么要做?
我曾在一次直播中看到 Scanlime 使用 Bantam Tools 的桌面铣床制作电路板。那看起来太方便了,拥有一台类似设备的想法从此在我脑海中挥之不去。
当然,从大多数指标来看,CNC 铣削客观上是获取电路板最糟糕的方式。
PCB 打样服务更便宜,能力更强,也更方便。但另一方面,我发现等待时间长(比如一周 vs 一小时)、每次都需要付费以及按板子面积付费这些因素,常常让我拖延并花费大量时间来完善和检查设计。
蚀刻无疑更便宜,并且可以获得更高的质量,但需要处理危险的化学品(在铺着地毯的出租公寓里不太理想……),它是一个单一用途的过程,并且也需要相当多的设备。在某些方面,它的能力更差,因为雕刻机可以很自然地制作出漂亮的电路板外形、安装孔和开槽。在某些方面,制作双面板也比使用蚀刻更容易。
雕刻机主要替代对象是在面包板上手工手工焊接原型项目:使用面包板的过程非常痛苦,总是比我预期的要花费更长的时间,而且结果常常不尽人意,稍不注意就会接错线,而修复错误又很麻烦。在如今所有元件都是表面贴装、所有信号都是高频的世界里,面包板原型的性能也并不理想。
我在业余 CNC 社区里潜水了一段时间,想要参与其中。我没有空间放置大型的二手设备,所以小型的全新设备就成了我的选择。
设计标准
我大致的设计目标是:
工作区域:至少 100 x 100 毫米。
工作高度:足够容纳电路板、工件夹具和垫板,约 15 毫米。
刀具:能够使用标准的 38.1 x 3.175 毫米刀具,并有足够的行程在工件上方更换刀具。
性能(运动系统刚性、最大作用力、背隙和分辨率;主轴转速、功率和跳动等)需足以满足:
FR4 绝缘雕刻(高转速,X 和 Y 轴分辨率 0.1 毫米,Z轴分辨率 0.01 毫米)
在合理的时间内完成 FR4 板材的切割
如果能切割铝材就更好了
体积和重量:足够小和轻,以便在不使用时可以轻松移动和存放。
我四处寻找市售的成品机器,发现的所有机器都太大、太贵,不符合我想要的功能。旧款的 Bantam Tools 铣床看起来很合适,但他们已经停产了,而且就其本身而言价格昂贵。
我也花了一段时间研究现有的设计。大多数通用机器都太大了。“The Ant” 看起来比较接近。制作出的电路板看起来不错,但有些方面似乎不如我希望的那样坚固。我也不太愿意在一个专有设计的基础上进行构建:设计源文件不可用,只有输出文件。
运动系统设计
这是标注了术语和轴名称的机器:

这是一台由 2020 铝型材构建的龙门式机器。X 轴和 Z 轴使用单根 MGN12H 线性导轨和滑块,而 Y 轴使用两根。X 轴和 Y 轴由同步带驱动,这些同步带由 NEMA17 0.9 度步进电机直接驱动。Z 轴使用丝杠和消隙螺母,由一个小型 NEMA14 步进电机驱动。
按照传统标准,这听起来相当脆弱,与3D打印机几乎没有区别,但实际上它的刚性足以满足上述标准。
其基本原理如下:
整个机器非常小,例如龙门在支撑之间的长度仅为 205 毫米。由于梁在三点加载下的挠度与其长度的立方成正比,这带来了巨大的差异——将 X 轴加长 50 毫米,框架的刚性大约会减半。这也使得同步带变短,从而有所帮助。
运动系统的设计使得切削力尽可能靠近导轨产生,以最大限度地减少扭矩。X 轴导轨承受的扭矩最大,但距离典型的刀具位置也只有 50 毫米。
未经测量,X 轴导轨是升级的一个好选择——最简单的方案是将龙门更换为20 x 40 毫米的型材,并使用两条 MGN9 导轨,每条带两个滑块,它们更小但可以并排放置。
X 轴和 Y 轴选择同步带驱动是因为它们便宜、紧凑、简单且固有零背隙。为了使其具有刚性,我使用了大型步进电机、10 毫米的 GT2 同步带、16齿 的小同步轮以及高皮带张力。
步进电机的保持扭矩为46 N.cm,使用16齿同步轮时可达90 N。
选择0.9度步进电机(而不是普通的1.8度)是因为在相同保持扭矩下,步数多一倍的步进电机刚性也高一倍。这是因为步进电机的扭矩相对于轴角度是正弦变化的,周期由步长定义。分辨率的提高也很好(0.08毫米,或使用16x微步时为0.005毫米)。
使用带集成丝杠的步进电机可能复杂度相似,但价格昂贵且规格常常不明确。
在 Z 轴上使用丝杠可以在需要的地方提供更高的分辨率,减轻滑架的重量,并在电机断电时保持Z轴位置。在我关心的应用场景中,Z轴上的力主要是一个方向(向上),所以消隙装置可以弱一些。
运动系统中有一些3D打印的零件。
皮带夹是打印的,并且足够长,刚性不是问题(尽管带齿的部分应该更换为铝制的):

张紧轮/张紧器也是打印的:

这种奇特的设计是为了在小空间内处理高张力。左右两部分都用一个螺丝安装在框架上,它们之间有两个螺丝连接。右侧块中的螺丝用于张紧皮带,而左侧块中的螺丝用于使其与框架平行(在张紧皮带时会松开)。尽管张力很高,但蠕变现象并未成为问题。
Z轴
Z 轴上的消隙螺母也是打印的:

我本打算使用市售的螺母,但很难找到一个能装进这个空间的。最后,买一个tap 然后自己做了一个。它工作得还不错,但肯定需要重新设计:柔性结构的设计虽然巧妙,但在实践中完全没有必要,弹簧力仅由塑料的弹性提供,而且底部的安装螺丝完全被挡住,需要拆卸才能接触到。
Z轴电机座/推力轴承也很有“趣”。它内部看起来是这样的:

联轴器将电机轴与丝杠连接起来。它是一种柔性的“梁”式联轴器,在安装时被拉伸,以张紧整个装置并消除背隙(丝杠上的轴环将轴承推入支架底部)。
这很奇怪,但比我能找到的任何传统丝杠轴承布置都更紧凑,而且是用我已有的零件组装的。主要问题是不恰当地使用了球轴承;它很快将被一个角接触轴承取代。
主轴
当前的主轴迭代是围绕一个 ER8 夹头“延长杆”构建的,这其实就是一个末端带有夹头的8毫米轴,通常用于在真实铣床中,在难以触及的地方使用小刀具。主轴由一个无刷外转子电机驱动,通过一个在鼓形轮上运行的平皮带传动:

主轴在两个角接触轴承上运行,这两个轴承安装在一个 3D 打印的块中。该块直接用螺丝固定在 Z 轴线性导轨的滑块上。它被分成两部分,因此轴承基本上是通过安装螺栓夹紧在滑块上的,使其具有相当的刚性。
轴承由一个弹簧和一个 3D 打印的轴环预紧。使用了一个刚度较低的弹簧,因为 PLA 的热膨胀系数很高,如果弹簧刚度太高会导致问题。3D 打印的轴环不是一个好主意,很快就会被替换。
传动带只是一个反向使用的 6 毫米 GT2 同步带,虽然能用,但我想找到一个更好的解决方案。主要问题是皮带对于鼓形轮来说太宽了,所以循迹调整很棘手。
电机座也需要重新设计。下一个版本将把电机座和丝杠螺母集成到主轴块中。
电子部分
整台机器由一块 Ender 3 3D 打印机的主板控制。它基本够用,只是慢速的微控制器限制了控制软件的选择。

我做了一些修改,使其在此应用中工作得更好。
更换了限位开关输入端的滤波器——最初它们有一个连接到 VCC 的 10k 电阻和一个连接到地的 9.2uF 电容。对于短接到地的限位开关,这基本上就是一个微型点焊机。难怪它们会损坏限位开关。
我还短接了 X 轴和 Y 轴上的 ROSC 电阻,以关闭 A4988 步进驱动器上的自动模式选择功能,该功能似乎与这些步进电机配合得不好。
主轴电机由一个随机在 ebay 上买的无刷电调(ESC)驱动。主要问题是,这个所谓的速度控制器尽管名字叫“速度控制器”,但实际上并不控制速度。电机速度与控制板发出的脉冲宽度没有直接关系,也没有速度反馈,所以目前我只能在 G 代码中用任意的 PWM 单位设置速度,然后祈祷一切顺利。
我希望在下一次迭代中加入一个主轴速度传感器,这样控制器就可以闭环控制并检测失速或皮带问题。
软件
控制器运行的是 uCNC,它有很多功能,并且仍然可以在旧的微控制器上运行。相比 GRBL,我真正需要的唯一功能是能够在一个轴上使用两个电机(即使这个问题也可以通过硬件解决)。我遇到了一些bug,但开发者非常活跃,问题很快就得到了修复。
我使用 bCNC 向控制器发送 G 代码。花了一段时间才找到这个软件,它似乎是一个隐藏的宝藏。我遇到了一些小问题,但没有致命的(而且如果使用 GRBL,有些问题可能根本不会出现)。由于它是一个简单的 python/tk 项目,这些问题很容易解决。
我正在使用它的高度图(height-mapping),发现它比 uCNC 内置的更方便,因为可以很容易地从加载的 G 代码中设置区域,并且有一个很好的结果可视化。
它的手动换刀支持也很好——你可以让它暂停作业,移动到指定的换刀位置,然后进行探测以设置刀具长度偏移或工件坐标系零点。
在主轴上使用摄像头的功能很有趣,虽然也很繁琐。一旦校准,它就可以用来找到特征的位置,以便设置零点位置,甚至校正旋转。理论上,这为制作双面电路板提供了一个很好的工作流程,通过绝缘雕刻和钻孔第一面,然后使用钻好的孔来对齐第二面。
实际上,第二面的对齐不需要那么精确,所以其他方法可能也足够好,而且不那么麻烦。我唯一一次尝试这个方法时,忘记了按那个实际校正旋转的按钮,结果也还不错。
为了将 KiCad 的输出转换为 G 代码,我使用了 pcb2gcode。它易于使用且效果很好,只是当前版本中有一个 bug,有时会导致移动路径切断走线,虽然很容易解决,但如果你没发现就会很烦人。
我并不总是对它生成的刀路感到满意,但这并非 pcb2gcode 的错。在尽可能精确地再现设计和生成最优刀路之间存在固有的矛盾。例如,它会花时间将散热焊盘的角落修成方形,这是不必要的,但这是它被告知要做的,而有时修方角是必要的。
我想尝试制作自己的 G 代码生成器,只是为了更好地理解这个问题,但这显然是一个巨大的时间坑。
一个更好的控制器?
虽然这一切都能工作,但还可以更好。控制器和发送器之间的分离对我来说意义不大。它们是不同的项目,由不同的人编写,使用混合的未指定协议和 G 代码的随机子集,这一点显而易见。
当发送器发送一长串不间断的 G 代码时(就像在3D打印机中那样),这种安排还行,但一旦有了用户参与其中的操作(比如手动换刀),双方就需要真正地相互理解。它大部分时间能工作,但感觉很别扭,而且非常容易出 bug。
我认为相比之下,有一些项目在这方面做得很好:
在 Klipper 中,一个服务器应用程序解释 G 代码以产生步进/方向信号,这些信号被压缩并通过串口发送到一个微控制器,其唯一(或几乎唯一)的工作就是产生步进/方向信号并报告其状态。用户界面通过一个定义良好的 API 与服务器通信。
这意味着只有一个 G 代码解释器,它不在微控制器上运行(因此不必为足够快的运行速度而优化),甚至不需要实时运行,因为步进/方向命令可以被排队。
为了实现探测,服务器告诉微控制器组件在 GPIO 状态改变时停止。
不幸的是,它非常针对打印机,并且缺少 CNC 所需的许多功能。繁重的步进压缩也只是为了在通过慢速链接连接的慢速微控制器上工作而需要的,而如今这两者都是不必要的限制。
在 LinuxCNC 中,一个服务器每秒产生1000次一组电机位置。这些位置要么在软件中转换为步进/方向信号(用于老式的并口操作),要么通过将这些位置发送到某个硬件接口来实现。
这与Klipper类似,但服务器是实时运行的——这对于在 CNC 车床上实现螺纹加工等操作是必需的,但在这个应用中感觉多余。要简单地添加一个缓冲区并不容易,因为探测是在服务器中实现的。这意味着有两个不太理想的选择:
在我的普通电脑上运行实时服务器(这台电脑同时还运行着KiCad/FreeCAD、一个网页浏览器、无数个 xterm 等——不是一个理想的实时环境),通过以太网或 USB 连接到机器上的某个控制板。
在连接到机器的嵌入式计算机上运行实时服务器,并通过 X11-over-SSH或使用 LinuxCNC 的客户端/服务器模式来运行 GUI。这可能是明智的选择,只是对我来说听起来不太有趣。
刀具
对于 FR4,到目前为止我只使用了 ebay 上特价的雕刻刀、铣刀和钻头。令人惊讶的是,所有这些实际上都是碳化钨(根据密度判断),但我只推荐钻头。铣刀到货时就有缺口并且很钝,而雕刻刀的几何形状基本上是随机的:10 支中只有几支能用。
对于铝和塑料,我一直在使用 aliexpress上 “DREANIQUE” 店铺的单刃立铣刀,看起来不错。
对于工件夹持,我主要使用一些 3D 打印的压板,用螺丝固定在底板的 M3 螺纹孔中。这效果很好,只是在绝缘雕刻一块10 x 10厘米的电路板时,中心有足够的弹性,需要更深的绝缘雕刻才能正常工作。一个解决方法是在中心加一些衬垫,让高度图来补偿。
成果
FR4 电路板
这是我做的第一件东西,只是为了测试一下。它是一个反射式红外传感器的放大器:

我做的最复杂的东西是这块用于 tidybot 的板子,带有一个 ESP32-C6、一个用于供电/编程的USB端口、一个浪涌电流限制电路、两个电机驱动器以及一些其他零碎的东西。

这是双面板,过孔由黄铜铆钉支持。背面主要是接地层。
这块板的绝缘雕刻和外形切割各花了大约 10 分钟。照看切割过程相当不愉快,因为我目前是手动添加肥皂水以防止玻璃纤维粉尘进入空气。如果使用吸尘装置和更快的速度(目前仅为100毫米/分钟,下刀深度0.45毫米),也许是可行的。
不过,我对这类东西更感兴趣,这是一个原型 DC-DC 电源,只是为了在另一个项目中验证它而构建的(上面布满了电线、助焊剂、氧化层和绒毛):

布局是随手做的,没有太在意,忽略了任何难以布线的走线,事后用漆包线补上。绝缘雕刻花了6分钟,没有切割或钻孔步骤,整个过程快速而简单。
关键部分的布线(例如这些 DC-DC 转换器的接地和电源走线)比在面包板上使用 SMD 转接板所能轻松实现的要好得多。
亚克力
在亚克力上钻 4 毫米的孔和开 3 毫米的槽,使用 2 毫米单刃立铣刀切割。

这些是在 1100 毫米/分钟的速度和 20000 RPM 的转速下切割的,每齿进给量约为 0.05 毫米。左边两个的下刀深度为 0.75 毫米,右边为 1 毫米。两者看起来都不错,但排屑开始成为问题,并且可以看到一些重复切削的痕迹。
孔使用了单程螺旋路径(100%宽度),而槽使用了带有斜坡进刀修饰的偏置路径,这让它听起来更顺畅。
铝材
在神秘的铝型材上切割一个 5 毫米宽、2 毫米深的 pocket 和一个 2 毫米的槽,使用 2 毫米单刃立铣刀。

这些是在 500 毫米/分钟的速度和 20000 RPM 的转速下切割的,每齿进给量约为 0.025 毫米,下刀深度为 0.2毫米。
pocket 使用了自适应清角和 0.1 毫米的全深度全速精加工,这太多了——可以看到一些颤振的痕迹。
经过一些调整,它可能可以跑得更快一些。
成本
不包括电子部分的大致成本明细可能如下所示:
3 x 步进电机,2x 直角支架,扁平支架,联轴器:43英镑 + 26英镑运费 = 70英镑
3 x 708C-P5 角接触球轴承:16英镑
3 x 150毫米 MGN12H 导轨,1x 100毫米 MGN12H 导轨,1x 2毫米导程 T8 丝杠:45英镑
2 米 10毫米 GT2同步带,3x 5毫米 20T 10毫米惰轮,3x 5毫米 16T 10毫米同步轮:36英镑
C8-ER8A-100L 夹头,ER8-3.175mm 夹心:11英镑
2 米 2020 铝型材:15英镑 + 9英镑运费 = 24英镑
L2210A-1650 电机,20A 电调:约 25英镑
5 毫米铝板用于床身,6 毫米用于滑架:约 20英镑
TR8 x 2 丝锥:21英镑
杂项硬件:30英镑
总计约 300英镑。在可能的情况下,我使用了 Voron 采购指南来寻找零件。
结论
一方面,这个项目的结果永远无法证明其成本,这主要是我花在上面的时间。
另一方面,我想造一台 CNC 机器,结果令人满意,过程也很有趣。我对一些非传统的设计决策冒了险,这些决策似乎得到了回报,因为机器达到或超过了我开始项目时的期望。
我已经计划好了一些升级和使用这台机器的项目;未来将继续更新。
本文转载自:https://www.tomn.co.uk/posts/2025/May/08/pcb_cnc/
,经过翻译及校对
扫码加入资料分享群,定期分享硬件资料

如何学习四轴飞行器,有这套资料就足够了!(文末免费分享四轴飞行器相关资料合集)
电子硬件工程师如何从零开始学习?(文末免费分享从零开始学习资料)
电路原理图设计流程与注意事项(免费分享26套原理图设计资料合集)
如何学好电路设计?(文末分享电路设计资料合集)
开关电源的工作原理(文末免费分享开关电源资料合集)
学习射频和天线有这套资料就够了!(文末可免费领取)
1000+例各类获奖电赛作品资料集(电路篇、代码篇、教程篇文末免费领取)
分享嵌入式初级工程师全套学习资料包
分享100+套机器人设计资料(文末可免费领取)
免费分享Arduino入门+进阶(全套例程+书籍)
从入门到提升,嵌入式linux常用电子书教程合集分享
凝聚全网精品的电源工程师必备资料合集
LabVIEW的详细简介和应用(文末免费分享LabVIEW相关资料合集)
信号与系统是什么?(文末免费分享16G+信号与系统资料含大量视频教学)