要点速览
Arduino Uno 能做什么、不能做什么
Uno 运行在 16 MHz,有 32 KB 闪存和 2 KB RAM。GRBL 正好装得下,还能留出小型规划缓冲区,这就是它成为业余 CNC 默认固件的原因。芯片在三轴上输出步进和方向脉冲,但不向电机输送电流。
规划搭建时,这个分工很关键。Uno 决定刀具去哪;DRV8825 或 TB6600 这类步进驱动器决定线圈如何通电。电源给驱动器供电,不给 Uno 供电。把这两个角色搞混,就会烧板。
Uno 方案适合木材和亚克力的桌面雕刻机、激光雕刻机架、PCB 铣床或小型三轴测试台。这些机床每刀切深小、切削力低。薄弱环节通常是机架,而不是控制器。
它不适合要在钢或铝上以生产节拍保持 ±0.005 mm 的机床。那类工作需闭环伺服控制、热补偿和刚性铸件。给 Uno 换个更好的步进驱动器,达不到这个水平。
- 1适合桌面雕刻机、刻字机、PCB 铣床、教学台
- 2不适合钢、紧公差铝、四/五轴、批量生产
将 Uno 接到步进驱动器
每个轴需要 Uno 输出两路信号:步进脉冲和方向电平。GRBL 把它们映射到 ATmega328P 的固定引脚。X 轴步进用 D2、方向用 D5,Y 轴用 D3 和 D6,Z 轴用 D4 和 D7。使能信号共用 D8。
这些信号线尽量走短。30 kHz 的步进脉冲周期约 33 µs,长距离无屏蔽线会拾取主轴或步进电机线缆的噪声。信号线与电机线分开走,绝不捆在一起。
接电机前先设好驱动器电流。每相额定 1.5 A 的 NEMA 17 应把驱动器设到约 1.2 A,约为额定值的 80%。设太高电机会发烫;设太低会在切削中失步。
逻辑侧由 Uno 的 USB 或独立 5 V 电源供电。驱动器由主电源供电,多数桌面搭建用 24 V 或 36 V。两侧只共地。
- 1步进/方向引脚X:D2/D5,Y:D3/D6,Z:D4/D7,使能 D8
- 2电流设置额定相电流的 80%,用万用表测量
- 3走线信号线短,并与电机线缆分开
- 4接地仅共地;不要把驱动器 V+ 接到 5 V 电源轨
烧录 GRBL 并设置运动参数
GRBL 通过 Arduino IDE 以 sketch 形式上传。烧录后,Uno 不再运行你的代码,而是运行 G-code。以 115200 波特率打开串口终端,发送 $$ 读取设置列表。每改一个值,都用带美元符号的命令写回。
决定机床能否切得干净的两个设置是最大速率($110–$112)和加速度($120–$122)。先从保守值开始。皮带驱动的桌面雕刻机,X、Y 轴 800 mm/min、Z 轴 300 mm/min 是安全的初猜值。加速度约 50 mm/s² 可避免大部分丢步。
每毫米步数($100–$102)必须与机械结构匹配。20 齿 GT2 带轮转一圈走 40 mm。200 步电机在 1/8 细分下每转 1,600 步,即每毫米 40 步。这个值错了,零件上每个尺寸都会按同一比例出错。
多数现代驱动器的步进脉冲时间($0)设为 10 µs。老式驱动器可能需要 5 µs 或更多。如果电机嗡嗡响却不转,先调大这个值。
- 1$100–$102每毫米步数;按带轮节距和细分设置核对
- 2$110–$112各轴最大速率;先低后高,每次提高 10%
- 3$120–$122加速度;桌面机 50 mm/s² 是合理起点
- 4$0步进脉冲时间;多数现代驱动器 10 µs 可用
点动、回零与首次空走
在刀具接触材料之前,先通过串口控制台手动点动各轴。发送 G91 进入相对模式,再发 G0 X10 F500。该轴应移动 10 mm 后停止。用卡尺测量。如果走了 12 mm,说明每毫米步数差了 20%。
接下来是回零。每个轴上的开关让 GRBL 找到机床零点。将它们以常闭方式接到 D9、D10、D11 的限位引脚上。发送 $H,观察脱离距离($27)。如果回零循环撞上开关后跳过,说明脱离距离太短或开关在抖动。
先空跑第一刀。加载 G 代码,设好工件偏置,把 Z 抬高 20 mm。观察运动。加速度突变、换向时丢步、能听到的堵转,都会在这里暴露出来,而不是等到废掉一个零件。
只有空跑运动平稳后,才接触材料。先走浅刀,木材 0.3 mm 切深,铝 0.1 mm,再逐步加大。如果机床失位,先降加速度,再降进给。
- 1验证行程点动 10 mm,用卡尺测量后再信任装夹
- 2回零D9–D11 接常闭开关;检查脱离距离
- 3空跑Z 抬高 20 mm,确认运动平稳后再切削
分步操作:从裸 Uno 到第一个零件
- 1把 Uno 和驱动器装到板上让 Uno 远离驱动器,避免热量传到稳压器。用洞洞板或扩展板,不要用散乱的跳线;切削中一根松动的步进线就会毁掉零件。
- 2接步进、方向和使能X:D2/D5,Y:D3/D6,Z:D4/D7,使能 D8。信号线保持在 300 mm 以内,并远离电机电缆走线。
- 3设置驱动器电流和细分电流设为电机额定相电流的 80%。默认选 1/8 细分;它在平滑度和 30 kHz 脉冲上限之间取得平衡。
- 4烧录 GRBL 并以 115200 波特率连接上传 sketch,打开串口监视器,发送 $$ 确认板子有响应。如果没有回复,检查波特率和 COM 口。
- 5输入每毫米步数和限位根据带轮节距和细分计算每毫米步数。设置 $100–$102,然后把 $130–$132 设为各轴实际行程,使机床不会撞到自己的机架。
- 6调整最大速率和加速度从 800 mm/min 和 50 mm/s² 开始。让每个轴全速点动。以 10% 步进提高速率直到丢步,然后回退 20%。
- 7回零并设工件零点发送 $H,确认三个轴都脱离开关,然后用 G10 或发送软件的置零按钮设置工件偏置。
- 8先空跑,再切材料Z 抬高 20 mm 跑完整程序。运动平稳后,木材切深 0.3 mm 或铝 0.1 mm,再据此调整。
Arduino Uno 与专用 CNC 控制器对比
用它来判断哪条路线适合你要做的零件。
| 因素 | Arduino Uno + GRBL | 专用 CNC 控制器 |
|---|---|---|
| 轴数 | 3 轴,无联动第 4 轴 | 3 至 5 轴,联动 |
| 步进速率 | 约 30 kHz 上限 | 100 kHz 及以上 |
| 反馈 | 开环,无位置检测 | 带编码器反馈的闭环 |
| 典型材料 | 木材、亚克力、FR-4、轻铝 | 钢、钛、紧公差铝 |
| 公差 | 受机架限制,通常 ±0.1 mm | 刚性机床上 ±0.005 mm |
| 最佳用途 | 原型、教学、爱好者制作 | 量产零件和重复订单 |
| 入门成本 | 低,零件都是现货 | 较高,但产出可预期 |
| 失效情况 | 丢步会直接变成废品 | 故障会在产生废品前停止循环 |
常见问题
Arduino Uno 能跑 4 轴 CNC 吗?
标准 GRBL 不行。ATmega328P 没有足够的引脚预算和处理余量,在三个运动轴之外再可靠地驱动第 4 轴。
如果需要旋转加工,改用运行 Grbl 衍生版的 32 位板,或使用专用控制器。硬把第 4 轴塞进 Uno,通常表现为其他三个轴随机丢步。
为什么我的步进电机嗡嗡响却不转?
最常见原因是步进脉冲对驱动器来说太短,或方向引脚悬空。把 $0 提高到 10 µs,并检查方向线是否插好。
第二个原因:驱动器电流设得太低。测量驱动器上的参考电压,设为电机额定相电流的 80%。电机能保持位置却不转,通常是电流不足,不是固件问题。
基于 Uno 的雕刻机能多快切铝?
很慢,而且只能浅切。用 3 mm 单刃立铣刀、8,000–12,000 rpm,每刀切深预计 0.1–0.3 mm,进给约 300–500 mm/min。
限制在机架和主轴,不在 Uno。切削负载下会变形的机床,控制器再好也会振刀。如果零件公差紧于 ±0.1 mm,这不是合适的工艺。
需要限位开关吗?
严格来说,让机床动起来并不需要,但应该装。没有回零,机床就没有可重复的零点,每次装夹都从轴碰巧停的位置开始。
以常闭方式接线,这样断线会被读成触发的开关,而不是无声故障。这一个选择能避免爱好者制作中的大多数撞机损坏。
应该用什么电源?
桌面雕刻机上的 NEMA 17 电机,24 V 是安全默认值。如果驱动器支持,36 V 电源在高速时提供更大扭矩。
电流按电机总电流的约 70% 选型,而不是全部相加。电机很少所有轴同时拉满额定电流,电源选大了只会增加发热和成本。
什么时候该停止自制,改订加工零件?
当零件必须保持公差、装入现有组件,或重复生产超过少量几件时。Uno 雕刻机是学习运动控制的好方式,却是赶交付期限的不佳方式。
对于功能原型和小批量,从坯料加工一步就能得到公差和材料性能。发送 CAD 文件,我们会在报价前做可制造性审查。
