# 前言

很久以前,在学校里,我看到一个CNC加工的视频,加工的零件非常复杂,精度却很高,并且是几乎无人参与的。制造和使用工具,是理工男的最爱,看着钢铁像泥一样被切削成各种形状,有种莫名的爽快,我看不懂,但我大受震撼。毕业后没有进入相关领域,但那个视频在我心里埋下了种子,时不时的会去了解一下CNC相关的信息,直到有一天,我看到了Grbl。

Grbl一个运行在Arduino平台上的CNC固件,Arduino是一款开源的嵌入式硬件平台,因为其简单易用,在电子爱好者中广泛流行。爱好者们经常用Arduino做一些有趣的应用,比如温湿度计,雷达小车,家庭自动化,机器人等,但是像Grbl这样,用来控制CNC的,却是将Arduino发挥到了极致,要知道Arduino的硬件资源是极其匮乏的,比如常见的Arduino Uno,它使用Atmega328p做主控,它的内存只有2KB,EEPROM只有1KB,flash只有32KB,主频才16MHz!

Grbl对于Arduino做了大量的优化,使得它在硬件资源贫乏的单片机上也能提供出色的性能,不过这也使得它的程序代码比较晦涩,它是直接操作寄存器实现对IO的控制和内部资源调度,包含大量的位运算。

CNC加工通常是指计算机数字化控制精密机械加工,实现一个CNC机器需要涉及计算机辅助设计CAD,计算机辅助制造CAM,自动控制,机械运动,数学计算等复杂的知识,这足以让一个业余CNC爱好者望而却步。

我在开始学习Grbl的实现时,也是一头雾水,网上能找到零星的分析Grbl的文章,但大都只关注某一部分的实现,并不全面。为了彻底弄懂Grbl,我花费了1年的时间分析和整理,总算是整理出了一些脉络,在此感谢那些在网络上无私奉献的Grbl分析者们,提供了最初的资源。

我按照自己的理解,把Grbl划分出相应的主线,分别为:硬件主线,编程主线,CNC主线,流程主线,读者可以根据自己的需要,只看其中一部分,比如希望移植Grbl的,就可以只看硬件相关的内容;喜欢研究编译的,可以看编程相关的容。希望本书能够给广大CNC爱好者们提供一些参考,但是由于本人能力有限,错误在所难免,如果您在阅读过程中发现有错误之处,请联系我改正。如果有疑问也欢迎参与讨论,但是由于精力有限,只能回答一部分问题,也请读者提出具体问题,而不是宽泛的例如:我的Grbl怎么无法工作?之类的问题。

如果您对CNC还不了解,建议先了解一下相关技术,您也可以购买我提供的套件用于研究,也算对我的支持,我有收入,才有精力把事情做的更好。当然,您也可以选择直接赞赏,表达对开源的支持。您可以选择是否出现在本项目的赞助者名单中。