开源改变世界!!

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

推推 grbl 2年前 (2022-10-30) 158次浏览 0个评论
关闭
abetusk 打开了这个问题 on 25 Feb 2013 · 37 条评论
关闭

用于(金属)高度映射的 Z 探头(例如 PCB 高度映射)第192章

abetusk 打开了这个问题 on 25 Feb 2013 · 37 条评论

注释

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

我一直在破解 GRBL 的 0.8c 版本,以添加“探针”功能的功能,该功能将减小 z 轴,直到检测引脚变低或达到 z 阈值。到目前为止,我已经添加了三个新变量,az 进给率 ($23)、az 阈值 ($24) 和启用探测位 ($25)。我还添加了一个独立的命令“$P”,它将启动探测操作,但前提是设置了探测启用位。

我正在使用 seeeduino,它是一个 Arduino 克隆,具有 atmega328p。探针使能位设置模拟引脚 5(PORTC,引脚 5)的内部上拉电阻,使线路处于低电平有效。启动探测命令后,z 访问将递减,直到探测线变低或达到阈值。

我复制了很多限制代码,它们看起来非常相似。主要区别在于探头操作会适当地减少位置,并且在达到限制时不会后退。这个想法是用户将读取高度并正常进行。

我特别需要这个功能,因为 PCB 在相关区域上显着翘曲,导致高度变化。一旦我有了高度图,我就会插入原始 g 代码以补偿高度差异,然后正常发送作业。

根据经验,这个高度可能高达 0.5 毫米(0.05 英寸),这可能看起来并不多,但在布线 PCB 时,铜层约为 0.03 毫米(0.00134 英寸)显着差异,无论是在布线 PCB 的质量还是首先这样做的能力。

以前我通过发出 az height change 然后轮询 GRBL 的位置状态来做到这一点。然后我会查询一个独立于运行 GRBL 的 Arduino 的连续性测试仪,看看是否已经建立了连续性,如果有,记录高度并移动到下一个点。这很有效,因为它生成了可用的高度图,但操作速度非常慢,受限于我的脚本可以轮询 GRBL 的速率。一块中等大小、50 厘米 x 70 厘米、间隔 5 厘米的木板需要 30-45 分钟以上,具体取决于 0 z 位置与作品平均高度的接近程度。

我不确定其他人是否真的在业余爱好者级别从事此类工作,但我认为也许其他一些人会对将此功能添加到 GRBL 感兴趣。您是否有兴趣将这些更改合并到您的下一个版本中?

如果是这样,您对如何合并此功能有任何指导吗?是否添加了一个单独的“$P”命令以符合项目其余部分的理念?我使用的变量是否合适?应该还有其他人吗?

LinuxCNC 也有一个专门用于此的 g 代码,称为“g38.[2345]”(参考此处),尽管环顾四周,您似乎不赞成这种 g 代码膨胀。

我仍处于测试阶段,可能存在一些潜在的问题。我发现特别令人不安的一个问题是有时会发出多个“?” 命令冻结 GRBL。我无法重现此问题。我尚未确定这是否是我的更改的产物、GRBL 中的错误或我的硬件设置的其他问题,但我想如果你想查看/合并我的代码,我会告诉你的。

如果您确实查看了我的更改,请注意我已经更改了“defaults.h”中 Zen Toolworks 部分下的一些默认设置,并更改了 config.h 中步进和方向位的引脚排列以适合我的设置.

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
贡献者

阿尔法研究 评论 on 25 Feb 2013

这个功能听起来很棒!我正在尝试开始做一些 PCB 工作
,并且阅读了很多关于高度问题的信息。对于非 PCB 工作来说,这一添加听起来也是
一个不错的功能。
谢谢,
马库斯

2013-02-25 00:57,安倍写道:

我一直在破解 GRBL 的 0.8c 版本,以添加
“探针”功能的功能,该功能将减小 z 轴,直到检测引脚
变低或达到 z 阈值。到目前为止,我已经添加了
三个新变量,az 进给率 ($23)、az 阈值 ($24) 和
启用探测位 ($25)。我还添加了一个独立的命令“$P”
,它将启动探测操作,但前提
是设置了探测启用位。

我正在使用 seeeduino,它是一个 Arduino 克隆,具有
atmega328p。探针使能位设置模拟
引脚 5(PORTC,引脚 5)的内部上拉电阻,使线路处于低电平有效。启动探测
命令后,z 访问将递减,直到
探测线变低或达到阈值。

我复制了很多限制代码,它们看起来非常相似。主要
区别在于探头操作会
适当地减少位置,并且在达到限制时不会后退。
这个想法是用户将读取高度并
正常进行。

我特别需要这个功能,因为 PCB
在相关区域上显着翘曲,导致高度变化。一旦我
有了高度图,我就会插入原始 g 代码以
补偿高度差异,然后正常发送作业。

根据经验,这个高度可能高达 0.5 毫米(0.05 英寸),这
可能看起来并不多,但在布线 PCB 时,铜
层约为 0.03 毫米(0.00134 英寸)显着
差异,无论是在布线 PCB 的质量还是
首先这样做的能力。

以前我通过发出 az height change 然后轮询
GRBL 的位置状态来做到这一点。然后我会查询一个
独立于运行 GRBL 的 Arduino 的连续性测试仪,看看是否已经
建立了连续性,如果有,记录高度并移动到下一个
点。这很有效,因为它生成了
可用的高度图,但操作速度非常慢,受限于
我的脚本可以轮询 GRBL 的速率。一块中等大小、
50 厘米 x 70 厘米、间隔 5 厘米的木板需要 30-45 分钟以上,具体取决于
0 z 位置与作品平均高度的接近程度。

我不确定其他人是否真的在
业余爱好者级别从事此类工作,但我认为也许其他一些人会对
将此功能添加到 GRBL 感兴趣。您是否有
兴趣将这些更改合并到您的下一个版本中?

如果是这样,您对如何合并此
功能有任何指导吗?是否添加了一个单独的“$P”命令以符合
项目其余部分的理念?我使用的变量是否
合适?应该还有其他人吗?

LinuxCNC 也有一个专门用于此的 g 代码,称为“g38.[2345]”
(参考此处
http://linuxcnc.org/docs/html/gcode/gcode.html#sec:G38-probe),
尽管环顾四周,看起来你对这种
g 代码膨胀不满意。

我仍处于测试阶段,可能存在一些潜在的
问题。我发现特别令人不安的一个问题是
有时会发出多个“?” 命令冻结 GRBL。我
无法重现此问题。我尚未确定这是否是
我的更改的产物、GRBL 中的错误或我的硬件设置的其他问题,但我想如果你想 查看/合并我的代码
,我会告诉你的。

如果您确实查看了我的更改,请注意我已经更改
了“defaults.h”中 Zen Toolworks 部分下的一些默认设置,
并更改了 config.h 中步进和方向位的引脚排列以
适合我的设置.


直接回复此电子邮件或在 GitHub
#192上查看。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

看起来是一个很好的开始。如果我正确阅读您的代码,我看到的主要问题是没有受控减速。因此,当探头运动停止时,可能会丢失步数,从而导致错误的位置读数。在几次探测操作之后,累积的误差可能大到足以成为一个问题。

我认为您实现命令处理的方式看起来也不错。与那里的情况大致相同。简单和模块化。我认为在某些时候我们可以将您的工作作为实验性功能引入。但是,请在边缘版本上工作,而不是在 master 上工作。这是我们将推送所有新更新的地方。

在某些时候我真正想做的是摆脱使用归位周期的“精简”步进模块。它存在以更高进给速率运行的问题,因为它不是实时的。缓慢的除法运算是问题的根源。相反,修改主步进模块以轻松使用特殊运动模式,如归位或探测。几周前我试了一下,但我认为这需要大量的时间和努力才能把一些东西放在一起。但是,我认为这完全独立于您拥有的 probe.c 模块。完成后,我们将那里的代码修改为新的步进模块。

所以,这让我想到了另一点。探测打开了一个相当大的蠕虫罐。它有许多方法和探测工具的变体,即尖端形状、偏移方向、下垂/减速延迟、触发周期数等。所有这些都需要根据用户设置独立调整。如何管理这些使得探测更加难以支持。我猜想这种行为需要很像归位如何寻找触发开关,拉断,然后缓慢地重新接合开关以定位精确位置,但在感应到开关时控制减速。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@abetusk:为此+1,这是我在说我对grbl具有基本可用性之前也缺少的功能(我可怜的深度传感器现在被废弃了)-主要用于相同的应用程序(PCB铣削-基本上是什么我得到了我的磨坊)。

@chamnit:传感方法有点微妙——虽然一些深度传感器有弹性并且内置了一些“给予”,但其中很多(尤其是业余爱好者)只是高度校准的固体金属块——这意味着除非可以在触点闭合时立即停止,下一步开始咀嚼工具的尖端(如果在 PCB 铣削中使用超锋利的 v-bit,这将立即意味着可怕但几乎无法察觉的“叮当”声)。经验表明,带有探测脚本的 Mach3 可以多次执行此操作,几乎无需“叮当”,但该方法确实以蜗牛的速度完成。然而,这也意味着,如果需要第二次通过,我们就做错了…… :)

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@blinkenlight:对于高端精密探头,执行触发循环非常普遍。它允许探头快速寻找并找到一个表面,然后快速减速、备份并进行缓慢的精确测量,因此惯性效应不会破坏测量。使用这种方法,可以加快整个过程,尤其是对于大量测量。

但是,如果您事先已经知道粗糙的 z 轴表面位置,并且从探测周期开始时故意以非常慢的速度进给,我确实认为没有减速是可以的。因此,您将快速移动到水面上方并开始缓慢触球,并在感应到触球后立即停止。由于步进器在低速时具有高扭矩,因此丢失步骤的可能性较小。尽管如此,这实际上只是平面探测或半手动慢跑/探测的解决方案,而不是用于各种形状和大小的物体的一般自动化使用。

也许,将其作为一个开始将有助于消除我们遇到的一些细节。我们可以让用户知道他们需要手动点动到靠近探测点的位置才能启动它。@abetusk,如果您更新边缘分支的代码并使其成为 config.h 中的编译时选项,我想我会将其合并到代码库中,并且可以让人们开始对其进行测试。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

恕我直言,如果探头设计如下所示:https ://docs.google.com/file/d/0BxCeMnNy47GdZ2ZCRFJLUnNfTlk/edit?usp=sharing您不必担心会损坏任何东西。当然,这假设您所有的工具上都有深度环,或者您有一种方法可以将工具精确且重复地安装在主轴的同一位置(垂直)。

图示的探头为 NC 型(跳闸时打开)。弹簧行程可以随心所欲,理论上甚至可以从横移速度安全停止。探针杆的 T 形部分和探针主体的下部是唯一需要精密加工的部分,因此探针的总长度(“松弛”时)是众所周知的。

请原谅我很快的起草技巧:-)

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@csdexter: 哦,我一点也不反对。我要说的是,我怀疑对于每个基于弹簧的“作为工具安装”的测头,可能还有十个其他简单的实心金属板,实际工具被小心地放入其中,就像这样实例(没有任何“弹性”): http: //www.carving-cnc.com/media/simples/3020Znew_details_1.jpg

我欣然同意这种事情并不是专业精神的顶峰,而是因为它可以很容易地制造(将输入线连接到已知厚度的隔离金属板 -> 完成)并且因为它实际上在现实中工作得很好生活,根据我的经验,它往往是业余人群的首选武器…… :)

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

如果涉及导电材料(或者,如您的图片所示,将导体连接到工具本身是可以接受的),那么我的反向设计应该也可以工作 – 无论是使用原始电气设计(即当探针被触摸时打开工具)或您图片中的设计(即当工具接触探头时关闭)——在这两种情况下,弹簧都会在那里减弱冲击。

虽然这对于普通尺寸的现实世界 CNC 工具来说很有效,但我非常怀疑它是否可以使用非常精细的工具,例如 0.1 毫米硬质合金雕刻机或 0.5 毫米通孔钻。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@csdexter:哦,它确实有效 – 0.1mm v-tips & co。正是我见过的那种工具。出于好奇,我什至在显微镜下观察了工具的尖端。看来(我不是真正的冶金学家/机械师)尖端完全没有受到伤害——只要机器运行得很慢并在接触时立即停止。不幸的是,即使是中等大小的 PCB,也不能这么说——不幸的是,这些雕刻机钻头似乎不会持续太久……

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

机床钻头非常坚硬,其设计比切削材料要硬得多,因此刀尖很好也就不足为奇了。我想你会在 PCB 表面看到一些凹坑。如果接触压力太高,这实际上取决于触点之间的弯曲程度以及是否弯曲和扣住工具。系统中确实需要某种合规性,小(工具提示)和慢或大(弹簧)和快。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

同样,我见过的家庭爱好者可以制造的最好的接触式探头之一是雷尼绍探头。它基于 3 个 V 形槽中的 3 个球的静态决定性(非常精确)接触。球和凹槽是导电的并串联接线,因此当任何一个触点从 V 形凹槽中抬起时,它会立即打开电路。一个简单的弹簧系统,如@csdexter提到的作品非常适合这种设计。很长一段时间以来,它一直在我的待办事项清单上。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
作者

獠牙 评论 2013 年 2 月 26 日

blinkenlight 的链接正是我所做的:用电极连接一个 v-bit,减少直到它撞入工作,记录它的高度。这是我的首选方法,因为正如blinkenlight 所说,这很容易。我也得到了很好的结果。我可以轻松实现 10 mil 间距和 10 mil 轨道宽度。目前,我首选的钻头是 0.1 毫米 25 度 V 钻头。在我之前的设置中,高度感应是通过独立系统完成的,我确实在 PCB 中看到了“凹坑”,正如 chamnit 所提到的。

我使用的是 7×7 Zen Toolworks 套件,带有 1.25mm 螺距和 1/16 微步进。使用当前版本的探头,我相信当探头进给速度设置为 10-50 毫米/分钟时,我显然会丢失步数。听完 chamnit 的帖子后,我相信这可能是由于连续性建立后的不和谐停止。在我开始丢失步数之前,我没有机会测试最大进给速率。

如果我弄错了,请原谅我,因为我对很多事情都很陌生,但我相信基本上有两种解决方案:使用减速来缓入停止或放慢速度,这样你就不会因为以下原因而失去脚步刺耳的停止。以前我一直使用 0.01 毫米增量的高度探测,所以如果我可以足够快地减速到这个窗口内,我会对此感到满意,也许这将是一个合理的解决方案。另一种方法是更慢地运行探测器,但这会显着增加映射时间。

我将不得不做一些计算并稍微玩一下代码,但我希望能就如何最好地继续进行输入。我应该尝试增加减速,还是应该假设探头会变得足够慢,以便震动停止不会错过步骤?如果我要使用减速,是否有人猜测在连续性事件后停止的合理窗口是多少?

作为旁注,我还想制作一个雷尼绍探针,虽然探针代码现在仅适用于 z 轴,但可以很容易地看到它如何在连接了雷尼绍探针的情况下适应所有三个轴。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

如果你只想探测 Z,你可以用一个弹簧针插入主轴,几毫米的弹簧加载行程,所以你可能会跑得很快,然后慢慢地探测

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

不确定如何进行。减速,一方面,取决于机器。减速距离取决于速度和减速度。这个距离可以通过一个基于弹簧的探针来增加。就像我说的,真的很难说什么是正确的,因为所有的设置和探测系统都是不同的。

所以,我认为现在最好的办法是假设探头运行速度足够慢并且不安装减速。但是,当您编写代码时,我会记住这一点,以便以后可以轻松安装。我认为在我们弄清楚一切之前最好不要把事情复杂化。

@langwadt: 好主意。弹簧柱塞可以是同样的东西,可以在五金店买到(我想)。基本上用这些进行连续性设置。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
作者

獠牙 评论 2013 年 2 月 26 日

@langwadt, 虽然这可能是一种替代方案,但从工作流程的角度来看,使用实际将要切割的工具要简单得多。即用工具进行高度感测,然后在高度图创建后,取下电极并开始切割。可以进行工具更换,将弹簧针换成钻头,然后再进行一次高度感应以将角归零,但如果可能的话,我想避免这种情况,因为它只会增加另一层复杂性。

@chamnit,我认为这是一种非常实用的方法。在我开始丢失步骤之前,我将不得不使用它来确定系统上的最大速度是多少,但这是与选择策略不同的问题。我会尝试将探测与边缘分支合并,并随时通知您。

谢谢大家的帮助。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

关于可以感应工具的 az 探针,我们是否可以使用弹簧柱塞的反向 – 使用弹簧加载机构代替已知高度的金属块?更多的差异,但每个人都可以像使用金属块一样轻松测量自己的。

我以前从未使用过弹簧柱塞,所以我不确定是否有任何带有扁平尖端而不是球的..至少,一个足够扁平的扁平尖端。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
贡献者

jgeisler0303 评论 2013 年 2 月 26 日

有没有人真的尝试过没有高度图的隔离铣削?我在我的 MDF+drawer-slides+Proxxon-mill 上使用 30° v-bit(雕刻机)做了这个“Arduino Duemilanove + Pololu Drivers”板:https ://www.dropbox.com/sh/njo4u9pr34nlzbz/YRNU-tKvoQ . 它并不完全漂亮,但无需删除或修复痕迹即可工作。但是我的印刷电路板质量非常好,也许我很幸运。
所以,只要这对我有用,我就不想使用高度映射,因为否则我觉得付出的努力太高了,购买蚀刻设备是合理的。
出于其他目的,我可以想象有一天让自己成为雷尼绍探测器,我可以全速撞上物体,就像归位一样。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@jgeisler0303:是的,我实际上是在没有高度校正的情况下进行 PCB 铣削。但是,我确实倾向于使用铣平的 MDF 床,将 PCB 安装在上面。它仍然有一些高度波动(我的板很可能不是真正的顶级质量),但我通常只测量板周围 5-6 个随机点的高度,并将我的 Z = 0 设置为“最深”点 -这样我就可以保证在任何地方都可以通过铜进行铣削,并且在某些地方稍微更深的切割与 20-30 度的 V 位钻头并没有太大的区别(当然不会铣穿)。

如果我没有搞砸任何事情,标准的 1.27 间距 SMD(或 2.54 THT,在引脚之间有一条走线)是非常可行的。可以尝试更高,但可能需要特殊位,即使这样,所有赌注都已关闭……

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
作者

獠牙 评论 2013 年 3 月 1 日

@chamnit,我一直在做一些关于 z 探测的工作。它仍然有一个我无法修复的错误,所以我不认为它处于合并到您的边缘分支的状态。

如果您不介意的话,我希望您能对此有所帮助。我肯定在某种程度上错位了,我不确定它是如何发生的。

首先,让我描述一下我所做的一些改动:

  • 增加了探头减速
  • 添加了“probe_z_contact_position”以记录联系的时间
  • 添加了查询探针函数“$S”以显示当前探针状态(contact/apart、contact_z 等)

我想添加减速,因为很明显我的 Z 轴错位了。但是,在添加减速之后,我发现了同样的问题。

主要症状是,当我发出重复探测时,无论是在同一个 x/y 位置还是在其他位置探测然后回来,它都会逐渐向下漂移。对于 1 mm/min 的进给速率和 10mm/sec^2 的减速,每 3-4 个探针看起来大约为 0.001 mm。更快的进给速度似乎加剧了这个问题。

此外,看起来只有当钻头与作品接触时才会发生这种情况。在空气中探测并让它达到阈值根本不会漂移。

漂移的重要性足以使生成的高度图变得可疑。我不会有信心使用生成的高度图来布线板。

我明白你说过不要把事情复杂化,但我对失去脚步太紧张了,尤其是在看到漂移(有和没有减速)之后。对于希望在接触后立即停止探头的人,我想将减速度设置得足够高将是等效的。或者,将减速设置为 0 可能是一个允许立即停止的特殊指标。无论如何,我相信你是对的,这不是可以预见的,应该交给运营商根据需要设置。

我已经在我的帐户下的 grbl 的“边缘”分支下提交了当前版本。主要的工作室仍然是probe.c

您对我为什么会看到这种下降有任何想法吗?probe.c 中的减速代码对您来说是否合理?

任何帮助,将不胜感激。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

导致漂移的根本可能不是减速代码。我确实记得一些 ShapeOko 人要求一种方法来保持轴一直处于启用状态,因为他们的机器会漂移。我安装它时将 step_delay_time 设置为其最大值 255。我会尝试启用它并确保步进电机不会在探测代码中的任何地方禁用。这可能会解决问题。祝你好运!

我应该补充的一件事是,固件非常接近 Arduino (32kb) 和内存 (2kb) 中的最大闪存空间。因此,每当您感觉它已准备好推送到边缘分支时,请尝试确保代码非常紧凑。不一定要完美,但要尽可能紧凑而不会让自己发疯。:) 以后我总是可以进来优化代码。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

因为只要我想声称知道它们的位置是什么,我对在任何时候给步进器断电感到非常不安,我对轴启用的解决方案是使用 grbl 启用信号,但修补我的驱动器盒来路由它不是启用输入,而是扭矩选择(按照中国司机的习惯,以前设计为通过步进时钟超时自动取消扭矩)。这样我就可以两全其美了——我不必担心我的步进器在它们必须移动时不会“扭矩备份”(中国的超时电路有点粗略…… .),但电机不只是在不移动时加热——它们在通电时始终保持舒适的 20% 扭矩,除非它们实际上在移动……

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@blinkenlight: 我认为这真的取决于设置和驱动程序。我的 Sherline 铣床的丝杠中有足够的摩擦力(也减少了侧隙),以防止 CNC 停止后出现任何滑动。此外,我使用 Pololu 步进驱动器,其中包含 Allegro IC。从他们的数据表中我可以看出,Allegro IC 在禁用时不会重置其内部电路,因此无论如何“应该”保留微步。即使丝杠有一点漂移,只要它在一个台阶下,步进器就应该重新启动到它的最后一个微步位置。(不是 100% 确定这一点,但是在玩了 Grbl 一年之后,我还没有看到任何可以证明这一点的东西。)所以,也许你的低扭矩模式是 Allegros 内部所做的中国驱动程序版本。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@chamnit:当然,我想所有的铣床都不一样——但是为了我的舒适,我的 mini-CNC 的滚珠丝杠轴在没有动力时很容易转动,所以我坚持…… :) 关于驱动器 – 我不熟悉 Allegro IC ,但我知道东芝 6560 在禁用时也会保持其内部状态,启用引脚仅禁用 H 桥。我认为 Allegros 也是如此。我只是发现扭矩切换装置更方便……

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

TI 也一样。如果你想重置它们,你必须点击 Home 引脚。

奥尔登

2013 年 3 月 1 日上午 11:30,Asztalos Attila Oszkár notifications@github.com写道:

@chamnit:当然,我想所有的铣床都不一样——但是为了我的舒适,我的 mini-CNC 的滚珠丝杠轴在没有动力时很容易转动,所以我坚持…… :) 关于驱动器 – 我不熟悉 Allegro IC ,但我知道东芝 6560 在禁用时也会保持其内部状态,启用引脚仅禁用 H 桥。我认为 Allegros 也是如此。我只是发现扭矩切换装置更方便……


直接回复此邮件或在 GitHub 上查看。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
作者

獠牙 评论 2013 年 3 月 2 日

@chamnit,我正在使用 3 个 Pololu A4988 步进驱动器,并且没有将 STEPPER_DISABLE_PORT 连接到任何东西。A4988 上的使能引脚保持不变,这意味着它们应该被下拉驱动为低电平,从而使电路板在供电时始终处于启用状态。除非我错过了什么,否则这意味着更改 stepper_idle_lock_time 应该没有效果。

我当然很乐意使用这个设置,但我怀疑这不会有任何效果。你对可能发生的事情有任何其他理论吗?有什么我可以尝试或测试的东西来更多地了解正在发生的事情吗?

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

再次查看您的代码,您可能需要在探测周期完成后同步 g 代码解析器和规划器位置变量。有一个称为 sys_sync_current_position() 的函数。尝试这个。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
作者

獠牙 评论 2013 年 3 月 2 日

@chamnit, probe_z 函数只能从 mc_probe() 函数中调用,该函数的末尾确实有一个 sys_sync_current_position() 调用。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@abetusk: 抱歉错过了!因此,还有其他一些看起来可能是罪魁祸首的事情。似乎有一个不断计算的 cur_z 变量,其中有一个除数。分水岭是实时的。我会将此 z 限制检查预先计算为整数步数计数器。此外,去抖动时间延迟也会影响步进运动。我会删除它,只检测变化的第一个迹象。这足够准确。

原因是归位循环代码不是实时的,并且独立于程序正在做什么,步进模块使用其基于中断/定时器的代码。因此,您必须非常注意在步进循环中放入的内容。当我前段时间测试归位循环步进代码时,我只能达到步进模块可以达到的步进速率的一小部分,因为代码的加速部分中的单除引起的时间延迟。如果速度足够快或时间过长,延迟会导致跳过步骤。

如果这没有任何作用,那么可能是探针本身的接触导致了步进电机的背压。但是,我认为移动步进器需要很大的压力,特别是如果它们总是如你所说的那样启用。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
作者

獠牙 评论 2013 年 3 月 3 日

@chamnit,我已将除法从循环中取出,并删除了去抖动等待延迟。它似乎没有任何效果,并且漂移仍然以相同的速度。

我还尝试将主要探测放在 cli()/sei() 块中,但无济于事。我尝试过使用 step_rate、step_delay 和 trap_counter 的初始值,但没有任何改变。

我相信电机非常强大,如果是使步进器失去脚步的后推力,我会感到非常惊讶。在进行高度探测时,我使用 GRBL 0.8 版没有问题,并且有可能将钻头推入铜中最多 0.01 毫米。当在 GRBL 范围之外进行高度探测时,高度是可重复且一致的,在 12×14 网格的探测点的 3-4 次通过中通常只有 0.00 到 0.02mm 的变化。

考虑到 GRBL 之外的探测脚本的成功,我强烈怀疑是 probe_z() 或相关代码在某处丢失了步骤。

您确定限制功能不会丢失步骤吗?

任何关于如何进行的建议都非常受欢迎。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@abetusk: 不能确定还有什么可能。它假设它也可能取决于您如何执行测试。您是否使用普通 g 代码移动轴,然后用探针跟踪它?似乎缺少一个 plan_synchronize() 调用会截断任何当前正在执行的 g 代码。这就是我能想到的。

好吧,推回可以做一些事情,但这取决于您的设置。我不记得你是说你有 Zen TW 还是 Shapeoko,但我碰巧有一个 ZTW,它的导螺杆非常陡峭 8mm/rev。这些上的少量压力可以转化为一些电机扭矩。步进器不是特殊的 NEMA17。但就像我说的那样,对于更典型的设置,它需要对探头施加很大的压力。探头是否有可能在卡盘中滑动?

最后,每个探针丢失了多少步?一个还是几个?总是朝着同一个方向?您是否尝试过反向探测,z 向上移动?这有什么改变吗?

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
作者

獠牙 评论 2013 年 3 月 4 日

@chamnit, 它看起来是每个探头漂移 2.5 步。我有 1.25 毫米螺距丝杠和 0.9 度(每转 400 步)Nema17 电机以及 1/16 微步,每毫米有 5120 步。因此,每个探头的漂移约为 0.0005 毫米。这听起来可能微不足道,但这是一个一致的漂移,每次我绘制 PCB 的完整高度图时都会引入近 3 百万的误差(我使用多达 156 个测试点来绘制小 PCB)。

我已经检查过一切都是安全的,而且看起来很安全。我的理解是我不需要 plan_synchronize 因为我没有从 probe_z() 函数或 mc_probe() 函数发出任何 mc_line() 或其他运动控制调用。

是我用来做探测的脚本。它发出一个“$P”探测命令。一旦探测停止,它就会发出一个“$S”命令来读取状态。然后它发出一个“g1z0”命令并重新启动该过程。为了额外的措施,我在探测呼叫和饲料移动呼叫之间睡了一两秒钟。

这里有 109 个探测数据点,都来自同一个位置。我冒昧地取出原始 z 步位置并将它们与探针编号(即 x 轴是探针计数,y 轴是 sys.position[Z_AXIS])进行对比,可以在此处找到(请原谅imgur 链接)。我还绘制了一条线供参考,以便您轻松了解坡度。

与往常一样,欢迎对寻找什么或如何进行的任何建议。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@abetusk:您肯定需要在您的探测代码中同步计划,尤其是当您在每个探测周期之间发出 gcode 运动命令时。Grbl 只是将 gcode 放入其规划器缓冲区中,并且当您发出探测命令时,不能保证步进器模块在探测运动开始并覆盖它之前已完成它。计划同步力清空缓冲区,并应确保步进运动在继续之前完成。您的脚本可能有足够长的延迟,因此您看不到问题,但也许看不到。

无论如何,我同意漂移是一件大事。我希望这与边缘分支中的新步进算法无关。你还记得master分支是否存在这个问题吗?

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@abetusk: 进一步查看您的代码。更正:plan_sychronize() 什么都不做,因为您确实有一个“$P”命令检查空闲状态。但是,在将状态更改为motion_contol.c 中的STATE_PROBE 之前,我将删除协议执行中的STATE_IDLE 检查并添加plan_synchronize。通过这种方式,您可以在流式传输时发出探测命令,而不会出错。

我只是在代码中找不到任何会导致此问题的明显内容。我们似乎已经消除了几乎所有会导致它或可能导致它的东西……当您可以验证没有丢失任何步骤时,您会做什么?您是否只是执行探针运动代码一定数量的步骤然后停止?

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@abetusk:最后一件事,1/16 微步对于您的丝杠设置来说非常小。如果你真的每毫米有 5120 步,那意味着每一步大约是十分之一微米。1/16 的微步进确实会降低您的扭矩。您可以轻松地运行全步(并获得更大的步进扭矩)而不会影响精度,因为大多数 CNC 的精度不超过 0.05 – 0.1mm。不确定这是否与您所看到的有关,但我认为值得尝试切换您的微步进。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

有关此功能的任何消息?我也有兴趣:)

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
作者

獠牙 评论 2013 年 7 月 7 日

我已经回到这个问题上,并且仍在观察持续的漂移。有几种不同的策略我可以尝试找出问题发生的位置,如果我有时间,我会回到它并尝试缩小可能性。

同时,我已经分叉了 GRBL 的当前主分支并添加了我自己的探测代码 ( https://github.com/abetusk/grbl )。我发现如果我完全绕过步进子系统,让我的探测代码回到原来的位置,问题就会消失,至少据我所知。我将旧的探测功能留在那里,以便任何人都可以查看(“probe_z”)。新的探测功能(“probe_z_and_retract”)似乎对我有用。

考虑到我不知道为什么这不起作用以及“probe_z_and_retract”为什么起作用,我真的不建议将它添加到 GRBL 主分支。我欢迎任何关于做什么以及如何隔离问题的建议。我还鼓励其他人使用代码来查看错误是否可重现,并查看“修复”是否适用于他们。

如果有人想与我联系以获取更多详细信息,请随时联系。我的电子邮件地址可以在我的用户资料下找到。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
作者

獠牙 评论 2013 年 10 月 14 日

@chamnit,我环顾 GRBL wiki 并注意到“已知错误”部分:https ://github.com/grbl/grbl/wiki/Known-Bugs 。在那里,它说在某些(未知)条件下可能会丢失一些步骤。如果这是真的,这将解释我看到的错误。

再一次,我会以非常慢的速度下降,然后当接触到时,以快速的动作后退。再次运行相同的高度探测,我注意到高度感应偏离了千分之几英寸,我计算了几十步。在我的系统上,这个问题是可重复的并且相当一致。我的“修复”是在接近和后退时做一个慢动作,完全绕过步进控制子系统,高度感应现在可以工作了。

在 Wiki 中,您提到您希望人们让您知道丢失步骤问题是否给您带来不便。如果这是我看到高度感应关闭的问题,那么这个错误对我和高度感应功能来说都是不便的。

是否可以尝试更详细地诊断此问题?如果您在确定要进行哪些测试时需要任何帮助,或者我是否可以提供任何进一步的帮助,请告诉我。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192

@abetusk: 我刚刚将已知的错误 wiki 页面更新为最近的内容。首先,在特定条件下高进给率的丢失步数问题已被隔离并已修复。它与斜坡计时器需要如何在某些条件下更新以保持与规划器计划的同步(在 v0.8 中修复)有关。此外,它与步进算法中的除法有关,该算法在 20kHz 及以上的步进频率上花费了太多时间(在 v0.9 中修复)。

唯一剩下的已知错误实际上是规划器,如果规划器在执行过程中更改它,它将如何破坏第一个执行块。在某些条件下,它会。例如,当您尝试输入两个过于靠近的动作时,慢跑会出现。对于其他所有内容,例如流媒体,您可能永远看不到它。

很难说您所看到的是否与这些问题之一有关。如果是,那就是后者。为了排除它,我会强制等待,直到下一步移动完成,然后再将新移动添加到规划器缓冲区。

好消息是我在解决“dev_2”分支中的这个规划器缓冲区问题方面取得了很大进展。它工作得很好,但我在改造整个步进系统来做到这一点时做了很多事情。在这个开发分支上线之前,还有很多工作要做。

Z 探针用于(金属)高度映射(例如 PCB 高度映射) #192
 
喜欢 (0)

您必须 登录 才能发表评论!