开源改变世界

需要帮助获取 DAQ 的当前 XYZ 位置 #560

推推 grbl 3年前 (2023-01-22) 129次浏览

关闭
akym 打开了这个问题 2018 年 11 月 15 日 · 12条评论
关闭

需要帮助获取 DAQ 的当前 XYZ 位置#560

akym 打开了这个问题 2018 年 11 月 15 日 · 12条评论

注释

需要帮助获取 DAQ 的当前 XYZ 位置 #560

我正在尝试浏览代码,我想扩展 grbl 以输出 DAQ 的当前 X、Y、Z 位置,我试图找到代码,但我是 grbl 的新手,找不到它,如果有人做过的话类似的东西,请让我指出我需要在哪里做。
扩展问题(与 grbl 无关):即使我找到通过 DAC 转换器将当前位置连续流式传输到 DAQ 的代码,它会妨碍 grbl 的速度或执行吗?

需要帮助获取 DAQ 的当前 XYZ 位置 #560

你能更具体地说明你想做什么吗?我看不到当前位置如何与模拟信号交互?

反正…

grbl 将它的当前位置存储在 sys_position 数组中(它是一个 int32_t 数组,它的单位是机器步骤)。它由步进器 ISR 更新,因此您必须小心访问它。我就是这样做的;但是,您可能需要调整此代码以满足您的应用程序:

`
static inline float readAxisPosition_MachinePosition(uint8_t axisIndex)
{
int32_t current_position[N_AXIS]; // 复制系统位置变量的当前状态
uint8_t oldSREG = SREG;
cli();
#ifdef COREXY
memcpy(current_position,sys_position,sizeof(sys_position));
#else
current_position[axisIndex] = sys_position[axisIndex];
#endif
SREG = oldSREG;

返回 system_convert_axis_steps_to_mpos(current_position, axisIndex);
}

static inline float readAxisPosition_WorkPosition(uint8_t axisIndex)
{
int32_t current_position[N_AXIS]; // 复制系统位置变量的当前状态
uint8_t oldSREG = SREG;
cli();
#ifdef COREXY
memcpy(current_position,sys_position,sizeof(sys_position));
#else
current_position[axisIndex] = sys_position[axisIndex];
#endif
SREG = oldSREG;

float workCoordanateOffset = gc_state.coord_system[axisIndex]+gc_state.coord_offset[axisIndex];
如果 (axisIndex == TOOL_LENGTH_OFFSET_AXIS)
workCoordanateOffset += gc_state.tool_length_offset;

返回 system_convert_axis_steps_to_mpos(current_position, axisIndex) – workCoordanateOffset;
}

`

在回答您的其他问题时:是的,流式传输会减慢 grbl 的速度……多少以及是否重要取决于您的操作方式以及应用程序的参数。

我建议多花几美元购买 Arduino Mega 2560(克隆版在 eBay 上的售价低于 8 美元,但如果您负担得起,我建议您购买正品,因为硬件销售收入有助于支持Arduino 项目)。

这里有 Mega 的端口:https ://github.com/gnea/grbl-Mega

该端口还支持 RAMPS 卡,FWIW …

如果速度很关键,我可能会建议通过 SPI 进行流式传输;然后在另一个处理器上进行二次处理。或者,捕获进入步进驱动器的步进和方向脉冲,并在另一个处理器上管理一组单独的累加器(最好是快速的累加器,如 Arduino Zero – 以 48Mhz 运行的 SAMD21,或 Adafruit Metro M4 – 以 48Mhz 运行的 SAMD51 120Mhz;请注意,运行 grbl 的处理器可能是 5V 板,而那些 SAMD 板以最大 3.3v 运行)。

需要帮助获取 DAQ 的当前 XYZ 位置 #560
作者

首先感谢您的回复。我的“ XY 问题”是我将使用 grbl 在两个平移台上定位传感器,我将流式传输预设 G 代码。传感器数据是在 DAQ 上获取的,它只读取模拟,就像你恰当地放置的那样,所以我想连接一个 DAC 以转换一些已知电压间隔的位置,然后我的 DAQ s/w 可以解释。我认为您已经通过提供入门指南帮助了我,我会尝试一下,如果它有效,我会让您知道。现在知道这个问题,如果你能想到更好的解决方案,请告诉我。
我肯定会在 Arduino Mega 上测试这个,根据你的建议,我一定会买正品。

需要帮助获取 DAQ 的当前 XYZ 位置 #560

嗯…请问传感器是什么?或者,更重要的是,Arduino 的内置 ADC 是否是一个足够的数据采集系统,或者实际上是否需要外部设备?

需要帮助获取 DAQ 的当前 XYZ 位置 #560
作者
阿金 评论了 2018 年 11 月 16 日  

我正在使用外部 DAQ (Datascan 7320),这就是为什么我需要知道传感器从中获取数据的位置,因此要将数据与位置同步,我想尝试这样做。DAQ 软件可以识别离散电压并将其转换为位置,因此在 DAQ 端对事物进行分类。

我已经要求太多了,但我无法实现你给的代码,我想在每行 Gcode 的末尾执行这个位置输出脚本,怎么办?

需要帮助获取 DAQ 的当前 XYZ 位置 #560

库存的、开箱即用的 Grbl 不太适合这个;但是我确实添加了一个扩展接口,用于将自定义 M 代码添加到我正在处理的版本中。我希望尽快发布预测试版,所以如果您能等几天,我可能会为您提供解决方案。

需要帮助获取 DAQ 的当前 XYZ 位置 #560
危机 评论了 2018 年 11 月 19 日 通过电子邮件
需要帮助获取 DAQ 的当前 XYZ 位置 #560

嗨 Akym,
这是我从 grbl
https://forum.arduino.cc/index.php?topic=578683.0
中获取信息的解决方案 加载 pwm 输出以便您可以使用 daq 测量它们会给您带来很多痛苦。您需要缓冲输出,以便测量更强的信号。我不是 100% 确定你为什么要通过产生模拟电压来获取坐标,分辨率将是垃圾。
在我的书中测量 PWM 也是一个非常愚蠢的想法,我尝试过它来获得主轴速度,但它太不稳定了。或者也许这是我的代码。

您是否考虑过任何其他可以为您提供解决方案的途径

有两种类型的人使用这个论坛,一种是机器人技术和编程,另一种是技术性更强的人,他们想要制造一台铣床来制造东西,因为他们技术性更强。很难向程序员解释您的硬件要求。我和他们一起工作了很多年。我们一直在谈论 IBM 286 和 Acorn 模型 B 程序员这一代。
幸运的是 Brit 听起来很狡猾,他知道新的微处理器兼容 3.3v 而不是 5v。
在 MSpaint 之类的绘图程序中绘制草图/框图,以便我们了解您想要实现的目标 – 我得到的印象是您想与编码器同步,问题是您无法在飞你只会看到它错过的步骤。作为一个疯狂的想法,您可以拦截消息并发送带有正确位置反馈的新构造消息。

我还在等待我可以在谷歌中输入 grbl/gnea 的那一天,它说使用这个 M0 任何 breakout board,从 git 下载代码(这里)然后你关闭。到目前为止,关于基于 Uno 的 GRBL 的大量信息,但 gnea 仍然存在于编码器的世界中。我们当中更机械化的人想要更多的功能、选项和玩具,并希望升级会像魔法一样——控制器将需要对电子设备进行全面检修才能与 3v 一起工作,并将许多外围组件暴露在外部高频噪声中。
我尝试跟随趋势,但它每月从 mega 发展到 M0 甚至更高,没有任何开源硬件想法来支持它。

需要帮助获取 DAQ 的当前 XYZ 位置 #560

@MeJasonT

好吧,鉴于他确实想要模拟输出;atmega 上的 ADC 对他的传感器来说不够好;也许其中一个或几个对他有用:

https://www.adafruit.com/product/935

需要帮助获取 DAQ 的当前 XYZ 位置 #560

如果他的项目必须有模拟输出,并且他考虑了从 grbl 中获取坐标的所有其他选项,那么 MCP4725 是完美的选择,并且可以轻松配置为使用 I2C 引脚。我想甚至 Uno 也可以重新配置以允许与 An4 和 An5 接口。我自己正在使用一个为我的变频驱动器输出主轴速度。我不知道他是否会遭受接收值之间的时间延迟。我知道他建议使用模拟输出,但值得找出他为什么选择使用模拟值显示坐标。为了从 grbl 获得主轴输出,我已经走上了 pwm 到电压转换的道路,输出主轴速度的代表性频率(不是 pwm),然后使用脉冲和音调草图等来读取频率。可以这么说,我终于从马嘴里得到了数据。它对 grbl 的操作没有损害。

需要帮助获取 DAQ 的当前 XYZ 位置 #560

@MeJasonT

我仍然不知道有问题的传感器到底是什么……所以我不知道是否需要使用他目前拥有的 DAQ 系统,或者 Arduino ADC 是否可以做到。如果 Arduino ADC 可以做到,那么将传感器馈送到 RAMPS 卡的模拟输入之一并将数据流式传输到 SD 卡是一件相当简单的事情;或者直接从串口发送出去。

编写自定义 M 代码来执行此操作(使用我正在处理的 grbl-mega 分支)并不难。

@akym – 也许你可以明确说明你使用的是哪个传感器,这样我们就可以查看它的数据表?或者如果它是一些没有数据表的自定义传感器,你能描述它的输出吗(即,它是电压输出,电流环路输出,需要什么采样率 – 我认为不多,考虑到 Datascan 的规格7320 – 有多少频道需要数字化等)。

需要帮助获取 DAQ 的当前 XYZ 位置 #560
作者

感谢很多人提供宝贵的反馈。我正在调查你们发送的所有资源。

所讨论的传感器是定制的霍尔效应传感器,安装在 2 个线性平移级上,输出为模拟电压(0 至 +10V),将在外部数据采集系统(DAQ)上采集。在任何给定实例中,只会安装一个传感器,因此它将连接到一个通道上的 DAQ。我们已经在使用相当多的通道,计划是用 16 位获取它,DAQ 自动缩放为 -10V 到 +10V。当前采样/写入频率为 1/14。位置信号应发送到 2 个不同的通道,并将以 14 位采集。X 和 Y 坐标只有 40 个离散位置,所以我认为分辨率对我的应用程序来说不是问题。正如我之前提到的,

@bdurbrow我会尝试自己实施,如果没有成功,我会等待几天,等待您的解决方案。

需要帮助获取 DAQ 的当前 XYZ 位置 #560

好吧,FWIW 我刚刚在这里上传了我的 grbl 叉子的预测试版(一直向下滚动到底部):
gnea/grbl-Mega#77

我认为通过使用分压器,您可以使用 atmega2560 上的内置 ADC;AUX1 上的 RAMPS 卡上有两个空闲的模拟引脚。然后您可以构建一个自定义 M 代码来对您的传感器进行采样 – 请查看我上面链接的预测试版中的 grbl_expansion_interface.h。为了读取 ADC,我在 pins_arduino_mega.h 中也有几个函数。serialprint.h 中有从串口发送数据的函数。

喜欢 (0)