Contact me: hankecnc@gmail.com

支持CoreXY #286

推推 grbl 3年前 (2023-01-21) 142次浏览
关闭
3个任务完成
zanderbier 打开了这个问题 2013 年 11 月 7 日 · 100条评论
关闭
3个任务完成

支持CoreXY#286

zanderbier 打开了这个问题 2013 年 11 月 7 日 · 100条评论

注释

支持CoreXY #286

你好,

多亏了 GRBL,我才开始涉足 CNC 领域。因为我想用 CoreXY ( http://corexy.com/ ) 构建一台机器,所以我将此支持从 Marlinv1 移植到 GRBLv0.8。

仍然有一些错误,但我正在努力。

  • 通用 GCode 发送器或 GRBL 控制器显示 A 和 B 位置,而不是预期的 X 和 Y
  • 没有测试限制,因为开关还没有安装在我的机器上,所以它们可能无法正常工作
  • 使用 $6 变量反转轴对 X 和 Y 不起作用。Z 不受影响。

这是初步的支持。可以发送文件或 GCode 并查看轴的正确运动。

Port from Marlin v1
diff -Naur grbl-master//config.h grbl-v08-corexy//config.h
--- grbl-master//config.h       2013-10-21 19:19:26.000000000 -0700
+++ grbl-v08-corexy//config.h   2013-11-07 03:01:57.000000000 -0800
@@ -171,6 +171,10 @@
 // successful values for certain setups have ranged from 10 to 20us.
 // #define STEP_PULSE_DELAY 10 // Step pulse delay in microseconds. Default disabled.

+// Enable CoreXY kinematics
+// http://corexy.com/
+#define COREXY // Default disabled. Uncomment to enable.
+
 // ---------------------------------------------------------------------------------------

 // TODO: Install compile-time option to send numeric status codes rather than strings.
diff -Naur grbl-master//planner.c grbl-v08-corexy//planner.c
--- grbl-master//planner.c      2013-10-21 19:19:26.000000000 -0700
+++ grbl-v08-corexy//planner.c  2013-10-15 09:57:17.000000000 -0700
@@ -356,13 +356,30 @@

   // Compute direction bits for this block
   block->direction_bits = 0;
-  if (target[X_AXIS] < pl.position[X_AXIS]) { block->direction_bits |= (1<<X_DIRECTION_BIT); }
-  if (target[Y_AXIS] < pl.position[Y_AXIS]) { block->direction_bits |= (1<<Y_DIRECTION_BIT); }
+  #ifndef COREXY
+    if (target[X_AXIS] < pl.position[X_AXIS]) { block->direction_bits |= (1<<X_DIRECTION_BIT); }
+    if (target[Y_AXIS] < pl.position[Y_AXIS]) { block->direction_bits |= (1<<Y_DIRECTION_BIT); }
+  #else
+    if ((target[X_AXIS]-pl.position[X_AXIS]) + (target[Y_AXIS]-pl.position[Y_AXIS]) < 0) {
+      block->direction_bits |= (1<<X_DIRECTION_BIT);
+    }
+    if ((target[X_AXIS]-pl.position[X_AXIS]) - (target[Y_AXIS]-pl.position[Y_AXIS]) < 0) {
+      block->direction_bits |= (1<<Y_DIRECTION_BIT);
+    }
+  #endif
   if (target[Z_AXIS] < pl.position[Z_AXIS]) { block->direction_bits |= (1<<Z_DIRECTION_BIT); }

   // Number of steps for each axis
-  block->steps_x = labs(target[X_AXIS]-pl.position[X_AXIS]);
-  block->steps_y = labs(target[Y_AXIS]-pl.position[Y_AXIS]);
+  #ifndef COREXY
+    // default non-h-bot planning
+    block->steps_x = labs(target[X_AXIS]-pl.position[X_AXIS]);
+    block->steps_y = labs(target[Y_AXIS]-pl.position[Y_AXIS]);
+  #else
+    // corexy planning
+    // these equations follow the form of the dA and dB equations on http://www.corexy.com/theory.html
+    block->steps_x = labs((target[X_AXIS]-pl.position[X_AXIS]) + (target[Y_AXIS]-pl.position[Y_AXIS]));
+    block->steps_y = labs((target[X_AXIS]-pl.position[X_AXIS]) - (target[Y_AXIS]-pl.position[Y_AXIS]));
+  #endif
   block->steps_z = labs(target[Z_AXIS]-pl.position[Z_AXIS]);
   block->step_event_count = max(block->steps_x, max(block->steps_y, block->steps_z));

@@ -371,8 +388,13 @@

   // Compute path vector in terms of absolute step target and current positions
   float delta_mm[3];
-  delta_mm[X_AXIS] = (target[X_AXIS]-pl.position[X_AXIS])/settings.steps_per_mm[X_AXIS];
-  delta_mm[Y_AXIS] = (target[Y_AXIS]-pl.position[Y_AXIS])/settings.steps_per_mm[Y_AXIS];
+  #ifndef COREXY
+    delta_mm[X_AXIS] = (target[X_AXIS]-pl.position[X_AXIS])/settings.steps_per_mm[X_AXIS];
+    delta_mm[Y_AXIS] = (target[Y_AXIS]-pl.position[Y_AXIS])/settings.steps_per_mm[Y_AXIS];
+  #else
+    delta_mm[X_AXIS] = ((target[X_AXIS]-pl.position[X_AXIS]) + (target[Y_AXIS]-pl.position[Y_AXIS]))/settings.steps_per_mm[X_AXIS];
+    delta_mm[Y_AXIS] = ((target[X_AXIS]-pl.position[X_AXIS]) - (target[Y_AXIS]-pl.position[Y_AXIS]))/settings.steps_per_mm[Y_AXIS];
+  #endif
   delta_mm[Z_AXIS] = (target[Z_AXIS]-pl.position[Z_AXIS])/settings.steps_per_mm[Z_AXIS];
   block->millimeters = sqrt(delta_mm[X_AXIS]*delta_mm[X_AXIS] + delta_mm[Y_AXIS]*delta_mm[Y_AXIS] +
                             delta_mm[Z_AXIS]*delta_mm[Z_AXIS]);
支持CoreXY #286
作者

使用此补丁,反转掩码的行为如下:

$6=32 – 交换轴 X 和 Y 并反转两个方向
$6=64 – 交换轴 X 和 Y
$6=96 – 反转 X 和 Y 方向

Z 不受影响,可以用正常值取反。

支持CoreXY #286
作者

解决了位置报告的问题。

共享此类补丁以便其他人可以使用和改进的最佳方式是什么?

--- grbl-master/report.c    2013-08-25 15:08:08.000000000 -0300
+++ grbl-v8-corexy/report.c 2013-11-09 16:33:12.038022288 -0200
@@ -311,7 +311,14 @@
   // Report machine position
   printPgmString(PSTR(",MPos:")); 
   for (i=0; i<= 2; i++) {
-    print_position[i] = current_position[i]/settings.steps_per_mm[i];
+    #ifndef COREXY
+      print_position[i] = current_position[i]/settings.steps_per_mm[i];
+    #else
+      // Convert A and B to X and Y
+      if (i==0) { print_position[i] = ((current_position[0]+current_position[1])/2)/settings.steps_per_mm[i]; }
+      else if (i==1) { print_position[i] = ((current_position[0]-current_position[1])/2)/settings.steps_per_mm[i]; }
+      else { print_position[i] = current_position[i]/settings.steps_per_mm[i]; }
+    #endif
     if (bit_istrue(settings.flags,BITFLAG_REPORT_INCHES)) { print_position[i] *= INCH_PER_MM; }
     printFloat(print_position[i]);
     printPgmString(PSTR(","));
支持CoreXY #286

嗨,
太好了 :) 我想我也需要它,所以在接下来的几周内我应该测试它,也许可以帮助你 :)

支持CoreXY #286
作者

谢谢!
我的机器中仍然没有结束和归位停止,所以它可能无法工作。

支持CoreXY #286

但是你测试过吗?你有在 atmega 328p 上运行的固件吗?如果我读对了,marlin 只能在 arduino mega 上工作。

支持CoreXY #286
作者

是的,我已经测试过了,它在我的 CNC 路由器上运行。我只有 UNO,这就是我将此支持从 marlin 移植到 GRBL 的原因。现在 GRBL v0.8 可以用 corexy mechanics 控制 CNC

支持CoreXY #286

您可以分叉 grbl 并在那里进行更改吗?那会很好:)

支持CoreXY #286
作者

不知道是否有足够的更改来证明分叉的合理性。它只是一个小补丁,带有一个编译时选项来启用。
但是如果你没有编译环境,我可以提供我的 Hex 文件。

支持CoreXY #286

你好 zanderbier
Corexy 想测试系统,但没有构建环境。
你可以制作你的十六进制文件吗?非常感谢你。

支持CoreXY #286
作者

嗨,
这是一项正在进行的工作,但我上传到我的项目页面
https://github.com/zanderbier/papercut/blob/master/grbl-v08c-corexy.hex

请记住,我没有使用过限位开关,因此请确保只发送在您机器限制范围内的命令。

支持CoreXY #286

您好,
感谢您发布十六进制文件。

支持CoreXY #286

测试您的十六进制文件,但它不起作用。它不会发送“Grbl 0.8c [‘$’寻求帮助]”消息

支持CoreXY #286

做了更改并编译了我自己并且它有效:)

支持CoreXY #286
作者

太好了,我会检查文件并再次上传。

我已经完成了一台新机器,并将尝试使用硬限位开关修复此支持。也许下周我会尝试分叉并建议这个补丁。

支持CoreXY #286

你现在不能做叉子吗?这样我就可以更轻松地分析更改并进行更改:)

支持CoreXY #286
作者

好的,我今晚试试

支持CoreXY #286

如果你愿意,我可以做到

支持CoreXY #286
作者

好的,没问题……我还在学习使用这个 GIT.. 让我们开始吧。

支持CoreXY #286
作者

刚刚创建了 fork,将更新更改

支持CoreXY #286

明天我会再做一次:)

2014/1/9 Aleck Zander notifications@github.com

刚刚创建了 fork,将更新更改


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ /issues/286 #issuecomment-31952457

支持CoreXY #286
作者

添加了更改。现在将致力于归巢

支持CoreXY #286

你应该创建一个 bracnh 来处理它。我正在准备一个回购协议,以便我们可以在 ti 上工作 :)

支持CoreXY #286

让我们在这里工作:https ://github.com/metropt/grbl/tree/CoreXY-support它是基于 dev 的分支

支持CoreXY #286

我认为我们需要审查它ht​​tps://github.com/metropt/grbl/blob/CoreXY-support/report.c#L334因为我认为这不是最正确的方法,因为看起来我们正在打印正确的 XY,但系统 XY 不正确。

支持CoreXY #286
作者

伟大的!我还没有研究开发分支,所以我将有一些时间来适应代码。

事实上,在这部分报告中,我只是做了一个快速解决方案以转移到下一个问题并且必须对其进行审查。
可以删除循环。
系统XY其实就是A和B变量,转换成X和Y来打印。

谢谢

支持CoreXY #286

我会在几个小时内测试我的更改,只是为了测试我是否没有任何错误。

我们不应该使用 corexy 方程而不是在报告中更新 current_position 吗?

支持CoreXY #286
作者

我认为这样我们在移动电机时使用更少的 CPU。系统 XY 的 A 和 B 值在规划器函数中计算了一次,即电机将移动的实际值。
Report是在不太关键的时候调用的,不会对性能有影响,所以我们可以做计算,再还原为XY。

支持CoreXY #286
作者

但它是我的 opnion.. :-)

支持CoreXY #286
成员

我刚刚开始对 CoreXY 进行一些研究,以了解更多相关信息。对于 3D 打印、激光切割和小型路由器等轻负载应用来说,它似乎很有前途。对于具有大量横向负载的大型木刨机而言,情况并非如此。这是现在最流行/接受的方法还是快速廉价的 2D 运动?

我问是因为我很好奇 CoreXY/H-Bot 支持是否应该作为可配置选项提供。

支持CoreXY #286
作者

@chamnit,我不知道它是否最受欢迎,但当我看到它时我喜欢这个解决方案,并且当我开始一个新项目时我想使用它。它是一个小型路由器,只需用刀片切割纸张,因此不会涉及太多力量。

我已经看到 GRBL 非常有用,所以我考虑调整它以支持 CoreXY 及其现在的工作。

如果它作为一个编译选项保留,对项目来说是一个很好的特性。

支持CoreXY #286
成员

@metropt: 大多数情况下一切正常,但我只需要测试它并重构一些代码。

支持CoreXY #286

大家好,
我对这个话题非常感兴趣,并且已经在自己进行一些必要的更改方面取得了一些进展,但是我不想重复工作。

对于我自己的需要,非常希望在 .9 Master 中获得 corexy 运动支持。

阅读有关此问题的帖子并查看https://github.com/metropt/grbl,我不确定我是否完全理解 corexy 支持的当前状态,因为它与 metropt/grbl 分支和 . 9师傅所以我有几个问题:

@chamnit
首先,感谢您为 GRBL 所做的所有工作!

话虽如此,您在 CoreXY 支持方面所做的工作;这会应用于 .9 master 还是 metropt fork?

另外,我有 2 台 corexy 机器,目前正在运行一段时间前从 Metropt 分支中提取的 .8c 的破解版本。如果有更新的代码可以从测试或额外审查中获益,我将很乐意审查和/或完成它的步伐。请让我知道您是否可以提供当前状态的初步代码,如果可以,我可以从哪里提取它。

谢谢你!

支持CoreXY #286

我关注这个问题已经有一段时间了,很想看看你们在做什么(指的是叉子,无论什么?). 前段时间我试过@zanderbier的叉子,它工作得很好。.9 版本会很棒

支持CoreXY #286

我使用 .9 版本的叉子有问题。如果您发送一批
命令,它会阻止,这是一个 .9 问题,所以我不知道这个问题是否
已解决,但请等待@chamnit版本 :)

2014-11-24 17:52 GMT+00:00 Ciro S. Costa notifications@github.com

我关注这个问题已经有一段时间了,很想看看你们
在做什么(指的是叉子,随便什么 [图片:?]).
前段时间我试过@zanderbier https://github.com/zanderbier的分支
,它运行良好。.9 版本会很棒


直接回复此电子邮件或在 GitHub
#286(评论)上查看。

支持CoreXY #286

嘿,我只是想宣布/添加我对 CoreXY 支持的批准,因为我计划在接下来的几天内开发 CoreXY 2D 控件。

另外,当我们这样做时,我想感谢@chamnit个人(嗯,有点),感谢 grbl 的所有努力。您确实为我(可能还有很多其他人)省去了很多艰苦的工作。还要感谢所有其他投入时间/帮助改进 grbl 的人。干得好你们所有人。:-)

亲切的问候,
德尔菲诺

支持CoreXY #286

请不要为 corexy A 和 B 命名轴。
在 CNC 上,A 和 B 是带角度增量的旋转轴,而不是线性毫米/英寸单位。
我知道理论页面状态 deltaA=deltaX+deltaY
正确的表示应该使用 X’ 和 Y’ 来表示转换后的 X 和 Y
deltaX’=deltaX+deltaY
并且请保持 0.8 分支(MIT 许可)GPL 免费。
甚至新 fork 的 motion_control.c 也是从 0.9 复制的,因为它里面有 gpl 通知。
在 MIT 代码中复制 marlin (GPL) 代码也是如此。这是非法的,这样的代码永远不
应该正式合并到官方 0.8 分支中。
使用http://corexy.com/theory.html公式 。
转换应该在 gc_execute_line 中在“/* Execute Commands:”之前
和在 report.c 中进行。软限制采用 X’ 和 Y’ 格式

有人可以测试这个普通的 grbl 版本吗?
默认编译,除了两个 mods
没有 home lock
添加 $@ 命令
$@0 恢复探测
$@1 对探头使用 x 轴限位开关
$@2 对探头使用 y 轴限位开关
$@255 对探头使用所有轴限位开关
您能否验证使用限位开关进行探测是否有效。
如果需要以不同的方式编译某些内容,请告诉它。
菲尔

支持CoreXY #286

@cri-s
我在假期期间离开了我的电脑,所以对于您要求测试 CoreXY 代码的请求的延迟响应,我深表歉意。无论如何,我
很乐意在我的 coreXY 机器上测试固件,但是如果你能
提供源代码的副本以便我自己编译,我将不胜感激。

谢谢,
Techrat

支持CoreXY #286

你好@chamnit
你能分享一下你有什么吗?

谢谢

支持CoreXY #286

http://www.datafilehost.com/d/005634a4
报告标志($10)的第 7 位用于在正常或 corexy 坐标显示之间切换。
检查哪些有效,哪些无效,然后我修复它。

支持CoreXY #286

It has home cycle implemented?
On 9 Jan 2015 14:23, “cri-s” notifications@github.com wrote:

http://www.datafilehost.com/d/005634a4

喜欢 (0)