Contact me: hankecnc@gmail.com

传递 g 代码数据 #284

推推 grbl 3年前 (2023-01-21) 161次浏览

关闭
Anachronicman 打开了这个问题 2013 年 10 月 29 日 · 13条评论
关闭

传递 g 代码数据#284

Anachronicman 打开了这个问题 2013 年 10 月 29 日 · 13条评论

注释

传递 g 代码数据 #284

您好,
我正在使用 GBRL 来控制 2 轴激光雕刻机(x 轴和 y 轴)。

我想做的是将 z 轴 (0-255) 的 g 代码值“直通”到 PWM 输出,这样我就可以控制模拟激光驱动器的强度。

谁能指出我是否/如何实现这一目标的方向。我的编程技能有些有限,但任何输入肯定会有所帮助。

谢谢,
上午

传递 g 代码数据 #284
贡献者

@Anachronicman我目前正在为适合您情况的主轴实施 PWM。

我已经完成了编码,但我还没有测试。
唯一的问题是我们不得不使用 Y 限位开关销。

你使用限位开关吗?
您有兴趣测试代码吗?

传递 g 代码数据 #284

嗨 EliteEng,
我没有使用限位开关,我很想测试代码。

谢谢,
上午

传递 g 代码数据 #284

我还发现这些人修改了 GBRL 以添加激光强度参数:
http ://www.lasersaur.com/manual/gcode

传递 g 代码数据 #284
贡献者

我已将更改推送到我的仓库https://github.com/EliteEng/grbl主分支

您可以使用 M03 S(值 0-255)设置激光强度,其中 255 为 100%,然后激光关闭为 M05

让我知道进展如何,我将为 grbl 回购创建一个拉取请求

传递 g 代码数据 #284
成员

您可能已经考虑过这一点,但通常应针对当前实际进给速率调整激光强度,因为由于加速度管理,它与标称进给速率不同。这不是很难做到,但这是我知道 lasersaur 人用 grbl 做的事情之一。

传递 g 代码数据 #284
成员

@simen是正确的。对于激光切割机,您可能需要考虑自适应激光强度。如果我没记错的话,激光切割机是 2 轴机器。如果是这样,您可以劫持 Z 轴输出以为激光器提供经过速率调整的 PWM 信号,而不必大惊小怪,我想。对于铣床,这不是严格的要求,设置静态 PWM 信号就可以了。

lasersaur 项目也是多年前从 grbl 分叉出来的。我不确定他们的状态是什么,以及他们整合了多少最近的发展,如果有的话。

传递 g 代码数据 #284
成员

另一件事,如果机器加速度设置得足够高并且调整了结偏差参数以使 grbl 在拐角处不会减慢太多,自适应激光强度可能不是问题。这将使 grbl 几乎以恒定的进给速率运行。

传递 g 代码数据 #284

感谢大家的反馈。

EliteEng:您的代码似乎运行良好,为我提供了正确的调制。一旦我的模拟驱动电路设置好,我很快就会在我的系统中尝试它。

simen & chamnit:谢谢你的意见。我没有考虑过这个,但现在会!

传递 g 代码数据 #284

它允许使用伺服作为主轴吗?

传递 g 代码数据 #284

嗨 EliteEng

我开发了一个 CNC 泡沫切割机,目前使用 grbl 来操作它。我发现主轴修改很棒,因为我可以使用这个模拟输出来控制线温度,但我有两个问题:

  1. 可以使用 Z 限位销而不是 Y,因为我使用的是 xy 而不是 Z,因为机器只使用 xy 坐标。
  2. 可以在 S### G 代码中输入 0 到 450 之间的值。那是因为电线的温度在 0-450°C 之间。

抱歉英语不好,我是从阿根廷写的!

问候!

传递 g 代码数据 #284
成员

@lucasvass89:为了回答您的问题,(1) 不,我们只能使用 Y 限制当前使用的引脚,因为硬件 PWM 仅输出到该引脚。还有其他硬件 PWM 引脚,但这个是最不引人注目的。如果您需要交换它们并且不能重新连接您的硬件,您可以在 cpu_map.h(旧版本中的 pin_map.h)中重新定义 Y-limit 引脚并重新编译固件。

(2) 在新的v0.9c开发分支中,可以指定主轴值的上限和下限是多少,以及它们如何对应256个电压等级。我会等到我们将 v0.9c 推到边缘。这将表示它几乎可以用于一般用途。否则小心行事。那里仍然有一些错误。

传递 g 代码数据 #284
贡献者

@lucasvass89如果你改变 pin_map.h

#define SPINDLE_MAX_RPM 255

#define SPINDLE_MAX_RPM 450

它只是一个 8 位(256 个值)计时器,因此这意味着它可以精确到大约 2 度。
只是记得这个版本使用的是 16 位定时器,所以它是准确的。(v0.9c 使用的是 8 位定时器)

使用 Limit Pin,你介意发布你的 pin_map.h 的一部分吗,这样我就可以看到你使用的是哪个版本。
在第 55 行到第 66 行之间,它们应该看起来像这样

#ifdef VARIABLE_SPINDLE // Y LImit has been disabled to make room for the Spindle PWM
// NOTE: All limit bit pins must be on the same port
#define LIMIT_DDR           DDRB
#define LIMIT_PIN           PINB
#define LIMIT_PORT      PORTB
#define X_LIMIT_BIT     1 // Uno Digital Pin 9
#define Y_LIMIT_BIT     1 // Uno Digital Pin 9
#define Z_LIMIT_BIT     3 // Uno Digital Pin 11
#define LIMIT_INT           PCIE0 // Pin change interrupt enable pin
#define LIMIT_INT_vect           PCINT0_vect
#define LIMIT_PCMSK     PCMSK0 // Pin change interrupt register
#define LIMIT_MASK      ((1<<X_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits

如果我们把它改成这样

#ifdef VARIABLE_SPINDLE // Y LImit has been disabled to make room for the Spindle PWM
// NOTE: All limit bit pins must be on the same port
#define LIMIT_DDR           DDRB
#define LIMIT_PIN           PINB
#define LIMIT_PORT      PORTB
#define X_LIMIT_BIT     1 // Uno Digital Pin 9
#define Y_LIMIT_BIT     3 // Uno Digital Pin 11
#define Z_LIMIT_BIT     3 // Uno Digital Pin 11
#define LIMIT_INT           PCIE0 // Pin change interrupt enable pin
#define LIMIT_INT_vect           PCINT0_vect
#define LIMIT_PCMSK     PCMSK0 // Pin change interrupt register
#define LIMIT_MASK      ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)) // All limit bits

然后将 Y 限制引脚移动到数字引脚 11

传递 g 代码数据 #284

是否可以在 v8 的主轴上使用 pwm?

喜欢 (0)