磁动力电子网-雕刻机DIY论坛,单片机论坛,CNCDIY,DIYCNC

 找回密码
 加入磁动力

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 18865|回复: 57

[经验分享] 使用补偿修正方法解决Z轴零平面不平问题,特别适用于PCB雕刻

    [复制链接]
发表于 2012-6-22 14:03:21 | 显示全部楼层 |阅读模式
本帖最后由 windboy 于 2012-6-22 14:04 编辑

一、背景
      小哥爱好机械,但不是科班出身,所掌握的只是当年工科大学生金工实习所学皮毛,如果后面写了什么外行的话请理解。自己不会做,所以上个月购买了一台商品雕刻机,外观还美观,我这种外行用起来感觉性能还行。慢慢在论坛里学习,慢慢改良自己的机器和技能,先后自行加了三个轴的机械限位及Z轴对刀功能,没办法,老撞车,伤不起。
       小哥常玩的是电子和电脑,雕刻机用来用去也只有雕刻PCB最多。但PCB这东西实际雕刻起来最麻烦的是工件加工平面的不平整,一个原因是雕刻机本身的载物台不平,另一个是PCB很难装夹平整。论坛上常用的解决思路有:1、调校载物台至尽量平整,阿莫那边说是能调校到0.01mm精度。2、在软性载物台上铣一个绝对平面。以上两种方法只能有效解决第一个原因所致的加工平面不平问题,而难以应对第二个原因。因为PCB的装夹常用机械压夹或者不干胶大法,我这样初学者实际用起来很难有效保障精度,特别是比较薄的PCB变形非常严重,使用手上唯一测量工具卡尺不严谨的测量过,我这台机器因本身的载物台不平所带来的误差也就0.1mm左右,但PCB的变形在加工范围内经常高达0.5-1.0mm也不足为奇,相对PCB板下刀深度仅为0.1-0.2mm而言,这样大的误差直接导致手上重金购置的雕刻机无法雕刻出合格的PCB电路板。
      相信很多初学者有跟我一样的困扰,如何解决因加工平面不平问题?小哥不擅长机械,所以只得从软的方面去琢磨,得到了一个使用算法补偿修正的方法,经过试用,方法简单、普适及有效,不敢独享,全盘奉献给各位同好。

二、原理
     PCB工件平面的变形各式各样,不遵守严格的规律。但从微分的角度上看,在指定加工精度(比如0.1-0.2mm)情况下,我们可以认为在一个足够小(比如5mm*5mm)的加工范围,PCB的工件平面的变形仅是一个简单的平面倾斜。换而言之,在这个足够小的加工范围内,PCB工件平面各点处处共面,只不过这个平面相对加工的绝对平面有一定的倾斜。这个结论针对不是绝对柔性的工件而言是显然的。
     从上面结论出发,我们只需要在需要加工的范围内取样足够数量的加工平面样本点Si (xi,yi,zi),针对一个加工点A(x,y,z),找到距离该点最近的3个样本点Si ,使用这3个样本点构制一个平面(三点确定一个平面),得到该平面的方程,因为认为加工点A就落在这个平面上,所以将加工点A的xy轴坐标代入所得到的平面方程,就能得到一个新的z轴坐标值z`,接下来修正加工点A的实际加工坐标点为(x,y,z`),也就是说,让雕刻机在x,y位置上实际下刀深度为z`,最后雕刻出来的效果即会有一个深度为原来的需求值z的刀路。

三、实现
      雕刻PCB,我采用的是用protel99se输出dxf文件,使用ArtCAM导入矢量后产生刀路(前后要删去几行关于相对坐标设置等代码,论坛中有介绍),再通过Mach3控制雕刻机完成加工。要实现上述补偿修正方法,我的步骤是:
     1、装夹好PCB板,连接好对刀线路,对刀线路两个端子一端在刀头,一端在PCB铜箔。在加工零点处进行z轴对刀;
     2、我在林大夫的Mach3对刀界面上增加了z轴校零功能(界面及代码文件见附件1),在该Mach3界面上相应输入框内设置z轴校零范围,该范围要稍大于实际加工范围,比如设置x最大为100mm,y最大为120mm,步长为5mm(见图1. Mach3校零界面示意所示);
                                 图1. Mach3校零界面示意.jpg
                               图1. Mach3校零界面示意.jpg

     3、此时保持对刀线路工作正常,点击z校零按钮后,雕刻机会在x从0至100mm,y从0至120mm的范围内,每隔5mm步长抬刀、落刀进行z平面零点的取样。注意:只能指定x和y的最大值,x和y的最小值默认为0,不能修改。这只是个人使用习惯问题,并不会影响雕刻的实现;
     4、耐心等到所有取样完成后,刀头会退回到加工零点,Mach3界面上会提示所有样本数据已经保存到CNCZ0fix.z0f文件中。CNCZ0fix.z0f在Mach3安装目录下,比如C:\Mach3,实在找不到就搜索一下。
     5、启动程序Z0Fix.exe(程序见附件2,附图见图2),该程序的功能是根据之前的取样数据,读取并修改加工源文件G代码坐标数据,补偿其中的z轴下刀深度,并为了保证精度,还会对水平加工距离较长(暂时设置为大于二分之一个取样点步长的距离)的G1代码进行加工点插值,修正后的刀路会存在新文件中(不会对源文件进行任何写操作)。
                               图2. Z0Fix界面.jpg
                                     图2. Z0Fix界面.jpg

          Z0Fix.exe的使用步骤是:(1)手工输入或打开步骤4生成的CNCZ0fix.z0f文件,并点击导入,确认界面上提示的x最大值、y最大值、步长及样本点数无误;(2)打开加工源文件,我使用的是ArtCAM导入dxf矢量后产生刀路*.nc文件;(3)手工输入或打开新文件*.nc;(4)点击“修正”按钮,修正结果会出现在界面上。
    6、在Mach3中加载步骤5中生成的新刀路文件,确认刀头的x,y坐标回位到加工零点,建议此次再做一次z轴对刀,确认需要加工的范围在做z轴零点校准步骤中所指定的范围内,本例中为:x从0至100mm,y从0至120mm。接下来按正常操作进行加工即可,会看到z轴实际走刀深度在各处有深有浅,这是针对每处工件平面的具体情况补偿后的结果,加工出来的实际效果应当是符合原期望的。

四、说明
    1、除了Z0Fix.exe外,其余思路、方法、代码针对任何刀路产生程序都是通用的,而Z0Fix.exe只针对使用ArtCAM导入Protel99se的dxf矢量后产生nc刀路(前后要删去几行代码)环境下使用过(因为软件编制的初衷仅仅是满足我个人使用需求,如果要考虑其他各种情况,那就太麻烦了),其他软件产生的刀路不一定能兼容。事实上我认为,如果能保证两个简单条件:(1)源文件每行G代码的各个字符之间连着写,不要有空格;(2)坐标定义不一定要xyz齐全,但一定要保证次序,即x一定要在y和z之前,y一定要在z之前。比如如下的各个例子都不会有问题。
     N70G0X0.000Y0.000S8000M3
     G0X5.588Y0.679Z3.000
     N90G1Z-0.200F120.0
     G1X5.233Y1.034F300.0
   2、z校零范围只能指定x和y的最大值,x和y的最小值默认为0,不能修改。实际加工范围必须在z校零范围之内。
   3、Mach3的界面和代码要更改成附件1提供的文件,否则没有校零功能,具体方法请参考林大夫的帖子:
http://bbs.5imx.com/bbs/viewthread.php?tid=355431&extra=&highlight=%B6%D4%B5%B6&page=1
   4、回馈论坛,完全公开,附件3和4是 Z0Fix.exe的CBuilder6源代码及相应功能的Matlab代码(事实上最早只是写成了Matlab代码给自己用的,为方便大家才重新用C++做了.exe文件),供有兴趣同好们的参考。如果 Z0Fix.exe在使用中不便,大家也可自行修改代码。  
   5、只要保持PCB装夹固定不变,保持加工原点(x=0,y=0)不变,原理上z轴校零产生的CNCZ0fix.z0f数据文件可以反复使用,比如雕刻PCB的线路和钻孔刀路,都可以用同一个CNCZ0fix.z0f数据文件补偿。如果要换刀,须在加工原点(x=0,y=0)再做一次z轴对刀。如果相关环境改变,或者间隔时间较长或者操作频繁,使工件表面相对状态变化了,都需要再次做z轴校零,形成新的CNCZ0fix.z0f。
   6、附图3中是一个雕刻实例,在同一块1mm厚,平整度很差PCB板上,保持相关环境不变,使用0.2mm深度雕刻同一线路;左下为不补偿的雕刻结果,可以看到很多地方因为加工平面形变完全不着刀或只有很浅的划痕,导致雕刻无法继续下去; 右上为补偿修正过的刀路雕刻结果,同一块板子上各处下刀深度均匀,补偿是有效的。
                                  图3. PCB效果图.jpg
                                       图3. PCB效果图.jpg

   7、本文为个人经验,如有不妥或需要改进的地方请各位不吝指出,目标是给坛友造福,大家共同学习进步。本文原创首发至CDLE.net及5imx.com,这两个论坛对我帮助很大。至于x莫那里就不发了,他喜欢当自己是上帝,但我恰是无神论者。


附件1:Mach3界面设置及代码.zip (542.11 KB, 下载次数: 4857)

评分

参与人数 1金钱 +45 收起 理由
明浩 + 45 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-6-22 20:55:22 | 显示全部楼层
多谢楼主分享。学习学习。
回复 支持 反对

使用道具 举报

发表于 2012-6-23 10:30:22 | 显示全部楼层
这里也顶一顶楼主,感谢楼主的分享!
回复 支持 反对

使用道具 举报

发表于 2012-6-23 16:59:11 | 显示全部楼层
谢谢楼主分享。。。。{:soso_e181:}
回复 支持 反对

使用道具 举报

发表于 2012-6-23 17:21:09 | 显示全部楼层
改天有空用我的JJ试验一下,先谢谢楼主分享经验
回复 支持 反对

使用道具 举报

发表于 2012-6-24 22:47:13 | 显示全部楼层
这么好的帖子必须顶。
做技术就需要楼主这样的创造性人才,学以致用。
回复 支持 反对

使用道具 举报

发表于 2012-6-26 14:10:17 | 显示全部楼层
{:soso_e142:}{:soso_e142:}{:soso_e142:}{:soso_e142:}{:soso_e142:}{:soso_e142:}{:soso_e142:}
回复 支持 反对

使用道具 举报

发表于 2012-6-28 21:02:59 | 显示全部楼层
好贴。
下功夫搞个实时测高补偿吧,效果一定会更好。
期待ing
回复 支持 反对

使用道具 举报

发表于 2012-7-14 17:48:59 | 显示全部楼层
好贴,先学习了
回复 支持 反对

使用道具 举报

发表于 2012-7-15 14:46:26 | 显示全部楼层

{:soso_e100:}{:soso_e179:}{:soso_e189:}


多谢楼主分享
回复 支持 反对

使用道具 举报

发表于 2012-7-30 22:14:34 | 显示全部楼层
看起来很复杂,有空试一试
回复 支持 反对

使用道具 举报

发表于 2012-8-1 22:34:50 | 显示全部楼层
顶一下楼主,比较合脾气
回复 支持 反对

使用道具 举报

发表于 2012-9-29 13:34:31 | 显示全部楼层
好贴,多谢楼主分享{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2012-9-29 18:36:06 | 显示全部楼层
做个记号,以后用着了来看
回复 支持 反对

使用道具 举报

发表于 2012-11-9 18:20:34 | 显示全部楼层
精彩,这个方法很好,可惜我用的是维宏系统,请教楼主,能写个程序在维宏系统中运用吗
回复 支持 反对

使用道具 举报

发表于 2012-11-10 08:39:46 | 显示全部楼层
这是技术贴阿,留名。
回复 支持 反对

使用道具 举报

发表于 2012-11-13 22:28:11 | 显示全部楼层
感谢分享,先收藏着。
回复 支持 反对

使用道具 举报

发表于 2012-12-13 18:26:22 | 显示全部楼层
   楼主,刚下 载来装上,怎么在这Z轴校零里输入x y步长里输不到数字的,比如输入X后点其他项如Y后x里的数字就自动变为零了,或者就算只输一项,去点Z校零按键前面输入的数字也自动为零了。这到底是怎么回事?怎么解决。盼楼主解答。谢谢。。。。。
  (我是将下 载里面的附件1里的1024cn.set直接放在安装目录下,page1.jpg文件放在安装目录下的Mach3\Bitmaps\MillBitmaps里。。ZOFix.exe也直接放在安装目录下。是不是这样安装的。如不对望楼主指点下)

回复 支持 反对

使用道具 举报

发表于 2012-12-19 13:08:02 | 显示全部楼层
记号一下  学习了
回复 支持 反对

使用道具 举报

发表于 2012-12-26 23:20:23 | 显示全部楼层
本帖最后由 破烂王 于 2012-12-26 23:24 编辑
柳飘飘 发表于 2012-12-19 13:08
记号一下  学习了

太强了,我断了n个10度的刀了这回有救了,楼主更新的附件1在5imx地址粘过去找不到总是显示临时地址然后就回到首页了

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入磁动力

本版积分规则

扫一扫加公众号

QQ|小黑屋|手机版|Archiver|www.cdle.net 磁动力电子网 2001-2017 ( 粤ICP备10098153号

粤公网安备 44040402000001号

GMT+8, 2019-1-22 16:29

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.