开源改变世界!!

GRBL 雕刻模式 #882

推推 grbl 2年前 (2023-01-23) 186次浏览

关闭
Moffy 打开了这个问题 2016 年 1 月 13 日 · 10 条评论
关闭

GRBL 雕刻模式#882

Moffy 打开了这个问题 2016 年 1 月 13 日 · 10 条评论

注释

GRBL 雕刻模式 #882

GRBL 雕刻模式

我有一个让GRBL能够自动雕刻的想法,即将自调匀整功能加入到GRBL中。
它将从一个由 PC 控制的区域探测器开始。结果将存储在 PC 上,并创建一个双线性插值网格,例如最多 1024 个点。然后该网格将被加载到 GRBL 中并用于根据当前的 x 和 y 位置计算 zdelta。zdelta 将在程序循环中计算并给出偏移量的近似值。我有一些代码来说明:

包括“grbl.h”

//对于具有 4k RAM 的 ATMega644PA

定义 ZOFFSET_MAX_PTS 1024

int16_t zoffsets[ZOFFSET_MAX_PTS];//材料表面的 z 偏移数组
int16_t znew, zold, zdelta; //用于计算当前偏移量
uint8_t x2divisor, xpts;
uint8_t y2除数,ypts;
布尔雕刻;//启用雕刻模式

void zoffset_calc()
{
int32_t x, y;
uint16_t我;

x = sys.position[X_AXIS];
y = sys.position[Y_AXIS];

x = x >> x2divisor;
y = y >> y2divisor;

i = x*ypts + y;
if(i < ZOFFSET_MAX_PTS)
{
    znew   = zoffsets[i];
    zdelta = zdelta + znew - zold;
    zold   = znew;
}

}
//
void zoffset_load(uint16_t i, int16_t z)
{
if(i >= ZOFFSET_MAX_PTS)
return;

zoffsets[i] = z;

}
//
uint16_t zoffset_checksum()
{
uint16_t zchk=0, i;

for(i = 0; i < ZOFFSET_MAX_PTS; i++)
{
    zchk = zchk ^ zoffsets[i];
}

return zchk;

}

zdelta 将用于步进器部分,以将向上或向下脉冲添加到 z 轴。
需要将一些新命令合并到协议中,例如加载 zoffset 数据,但不要太复杂。雕刻功能将由单个布尔变量“雕刻”控制。

您认为实施它的最佳方式是什么?

GRBL 雕刻模式 #882

我认为此时的问题是当前 328P 板上的可用存储空间。为了执行您所描述的操作,GRBL 必须存储用于计算 Z-delta 的点数组。它没有的空间。一旦使用/支持新板,它可能会被添加,但自动级别功能已经在多个用户界面中实现。

Sonny 可能对此有更多的洞察力,并且他是新功能的最终决定权。

GRBL 雕刻模式 #882

进一步使用 mega board 怎么样 :-)

GRBL 雕刻模式 #882
作者

是的,如果说为阵列留出 1k,则当前的 328p 可以做到这一点,这提供了 512 个非常有用的点,并且有一些版本的 GRBL 仅使用 1k(更少的串行缓冲区空间)。但除此之外,即使您不同意 RAM 要求,您将如何实现 zdelta 的步进代码?
用户界面很好,但他们必须破解 GCODE 并且可以大大增加它的大小,控制器跟踪 z 轴会很好,干净简单,至少我希望如此。

GRBL 雕刻模式 #882
作者

由于经过一番思考后没有人回答我的问题,所以我会自己回答。zdelta 可以在主步进 ISR 中得到补偿。

  1. 以低速率运行它,这样就不需要规划,比如 500Hz。这只是意味着您需要在步进 ISR 中使用一个计数器,并且每次它达到预设计数时,您都会根据 zdelta 添加 az 脉冲。
  2. 如果 z move 正在进行中,则不会添加任何脉冲。这避免了高步进率。
  3. 每次主循环处理时,它都会根据当前的 x 和 y 位置计算一个新的 zdelta。
    尽管 zdelta 速率很低,但它应该足以跟随基本平坦表面(例如 PCB)的轮廓。第一次 zprobe 将在短暂延迟后完成,以补偿 zdelta 时间。这是一个简单的方案,但应该可行。
GRBL 雕刻模式 #882
成员

@Moffy:通过这种方式,您可以绕过加速规划器,这可能会导致丢失步骤。它也不是很健壮。@109JB已经说过这种类型的功能超出了 AVR 的能力,甚至可能是 Mega,仍然需要 CPU 周期来进行计算。

此外,此功能非常具体,不适用于许多不同的场景。GUI 处理这些事情仍然要好得多,因为 g 代码修改起来并不复杂。奥卡姆剃刀。最简单的解决方案往往是正确的。

GRBL 雕刻模式 #882
作者

谢谢你的回复,但我当然不同意。GUI gcode 修改器采用 2k 文件并可以轻松地将其转换为 80k 文件,这不是最简单的解决方案。你是对的,因为它是一个特定的特征,雕刻,也许不适合更普遍的 GRBL。正如我的初始代码所示,它不会花费很多周期,因为它只是一个不需要计算的查找表。它确实需要一些 RAM 1-2k。
缓慢的速度意味着它不需要加速计划并且应该是健壮的。

但是感谢您在该项目上所做的所有出色工作。

GRBL 雕刻模式 #882
成员

我也不同意。修改后的 g 代码程序变得有多大并不重要。用户通常永远不会看到它,并且可以通过像脚本这样简单的东西来完成。它也可以是更高的分辨率,因为与微控制器相比有无限的资源。顺便说一句,我见过超过几百万行 g 代码的 3D 加工刀具路径,Grbl 可以毫无问题地执行整个程序。

其次,稳健意味着没有潜在的失败点或条件。尽管您的建议可能进展缓慢,但这并不意味着情况总是如此。具有意外应用程序的用户仍然可能被命令比机器的限制更快地运行或创造丢失步骤的情况。一切都需要经过规划器,这样,所有的动作都是加速规划的。

不要误会我的意思。我理解您的论点,即控制器可以轻松地进行这些必要的计算并实时调整其运动。然而,内存仍然是一个关键要求,1-2K RAM 可能不足以满足所有应用程序。另外,还有一个问题是如何在探测点之间进行曲线拟合,因为线性插值不是唯一的方法。还有多种其他方法,哪一种最好通常是特定于问题的。

GRBL 雕刻模式 #882
作者

感谢您的答复。应用非常具体,即 PCB 雕刻或平板雕刻,您可以安全地选择适用于所有规划模式的速率。主要问题是如果您超过了 Z 轴的最大跟踪速率,但这确实不是问题,因为有简单的解决方法,即减慢 x 和 y 的进给速率。不需要插值,因为它假定工作空间适度平坦,只需进行非常有效的点校正,比如相距 5 毫米。问题是 RAM 需要 AtMega644p 或类似的 4k RAM。如果探测程序检测到的平坦度超过最大 dz/(dxdy)(请原谅缩写),则可以通知用户。
我知道这不是一个通用的解决方案,而是一个具有相当大局限性的特定解决方案,但它在大多数 PCB 雕刻情况下都是可行的。
感谢你的宝贵时间。

GRBL 雕刻模式 #882

由于经过一番思考后没有人回答我的问题,所以我会自己回答。zdelta 可以在主步进 ISR 中得到补偿。

  1. 以低速率运行它,这样就不需要规划,比如 500Hz。这只是意味着您需要在步进 ISR 中使用一个计数器,并且每次它达到预设计数时,您都会根据 zdelta 添加 az 脉冲。
  2. 如果 z move 正在进行中,则不会添加任何脉冲。这避免了高步进率。
  3. 每次主循环处理时,它都会根据当前的 x 和 y 位置计算一个新的 zdelta。
    尽管 zdelta 速率很低,但它应该足以跟随基本平坦表面(例如 PCB)的轮廓。第一次 zprobe 将在短暂延迟后完成,以补偿 zdelta 时间。这是一个简单的方案,但应该可行。

@Moffy如果您仍然感兴趣,我现在开始从事类似的项目。到目前为止,我实现了某种“Marlin G29”解决方案,它自动进行探测并存储在数组中(也提供串行输出)但它不使用数据。我发现这个问题是在寻找相关信息。
@chamnit加速规划器的解决方案可能是在规划器本身中进行计算,双线性实现的几个乘法不会杀死 CPU。
关于用例场景,最近雕刻可能是这个软件最常见的原因,我至少会为此创建一个分支。

GRBL 雕刻模式 #882
作者

我已经为 autotrack z 编写了大部分代码,我正在使用基于 SEEED ArchMix 的定制 iMXRT1052 板。该代码尚未经过测试,我修改了 Candle 以进行探测并与微控制器通信。我最近没有上传太多东西,因为我一直忙于制作自己的电路板原型,谁知道 pcb 碳粉转移会如此棘手。
我有自己的更新网站:Moffy/grblHAL#1
干杯。
即将上传进度。

喜欢 (0)