基于Arduino与CoreXY结构的小型写字机:从硬件搭建到G代码控制

发布时间:2026/7/29 10:54:10
基于Arduino与CoreXY结构的小型写字机:从硬件搭建到G代码控制 1. 项目概述从想法到桌面绘图仪几年前我在一个创客展上看到一台大型的绘图机器人它用两支笔在墙上绘制复杂的几何图案当时就被这种精准的机械运动迷住了。但那种大型设备显然不适合普通爱好者在家折腾。后来接触到3D打印机发现其核心的CoreXY运动结构非常精妙它用两个步进电机协同工作来控制一个末端执行器在二维平面上的运动结构紧凑且精度高。于是我就想能不能用最普及、成本最低的Arduino平台结合CoreXY结构做一台小型的、能在纸上写写画画的“写字机”呢这个想法就是今天要分享的“小型CoreXY结构写字机”项目的起点。这台机器本质上是一台桌面级的二维平面运动平台。它的核心任务是接收来自电脑的指令比如一个G代码文件里面包含了绘制某个图形或文字所需的路径坐标然后通过Arduino主板和电机驱动板精确控制两个步进电机带动笔尖在纸上走出对应的轨迹。它非常适合用来学习运动控制原理、G代码解析、机械结构设计当然也能实实在在地帮你完成一些有趣的创作比如自动签名、绘制简单的电路板边框、或者是完成一些重复性的图案绘制工作。无论你是对机电一体化感兴趣的硬件新手还是想深入理解CNC计算机数控底层逻辑的开发者这个项目都能提供一个绝佳的实践平台。整个项目的核心关键词都围绕着开源硬件和运动控制CoreXY决定了它的机械灵魂Arduino UNO R3作为大脑CNC Shield扩展板负责驱动电机而Grbl固件则是将G代码指令转化为电机脉冲的“翻译官”。下面我们就来彻底拆解这个项目从设计思路、硬件选型、软件配置到调试技巧一步步把它从想法变成现实。2. 整体设计与核心思路拆解2.1 为什么选择CoreXY结构在开始动手之前搞清楚为什么用CoreXY至关重要。常见的二维运动结构有笛卡尔X轴和Y轴电机分别独立驱动和三角洲并联臂等。CoreXY结构最大的魅力在于它将两个电机的运动耦合起来共同决定末端执行器笔头的位置。它的工作原理可以通过一个简单的模型来理解想象一个矩形框架左右两侧各有一个同步轮由两个步进电机我们称为电机A和电机B分别驱动。有两根同步带以特定的方式缠绕在这些轮子和框架的惰轮上最终形成一个闭环共同连接着中间的滑块笔头所在的平台。当两个电机同向同速转动时滑块会沿着X轴移动当两个电机反向同速转动时滑块会沿着Y轴移动通过两个电机不同速度、不同方向的组合就能实现滑块在XY平面内任意方向的直线或曲线运动。这种结构带来的直接好处有三个电机固定两个驱动电机都固定在机架上不随运动部件移动大大减少了运动部件的质量和惯性。这使得系统可以更快地加速和减速实现更高的运动速度和精度同时电机散热也更好。结构对称紧凑运动平台笔头位于框架中心受力均匀整体结构看起来非常简洁、对称易于设计和组装。成本与性能平衡相对于全闭环系统它成本较低相对于简单的笛卡尔结构电机装在移动的轴上它在高速下的表现更稳定。对于我们的写字机项目CoreXY的这些特性完美匹配我们需要笔尖平稳、精确地运动同时希望机器结构不笨重CoreXY是不二之选。2.2 硬件生态系统选型为什么是Arduino UNO CNC Shield Grbl确定了机械结构接下来是电子部分。这里的选型几乎是开源硬件领域的“黄金组合”其背后的逻辑是成熟、稳定、社区支持强大。主控Arduino UNO R3选择UNO R3的原因非常直接它是Arduino家族中最经典、资料最丰富的型号。其ATmega328P单片机有足够的IO口和计算能力来运行Grbl这样的实时运动控制固件。更重要的是它的引脚布局标准有大量现成的扩展板Shield可供选择极大降低了连接复杂度。虽然像Nano、Mega等型号也能用但UNO的物理尺寸和稳定性对于初次构建这类项目来说是最友好的。驱动扩展板CNC Shield V3.0这是项目的“力量源泉”。CNC Shield是一个专为Arduino UNO设计的电机驱动扩展板它直接插在UNO上提供了最多4个步进电机驱动接口通常使用A4988或DRV8825驱动模块并集成了限位开关、主轴或激光控制、冷却控制等接口。对于我们的CoreXY写字机只需要用到其中的两个电机驱动接口X和Y轴以及限位开关接口。使用这块板子你就不需要再费力地去焊接电机驱动电路、设计逻辑电平转换和电流调节电路了它把所有脏活累活都包了让你能专注于结构和软件。固件GrblGrbl是一个高性能、开源的G代码解析器和运动控制器专为Arduino/AVR平台优化。它才是整个系统的“灵魂”。你的电脑通过串口发送G代码指令例如G1 X10 Y20 F500意思是直线移动到X10 Y20位置进给速度500毫米/分钟Grbl固件会实时解析这些指令计算出两个步进电机所需的脉冲数和方向并通过CNC Shield驱动电机精确执行。Grbl支持加速度控制、直线和圆弧插补、步进电机加减速规划等高级功能确保了运动的平滑和精确。它经过全球无数CNC、激光雕刻、3D打印项目的验证极其可靠。这个组合形成了一个清晰的分层架构电脑上位机软件负责生成或发送G代码 -Arduino UNO运行Grbl负责解析和运动规划 -CNC Shield负责功率驱动 -步进电机负责执行机械运动。每一层都有成熟的开源方案保证了项目的可实施性。3. 核心部件详解与材料清单3.1 机械结构部件CoreXY结构的机械部分可以完全通过3D打印和标准件组合实现。以下是核心部件清单框架通常使用2020或2040规格的铝型材搭建。铝型材轻便、坚固、易于切割和连接是DIY机械结构的首选。你需要根据设计的绘图面积来确定型材的长度。例如一个A4纸大小的绘图区域约300x210mm框架尺寸可能需要做到400x300mm左右。运动平台滑块这是安装笔具的部分。它需要能够在XY平面内自由滑动。通常采用直线光轴直线轴承的方案。你需要两根足够长的光轴作为X向导轨两根短一些的作为Y向导轨并配套对应数量的直线轴承LM8UU是常见型号。滑块本身是一个3D打印的零件用于固定直线轴承和笔夹。同步带与同步轮这是传递动力的关键。需要两根GT2规格的同步带周长根据框架尺寸计算和四个GT2 20齿的同步轮。两个同步轮分别安装在两个步进电机的轴上另外两个作为惰轮安装在框架的对角位置用于改变同步带的走向。步进电机推荐使用42步进电机机身尺寸42mm x 42mm这是桌面级设备的标准型号。扭矩在0.4N.m左右就足够带动笔头运动。需要两个。注意电机的轴径需要与同步轮匹配通常是5mm。笔具固定与抬笔机构写字机需要能控制笔的抬起和放下。最简单的方法是使用一个9g微型舵机。通过舵机旋转一个角度带动一个连杆或凸轮机构将笔提起或压下。笔夹可以用3D打印或者直接用现成的弹簧夹。紧固件大量需要M3、M5的内六角螺丝、螺母、T型螺母用于在铝型材上固定以及用于固定光轴、电机等的支座通常可以3D打印。3.2 电子部件清单主控板Arduino UNO R3 x1。驱动扩展板CNC Shield V3.0 x1。步进电机驱动模块A4988或DRV8825模块 x2。A4988更常见便宜DRV8825支持更高细分和电流散热更好。建议初学者从A4988开始。步进电机42步进电机1.8度/步四线制x2。电源需要一台12V 5A以上的开关电源。为两个步进电机和Arduino系统供电。注意电压一定要匹配过高会损坏驱动模块过低则电机无力。限位开关微动开关常开型x3X轴、Y轴各一个Z轴原点开关可选。用于定义机器的物理边界和归零位置。微型舵机9g舵机 x1用于控制抬笔。杜邦线公对公、公对母若干用于连接。USB数据线A to B型用于连接电脑和Arduino。注意在采购A4988/DRV8825模块时务必确认其电流调节电位器和散热片是否完好。驱动模块的发热量不小良好的散热是稳定运行的前提。4. 机械组装与核心调整4.1 框架搭建与同步带系统安装组装顺序建议从下往上从静到动。首先用铝型材和角码搭建好一个坚固的矩形框架。确保框架方正对角线长度一致否则会影响后续运动的精度。然后安装四根光轴。两根长的作为X轴导轨平行地固定在框架的长边上两根短的作为Y轴导轨平行地固定在框架的宽边上。安装时务必使用水平尺或直角尺辅助确保所有光轴相互平行且垂直于框架平面。接下来是CoreXY的核心——同步带系统。这是最容易出错的一步。你需要严格按照CoreXY的皮带路径图进行缠绕。一个经典的缠绕方法是将两根同步带的一端都固定在运动滑块笔头平台的同一个点上比如左上角固定点。第一根皮带从该点出发绕过左上角的电机A轮向下走到右下角的惰轮再水平向左回到滑块右下角的固定点。第二根皮带从滑块同一点左上角出发水平向右走到右上角的惰轮再向下绕过左下角的电机B轮最后回到滑块左下角的固定点。这样两个电机通过皮带的交叉缠绕共同控制了滑块的运动。安装后用手轻轻推动滑块应该感觉滑动顺畅没有卡滞。同时同步带需要保持适当的张力太松会打滑失步太紧会增加阻力并加速磨损。可以用张紧器可3D打印进行微调。4.2 电机与电子部件安装将两个42步进电机分别固定在框架左下角和右下角根据你的缠绕方式决定确保电机轴上的同步轮安装牢固且与惰轮在同一平面。把CNC Shield插到Arduino UNO上然后将两个A4988驱动模块插入CNC Shield上标有X和Y的插座。注意模块的方向通常有调节电位器的一面朝外。接线是关键环节务必仔细电机接线42步进电机通常是4线两相。你需要查阅电机说明书找到A A- B B-四根线。将它们对应连接到A4988模块的1A, 1B, 2A, 2B输出端。如果接反了电机会抖动或不转但通常不会损坏调换线序即可。电源接线将12V电源的正极接到CNC Shield的V端子负极-接到GND端子。务必在断电状态下操作CNC Shield会通过引脚为Arduino UNO提供5V电源所以不需要再单独给UNO供电。限位开关接线将三个微动开关常开端分别接在CNC Shield的X-,Y-,Z-或Z和GND端子上。我们通常使用负限位-来定义机器的原点Home Position。当滑块触碰到开关时电路导通Grbl会收到信号。舵机接线舵机有三根线电源红接5V、地线棕或黑接GND、信号线橙或黄。信号线可以接在CNC Shield上预留的A或Z引脚这个引脚在Grbl中可以被配置为控制舵机的PWM输出。实操心得在首次通电前一定要设置A4988的驱动电流这是保护电机和驱动模块最重要的一步。使用小螺丝刀调节模块上的微型电位器。用一个万用表测量电位器滑动端与GND之间的电压Vref然后根据公式I Vref / (8 * Rs)计算电流对于A4988Rs0.05欧姆所以I ≈ Vref * 2.5。例如想要电机电流为1A则Vref应调到约0.4V。将电机电流设置为电机额定电流的70%-80%即可既能保证力度又能有效控制发热。5. 软件配置与固件刷写5.1 刷写Grbl固件到Arduino硬件连接好后我们需要给Arduino UNO“灌输灵魂”——刷入Grbl固件。安装Arduino IDE从Arduino官网下载并安装最新版的Arduino IDE。获取Grbl库打开Arduino IDE点击“工具” - “管理库...”在库管理器中搜索“Grbl”找到由“Grbl”官方发布的库并安装。这是最方便的方法省去了手动下载的麻烦。选择板卡和端口用USB线连接电脑和Arduino。在IDE中“工具” - “开发板”选择“Arduino Uno”“端口”选择对应的COM口Windows或/dev/tty.usbmodem*Mac。加载并上传示例安装完库后点击“文件” - “示例” - 从示例库中找到“Grbl” - 选择“GrblUpload”。这个示例已经包含了完整的Grbl固件。直接点击上传按钮向右的箭头。等待编译和上传完成。验证上传成功后打开IDE的串口监视器右上角放大镜图标设置波特率为115200。你会看到Grbl的启动信息并出现Grbl的命令提示符。输入$$并回车可以查看当前的所有Grbl配置参数。这说明固件刷写成功。5.2 关键Grbl参数配置与校准刷入固件后需要根据你的机器实际情况进行配置。通过串口监视器发送命令来修改参数。以下是一些最关键的配置使用$XY格式如$10080$100和$101(X, Y轴每毫米步数)这是最重要的参数决定了机器运动的精度。计算公式是步数/毫米 (电机每转步数 * 驱动器细分) / (同步轮齿数 * 皮带齿距)。电机每转步数1.8度电机是200步/转整步。驱动器细分A4988通过跳线帽设置。常见设置为1/16细分即每步细分为16微步那么电机每转需要200 * 16 3200步。同步轮齿数假设是20齿。皮带齿距GT2皮带是2mm。计算(3200) / (20 * 2) 80 步/毫米。所以$10080$10180。你必须根据自己电机的细分设置和皮带轮准确计算这个值。$110和$111(X, Y轴最大速率单位mm/min)电机能达到的最大速度。对于写字机1000-2000 mm/min是比较合理的起步值。可以先设$1101500$1111500。$120和$121(X, Y轴加速度单位mm/sec^2)决定电机启动/停止的快慢。太大会丢步太小效率低。建议从200开始尝试。$120200$121200。$22(归零使能)设置为1($221)启用限位开关归零功能。$23(归零方向)设置为1($231)表示向负方向通常是限位开关所在方向寻找原点。$24和$25(归零速度和搜索速度)$24是快速接近速度$25是碰到限位开关后的慢速回退搜索速度。可以设为$24500$25100。舵机控制配置Grbl默认不支持舵机但我们可以利用其主轴PWM功能。需要修改Grbl的源代码并重新编译。找到config.h文件中的#define VARIABLE_SPINDLE确保它被启用。然后我们可以通过M3主轴正转命令配合S值0-1000来控制舵机角度。例如M3 S1000让舵机转到最大角度抬笔M3 S0转到最小角度落笔。这需要一些代码修改对于新手也可以考虑使用一个独立的Arduino引脚通过M42命令控制数字引脚来简单控制舵机通断实现二值化的抬落笔。配置完成后输入$$保存所有设置到EEPROM。然后可以发送$H命令进行归零测试机器应该会先向X负方向、再向Y负方向运动直到触发限位开关后停止此时坐标被设为(0,0)。6. 上位机软件使用与G代码生成6.1 上位机软件选择Grbl固件需要一个“上位机”软件来发送G代码指令、可视化路径和控制机器。常见的选择有Universal Gcode Sender (UGS)功能全面跨平台非常适合与Grbl配合使用。它可以直接加载G代码文件可视化预览路径手动控制机器移动Jog并实时显示Grbl状态。Candle界面更现代对新手友好同样支持Grbl常用于激光雕刻和CNC。Grbl Controller经典的上位机比较轻量。推荐初学者使用UGS它的社区支持和文档都很完善。6.2 从图形到G代码Inkscape gcodetools我们的目标是让机器写字画画所以需要把图形或文字转换成G代码。一个强大的免费工作流是Inkscape矢量绘图软件 gcodetools插件。在Inkscape中绘制打开Inkscape用文字工具输入你想写的字或者用绘图工具画出图形。关键一步选中文字点击“路径” - “对象转路径”将文字从字体对象转换为可编辑的路径。然后点击“路径” - “动态偏移”或“简单偏移”为路径创建一个“轮廓”这代表了笔尖的行走中心线。最后点击“路径” - “轮廓转路径”。安装gcodetools插件下载gcodetools插件文件放入Inkscape的扩展目录。重启Inkscape后在“扩展”菜单下会出现“gcodetools”选项。生成G代码选中你转换好的路径。点击“扩展” - “gcodetools” - “Tools library”。在弹出窗口中你需要设置“方向深度”笔尖工作平面设为0、“工具直径”笔尖粗细可设0.1mm、“加工深度”设为-0.1mm表示轻微下压。最重要的是设置“刀具库”。你需要创建一个新的“刀具”配置在其中指定“进给速度”F值如500mm/min、“主轴转速”S值这里用于控制舵机例如落笔S0抬笔S1000以及G代码的头部和尾部。例如在头部加入G90绝对坐标、G21毫米单位、G0 Z5先抬笔到安全高度等在尾部加入M5关闭主轴/舵机、M30程序结束。配置好后运行工具它会生成一个.ngc文件这就是你的G代码。6.3 运行测试在UGS中连接你的Arduino串口波特率115200。先进行手动控制Jog让笔头移动到纸张的大概起始位置。然后点击“归零”$H。加载生成的G代码文件UGS会显示路径预览。在笔尖对准纸张起始点后可以先单步Step运行几行代码观察笔的抬落动作和移动轨迹是否正确。确认无误后就可以点击“开始”让机器自动运行了注意事项第一次运行务必密切观察手放在紧急停止按钮UGS里有或电源开关附近。确保运动范围不会撞到机械限位笔尖的下压力度适中不会戳破纸或打滑。建议先用笔画在空气中运行一遍不装笔确认路径安全。7. 调试、优化与常见问题排查即使一切按部就班首次运行也难免遇到问题。这里记录一些典型的“坑”和解决方法。7.1 运动问题排查表问题现象可能原因排查与解决方法电机不转或只抖动1. 电源未接或电压不足。2. 驱动模块电流设置过低或过高烧坏。3. 电机线序接错。4. Grbl脉冲引脚配置错误。1. 检查电源连接用万用表测量CNC Shield V和GND间是否有12V。2.断电后重新检查并设置驱动电流。如果模块发烫严重且有糊味可能已损坏。3. 尝试交换同一电机的一组线如A和A-对调。4. 检查Grbl的$0步进脉冲微秒和$1步进方向延时是否为默认值$010,$125。运动方向错误1. 电机接线相序错误。2. Grbl中轴方向设置反了。1. 调整电机线序。2. 在Grbl配置中修改$3X轴方向反向和$4Y轴方向反向。默认是0反向则设为1。例如如果X轴运动方向反了就发送$31。丢步图形变形、错位1. 加速度$120/$121或最大速率$110/$111设置过高。2. 同步带太松打滑。3. 驱动电流不足电机扭矩不够。4. 机械阻力过大光轴不平行、轴承卡涩。1.逐步降低加速度和最大速率参数这是最常见原因。2. 张紧同步带。3.适当调高驱动电流需在安全范围内。4. 检查所有运动部件确保安装平行、润滑顺畅。无法归零$H无效1. 限位开关未正确触发或接线错误。2. Grbl中归零功能未启用或方向错误。3. 限位开关信号被干扰。1. 手动触发限位开关在UGS状态中查看对应限位X, Y状态是否变化。2. 确认$221$23方向正确。检查$16限位开关反逻辑是否需要设置。3. 尝试为限位开关信号线增加上拉电阻CNC Shield通常已内置或使用屏蔽线。画圆不圆或斜线不直1. X轴和Y轴的“每毫米步数”$100/$101不准确或不一致。2. 机械框架不方正两轴不垂直。1.重新校准命令机器画一个100mm x 100mm的正方形。测量实际尺寸通过公式新步数 旧步数 * (指令距离 / 实际距离)来修正$100和$101。可能需要多次迭代。2. 使用直角尺重新调整框架和光轴的垂直度。7.2 精度与性能优化细分设置将A4988设置为更高的细分如1/16或1/32可以使电机运行更平稳、噪音更小也能提高理论分辨率。但要注意过高的细分会对主控的脉冲频率提出要求在高速时可能成为瓶颈。对于写字机1/16细分是一个很好的平衡点。加速度调谐这是影响运动质量和速度的关键。在UGS中有一个“加速度调谐”功能它可以自动测试不同加速度下机器是否丢步并给出推荐值。使用这个功能可以快速找到你当前机械结构下的最优加速度。运动学参数校准除了校准每毫米步数还可以校准“反向间隙”。如果皮带存在弹性或连接有微小间隙当电机反向时会有一段空程。Grbl的$120参数可以用来补偿这个间隙。通过命令机器来回运动一段距离并测量实际位移差可以计算出补偿值。笔压控制简单的舵机抬落笔可能压力不均。可以升级为使用电磁铁配合弹簧通过PWM控制电磁铁电流来精确控制笔的下压力度实现更均匀的线条。7.3 扩展玩法与进阶思路当基础功能稳定后这个平台还有巨大的扩展空间更换执行器把笔夹换成激光头注意安全务必佩戴防护眼镜并做好防火措施就变成了一台小型激光雕刻机。需要将舵机控制线改接到CNC Shield的激光PWM控制接口并在Grbl中启用激光模式$321。增加Z轴加入第三个步进电机控制笔或激光头的上下移动可以实现更复杂的3D轮廓绘制或分层雕刻。使用更强大的控制器Arduino UNO的性能对于复杂的G代码处理有时会力不从心。可以升级到Arduino Mega 2560运行Grbl-Mega版本或者ESP32运行Grbl-ESP32它们有更多的IO口、更快的CPU和Wi-Fi/蓝牙功能可以实现无线控制和更复杂的交互。开发自定义上位机如果你会Python可以使用pySerial库与Grbl通信结合Tkinter或PyQt编写一个带有自定义界面和功能的上位机软件。这个小型CoreXY写字机项目就像一把打开运动控制世界大门的钥匙。从拧紧第一颗螺丝到看到笔尖自主画出第一道准确的线条整个过程充满了硬件调试的挑战和软件配置的乐趣。它教会你的远不止如何组装一台机器更是系统性地理解了一个自动化设备从指令到动作的完整链条。最重要的是它提供了一个可以不断“折腾”的物理平台所有想法都可以通过代码和机械结构在这里得到验证。