
1. 项目概述为什么CNC需要一把3D测头如果你玩过一阵子CNC不管是桌面级的3018还是更大型的机器迟早会碰到一个头疼的问题对刀和工件找正。手动用对刀块、塞尺或者更原始的“纸片感觉法”不仅效率低重复精度也堪忧。尤其是面对一个形状不规则、或者已经粗加工过的毛坯要精确找到它的最高点、中心点或者建立复杂的3D模型坐标系手动操作几乎是一场噩梦。这时候一个专业的3D测头3D Touch Probe就成了提升效率、解放双手、甚至实现自动化加工的关键工具。然而市面上的成品3D测头比如那些来自海克斯康、雷尼绍的工业级产品价格动辄数千甚至数万对于爱好者、小型工作室或者教育机构来说门槛太高。而一些为3D打印机设计的“BLTouch”或“3DTouch”类电感式测头虽然便宜但通常只能实现单点触发Z轴无法满足CNC机床在X、Y、Z三个方向上进行高精度、可重复触发的需求。于是“DIY一个属于自己的3D测头”这个想法就自然冒出来了。这不仅仅是为了省钱更是一个深入了解机床传感、信号处理和机械设计的绝佳实践项目。一个自制的3D测头核心目标是在探针尖端接触到工件表面的瞬间能快速、稳定地发出一个电信号给CNC控制器比如Grbl, Mach3, LinuxCNC让控制器立即记录下当前的机床坐标。通过在不同位置进行多次触碰我们就能自动测量出工件的边界、高度、内孔中心甚至扫描出简单的3D轮廓。实现这个目标我们需要解决三个核心问题高精度且可靠的机械触发机构、稳定抗干扰的信号生成电路、与CNC控制软件的完美配合。接下来我就把自己折腾这个项目的完整思路、踩过的坑和最终验证可行的方案详细拆解一遍。2. 核心设计思路与方案选型DIY 3D测头市面上开源方案不少但经过对比和实测我认为一个可靠的设计应该围绕“机械简单、电路稳定、软件兼容性好”这三个原则展开。下面我详细说说几种主流方案的优劣以及我最终的选择。2.1 机械结构方案对比机械部分的核心是一个“万向触发机构”。探针杆需要能在任意方向被轻微触动后都能迅速复位并同步产生一个电信号。滚珠簧片方案这是最经典、也是我个人最推荐的结构。探针杆通过一个钢球通常用轴承滚珠顶在三个呈120度分布的弹性簧片或触针上。探针杆在任意方向受力偏移都会导致至少一个簧片与滚珠脱离接触从而断开电路。优点是结构对称性好触发力各向同性复位精准。缺点是簧片的加工和调整需要一些耐心。悬臂梁应变片方案将探针杆固定在一个柔性悬臂梁上梁上贴应变片。探针受力后梁弯曲应变片电阻变化通过电路放大后产生信号。优点是理论上分辨率可以极高。但缺点非常明显电路复杂需要电桥和精密放大容易受温度漂移和振动干扰对DIY来说调试门槛太高不推荐初学者。简易微动开关方案在X、Y、Z三个方向各安装一个微动开关探针杆触动任何一个开关即触发。这是最直观的想法但实际效果很差。微动开关的行程大、触发力不一致导致测头的触发精度和重复性非常低而且结构臃肿基本不具备实用价值。我的选择毫无疑问滚珠簧片方案是平衡了精度、可靠性和制作难度的最佳选择。它被大量开源项目如著名的“Touch Probe”设计和早期商业测头所验证。我们的DIY也将以此为基础展开。2.2 电路方案选择电路的任务是把机械触发簧片与滚珠接触状态变化转换成一个CNC控制器能识别的干净、快速的数字信号。直接开关量输入最简单的方式将簧片-滚珠回路直接接入控制器的输入口如Grbl的PROBE引脚。但这里有个大坑机械触点闭合或断开的瞬间会产生剧烈的接触抖动可能导致控制器在几毫秒内收到数十个通断信号从而误触发多次。必须加入硬件消抖电路。施密特触发器消抖使用一个施密特触发器门电路如74HC14利用其滞回特性可以将缓慢变化或抖动的触点信号整形成干净的数字脉冲。这是性价比极高且效果显著的方案。光耦隔离在触发回路和控制器之间加入光耦可以实现电气隔离防止机床上的干扰信号串入敏感的控制器主板。对于工作在强电磁干扰环境如主轴电机、变频器附近的CNC来说这是一个提升稳定性的重要措施。比较器方案类似于应变片方案可以使用运算放大器搭建比较器但同样面临复杂度高、需要精密调校的问题对于开关式触发而言属于“杀鸡用牛刀”。我的方案为了确保绝对稳定我采用了“光耦隔离 施密特触发器” 的双重保险方案。即使光耦后端的信号仍有微小波动施密特触发器也能确保输出给CNC的是一个完美的阶跃信号。整个电路成本不到20元但带来的可靠性提升是巨大的。2.3 软件与接口协议CNC控制器如何响应测头信号这取决于你使用的控制软件和固件。Grbl最流行的开源固件。它有一个专用的PROBE引脚通常映射到Arduino的A5引脚。当这个引脚被拉低从高电平跳到低电平时Grbl会立即停止运动并记录坐标。我们需要做的就是让我们的测头电路输出一个低电平有效的触发信号。在G代码中使用G38.2 Z-10 F100这样的指令即可执行自动探针动作。Mach3 / Mach4使用并口输入。需要将测头信号接入并口指定的引脚如Pin15并在Mach软件中配置该引脚为“Probe”功能。触发逻辑同样通常是低电平有效。LinuxCNC配置更为灵活可以在HAL文件中将任意输入引脚定义为探针信号。关键点无论哪种控制器确认触发信号的有效电平常高触发还是常低触发是第一步也是最关键的一步。接反了会导致测头一上电就触发报警或者永远无法触发。我们的电路设计会预留跳线以便兼容两种模式。3. 材料准备与机械结构制作理论清楚了我们开始动手。先列出核心材料清单然后一步步讲解机械部分的加工与组装。3.1 材料与工具清单机械部分主体材料铝合金块或黄铜块尺寸约40x40x30mm用于加工测头壳体。塑料如POM也可但金属更能保证长期稳定性。探针杆直径3mm的硬质合金杆或淬火钢杆长度约50mm。尖端可以磨成球形R1.5或者直接使用现成的红宝石测针成本稍高但磨损极低。滚珠直径6.35mm1/4英寸的精密轴承钢珠一颗。这是整个机构的枢轴核心。簧片/触针三根直径1-1.5mm的弹簧钢丝或铜钨合金杆。需要良好的弹性和导电性。复位弹簧一根轻压力的小弹簧用于给探针杆提供初始压力使其稳定地顶在滚珠上。绝缘材料聚酰亚胺薄膜黄腊纸、尼龙螺丝/垫片用于确保各导电部分之间相互绝缘。外壳与连接器一个大小合适的盒子以及航空插头用于信号线和探针连接。电子部分光耦PC817或TLP521常用4脚光耦。施密特触发器74HC14六反相施密特触发器我们只需要其中一路。电阻1kΩ2只10kΩ1只。用于限流和上拉。电容0.1uF陶瓷电容1只用于电源滤波。LED指示灯红色LED一只用于显示触发状态。电路板洞洞板或自己绘制的小PCB。线材屏蔽电缆至少两芯用于信号和地线强烈推荐使用屏蔽线以抗干扰。工具CNC机床 irony用来做测头、台钻、丝锥、螺丝刀、烙铁、万用表等。3.2 核心机械结构加工详解机械加工的精度直接决定测头的重复精度。以下是关键步骤加工主体座在铝块上加工一个垂直的、高精度的孔用于安装探针杆。这个孔的直线度和光洁度很重要它引导探针杆只做轴向运动。孔径与探针杆间隙配合建议H7/g6级大约有0.005-0.01mm的间隙确保顺滑无卡滞。加工滚珠座在主体底部加工一个与垂直孔同轴、且非常光滑的圆锥窝或“V”形槽用于安放那颗6.35mm的钢珠。这个窝的精度决定了探针杆的复位中心位置。最好在加工后用钢珠加研磨膏进行手工研磨以达到极高的球面贴合度。安装簧片这是最需要技巧的一步。在围绕滚珠座120度均布的三个位置上加工安装孔用于固定三根簧片。簧片的安装角度和预压力需要仔细调整。角度簧片的尖端应该水平地、轻微向上地顶住滚珠的赤道线位置。这样无论探针杆向哪个方向偏移滚珠都会向下脱离与某个簧片的接触。预压力簧片不能太硬也不能太软。太硬则触发力过大可能划伤工件或导致探针杆弯曲太软则接触不可靠容易误触发。通过调整簧片固定座的深度来微调预压力。一个实用的检验方法是用万用表通断档连接簧片和公共地探针杆轻轻推动探针杆应该在偏移约0.02-0.05mm时听到“嘀”的一声通断状态发生变化。组装与绝缘将所有部件组装起来。务必确保探针杆、滚珠、簧片与铝合金主体之间是绝缘的通常的做法是探针杆通过一个尼龙套与主体绝缘滚珠座本身是金属的但它只与探针杆和簧片接触簧片则通过聚酰亚胺垫片与固定它的金属螺丝绝缘。最后用万用表高阻档测量探针杆与壳体之间的电阻应为无穷大。实操心得调整三根簧片的压力一致性是成败关键。我的土办法是先粗略固定然后连接一个LED电路电池LED限流电阻串联到探针杆和某根簧片之间。轻轻按压探针杆边缘观察LED在哪個方向最容易熄灭/点亮。反复微调簧片目标是让探针杆在任意方向被推动时触发所需的力度和位移感觉基本一致。这个过程可能需要一两个小时但非常值得。4. 电路设计与焊接调试机械部分是躯体电路就是神经系统。一个可靠的电路能让你后续省去无数调试的烦恼。4.1 电路原理图与工作逻辑我设计的电路兼顾了隔离、消抖和状态指示。工作原理如下常闭触发回路在未触发状态探针杆通过滚珠与三根簧片接触形成一个闭合的回路。这个回路串联在光耦PC817的输入端LED端。光耦隔离当回路闭合时光耦输入端有电流流过由5V经1kΩ限流电阻提供内部LED发光光敏三极管导通其输出端集电极电压被拉低至接近0V。施密特触发器整形光耦输出端连接到一个74HC14施密特反相器的输入端。光耦导通时输出低电平经反相器后输出高电平PROBE_SIGNAL为高。当测头触发机械回路断开光耦输入端失电输出端变为高阻态此时通过一个10kΩ上拉电阻拉到5V。这个从低到高的跳变可能因触点抖动而不干净。施密特触发器凭借其滞回电压例如对于74HC14正向阈值约1.6V负向阈值约0.8V能将这个缓慢或抖动的上升沿整形成一个干净、陡峭的下降沿因为经过反相器。输出与指示施密特触发器的输出即为最终的PROBE_SIGNAL。同时我们用一个红色LED串联1kΩ电阻接在这个信号上。未触发时信号为高LED熄灭触发时信号变低LED点亮提供直观的状态指示。电源整个电路由CNC控制器的5V供电如Arduino的5V引脚。注意在电源入口处并联一个0.1uF的陶瓷电容用于滤除高频噪声。4.2 PCB焊接与装配要点你可以使用洞洞板快速搭建但为了稳定我建议画一个小巧的PCB。布局将光耦和74HC14靠近信号输入/输出端放置。电源滤波电容务必紧贴芯片的VCC和GND引脚。焊接元件不多但焊接要可靠特别是光耦和芯片的引脚避免虚焊。焊接完成后用放大镜检查一下是否有焊锡桥连。屏蔽与走线信号线从测头到电路板再从电路板到控制器务必使用屏蔽线。屏蔽层在电路板端单点接地接控制器的GND。强电线路如主轴电机线、步进电机线一定要远离测头信号线。测试焊接完成后先不要连接CNC控制器。用万用表和示波器如果有测试上电后未触发时测量PROBE_SIGNAL对地电压应为高电平接近5VLED不亮。用一根导线短接一下测头的“探针杆”和“簧片公共端”模拟触发应看到LED快速点亮再熄灭同时PROBE_SIGNAL端应能测量到一个干净的低电平脉冲。用示波器看这个脉冲的边沿应该很陡峭没有毛刺。避坑指南最常见的故障是误触发即机床一运行还没碰到工件就报警“Probe triggered”。99%的原因是电气干扰。请再次检查是否使用了屏蔽线屏蔽层是否接地电路板的电源滤波电容是否焊上测头外壳是否良好接地接机床床身将信号线远离电机和电源线重新走一遍往往能解决问题。5. 软件配置与G代码应用硬件就绪后要让它在CNC系统中真正工作起来还需要正确的软件配置和G代码命令。5.1 Grbl固件配置详解假设你使用Grbl版本1.1或以上配置步骤如下硬件连接将测头电路的PROBE_SIGNAL输出线连接到你的控制板如Arduino Uno的A5引脚。同时将电路的地线GND与控制板的GND相连。Grbl参数设置通过串口终端如CoolTerm, Universal Gcode Sender发送以下命令进行设置$211启用硬限位功能。虽然我们用的是测头但Grbl的探针功能与硬限位共享检测逻辑必须先开启硬限位。$321启用探针功能。这是最关键的一步。$60设置探针信号为常高触发。根据我们的电路设计未触发时信号为高5V触发时变为低0V因此是“常高触发”对应$60。如果你的电路逻辑相反则设为$61常低触发。务必用万用表实测确认$160.050设置探针去抖时间。单位是毫秒。我们的硬件已经消抖这里可以设一个较小的值如50毫秒用于应对极端情况。使用$$命令查看所有参数确认上述设置已保存。功能测试发送G代码G91 G38.2 Z-10 F100。这条命令的意思是以相对坐标模式G91向Z负方向Z-10以100mm/min的速度F100进行探针操作G38.2。在执行前确保探针下方是空的或者用手在下方准备挡住探针。当探针触发后机床应立即停止并在终端返回[PRB: Xx.xxx, Yx.xxx, Zx.xxx:1]这样的信息其中最后的:1表示探针触发成功并记录了触发点的坐标。5.2 实用G代码脚本与自动化单个点的探测只是开始结合G代码的循环和条件判断我们可以实现强大的自动化测量。自动对刀Z轴零点设定G90 G21 G17 ; 绝对坐标毫米单位XY平面 G0 Z30 ; 快速抬刀到安全高度 G0 X100 Y100 ; 移动到对刀点上方 G38.2 Z-40 F100 ; 向下探测 G92 Z0 ; 将当前Z坐标设为0工件表面 G0 Z5 ; 抬起到安全高度这段代码将刀具移动到(100,100)位置向下探测一旦触发就将该点的Z坐标设定为工件零点。寻找矩形工件中心; 假设工件大致在台面中央我们先找X方向两边的点 G0 X50 Y100 ; 移动到预估左侧 G38.2 X-60 F200 ; 向左探测找左边 #100 #5061 ; 将触发点X坐标存入变量#100Grbl全局变量 G0 X150 ; 移动到预估右侧 G38.2 X60 F200 ; 向右探测找右边 #101 #5061 ; 将触发点X坐标存入变量#101 #102 [#100 #101] / 2 ; 计算X中心 (左右)/2 ; 同理找Y方向 G0 X#102 Y50 ; 移动到X中心预估下边 G38.2 Y-60 F200 ; #103 #5062 ; G0 Y150 ; G38.2 Y60 F200 ; #104 #5062 ; #105 [#103 #104] / 2 ; 计算Y中心 G0 X#102 Y#105 ; 移动到计算出的中心 (MSG, Workpiece center found at X#102 Y#105) ; 发送提示信息通过探测四边自动计算出工件的精确中心坐标并移动过去。这对于不规则毛坯或二次装夹的工件极其有用。刀具长度测量配合一个固定在机床台面上的对刀仪可以简单理解为一个高度已知的金属块用测头测量对刀仪表面再用刀具去触碰对刀仪表面通过比较两次的Z坐标差即可自动计算出刀具长度补偿值并存入刀具表。注意事项在编写探测循环时必须考虑超程保护。即在G38.2命令中移动距离要设置得足够大确保能碰到工件但又不能大到让机床发生碰撞。通常的做法是先手动将刀具移动到工件附近再执行小范围的探测。另外探测速度F值不宜过快尤其是初次使用时建议从50-100mm/min开始稳定后再逐步提高。6. 精度校准与常见问题排查即使组装完成也需要校准才能信任它的测量结果。以下是校准方法和常见问题速查表。6.1 精度校准与重复性测试一个测头的核心性能指标是触发重复性即多次触发同一物理点时坐标读数的最大偏差。测试准备在机床台面上固定一个光滑、坚硬的基准块如量块。将测头安装到主轴或刀柄上。单点重复性测试编写一个简单的G代码循环让测头以相同的速度和方向重复触碰基准块的同一个角点10次。记录每次触发时的Z坐标假设测垂直方向。计算这10个数据的最大值和最小值其差值即为重复性误差。一个DIY测头能做到0.005mm5微米以内的重复性就已经非常优秀了。各向同性测试分别从X, -X, Y, -Y, Z方向小心Z方向轻轻推动探针杆触发观察触发力度和坐标跳变是否一致。如果某个方向特别松或特别紧需要调整对应方向簧片的预压力。坐标补偿测头触发时探针杆已经发生了微小的弯曲偏移因此记录的坐标并非红宝石球心的真实坐标需要补偿。这个补偿值称为“探针半径补偿”或“预行程”需要通过测量标准球或已知尺寸的环规来标定。对于要求不高的应用可以忽略或用一个经验值如0.01mm。对于高精度需求这是必须进行的步骤。6.2 常见问题排查速查表问题现象可能原因排查步骤与解决方案上电即触发报警1. 信号线接反常高/常低设置错误。2. 电路输出常态即为低电平光耦或74HC14损坏。3. 机械部分绝缘不良探针杆与壳体短路。1. 用万用表测PROBE_SIGNAL引脚电压未触发时应为高电平约5V。若为低检查$6参数设置或调换电路输出逻辑。2. 断开测头信号线若报警消失问题在测头侧。检查电路焊接和元件。3. 用万用表蜂鸣档检查探针杆与机床壳体地之间的电阻应为无穷大。无法触发1. 信号线断路。2. 机械触发机构卡死回路无法断开。3. Grbl探针功能未开启$320。4. 触发信号电平变化太小未被控制器识别。1. 检查信号线连通性。2. 手动拨动探针杆应能明显感觉到“咔哒”的触发感并用万用表测试通断变化。3. 发送$$命令确认$321。4. 用示波器观察触发瞬间信号边沿应干净利落。检查施密特触发器电路。偶尔误触发1.电磁干扰最主要原因。2. 机械松动振动导致误接触。3. 电源电压不稳。1.使用屏蔽线屏蔽层单端接地。信号线远离电机线、电源线。2. 紧固所有机械螺丝检查簧片是否松动。3. 在电路板电源入口增加一个更大的滤波电容如100uF电解电容。重复性差1. 机械结构间隙大或复位不精准。2. 簧片压力不一致或疲劳。3. 探针杆与导套间隙过大。1. 检查滚珠座是否光滑滚珠是否有划痕。重新研磨或更换。2. 重新调整三根簧片的预压力使其一致。3. 更换导套或探针杆减小配合间隙。触发后坐标偏移大1. 探针半径补偿值未设置或设置错误。2. 测头安装倾斜探针杆不垂直。1. 通过测量标准件标定准确的补偿值并在G代码或控制器中应用。2. 使用百分表打表校正测头在主轴上的安装姿态。制作和调试一个可用的3D测头大概需要投入一个周末的时间。当看到机床自动、精准地找到工件零点或者快速测出内孔中心时那种成就感和效率提升带来的愉悦远超省下的那几百块钱。这个项目更深层的价值在于它迫使你去理解机床的传感、控制逻辑和误差来源这些知识会让你在后续的所有CNC项目中都更加得心应手。最后一个小建议第一次正式使用时一定要慢做好随时拍急停的准备用废料多做几次测试建立信心后再用于真正的工件。