注释
你能更具体地说明你想做什么吗?我看不到当前位置如何与模拟信号交互? 反正… grbl 将它的当前位置存储在 sys_position 数组中(它是一个 int32_t 数组,它的单位是机器步骤)。它由步进器 ISR 更新,因此您必须小心访问它。我就是这样做的;但是,您可能需要调整此代码以满足您的应用程序: ` 返回 system_convert_axis_steps_to_mpos(current_position, axisIndex); static inline float readAxisPosition_WorkPosition(uint8_t axisIndex) float workCoordanateOffset = gc_state.coord_system[axisIndex]+gc_state.coord_offset[axisIndex]; 返回 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 运行)。 |
首先感谢您的回复。我的“ XY 问题”是我将使用 grbl 在两个平移台上定位传感器,我将流式传输预设 G 代码。传感器数据是在 DAQ 上获取的,它只读取模拟,就像你恰当地放置的那样,所以我想连接一个 DAC 以转换一些已知电压间隔的位置,然后我的 DAQ s/w 可以解释。我认为您已经通过提供入门指南帮助了我,我会尝试一下,如果它有效,我会让您知道。现在知道这个问题,如果你能想到更好的解决方案,请告诉我。 |
嗯…请问传感器是什么?或者,更重要的是,Arduino 的内置 ADC 是否是一个足够的数据采集系统,或者实际上是否需要外部设备? |
我正在使用外部 DAQ (Datascan 7320),这就是为什么我需要知道传感器从中获取数据的位置,因此要将数据与位置同步,我想尝试这样做。DAQ 软件可以识别离散电压并将其转换为位置,因此在 DAQ 端对事物进行分类。 我已经要求太多了,但我无法实现你给的代码,我想在每行 Gcode 的末尾执行这个位置输出脚本,怎么办? |
库存的、开箱即用的 Grbl 不太适合这个;但是我确实添加了一个扩展接口,用于将自定义 M 代码添加到我正在处理的版本中。我希望尽快发布预测试版,所以如果您能等几天,我可能会为您提供解决方案。 |
您可以使用 pwm 输出 10 位电压,只需一个低通滤波器、电容和电阻。使用数字输出指示数据有效,另一个指示 pwm 值是 x 还是 y。如果您也想要 z,请使用 2 个不同的电阻器和一个 ADC 输入来检查数字输出的 4 个状态。Britt <notifications@github.com> schrieb am Sa.,2018 年 11 月 17 日,20:43:
|
嗨 Akym, 您是否考虑过任何其他可以为您提供解决方案的途径 有两种类型的人使用这个论坛,一种是机器人技术和编程,另一种是技术性更强的人,他们想要制造一台铣床来制造东西,因为他们技术性更强。很难向程序员解释您的硬件要求。我和他们一起工作了很多年。我们一直在谈论 IBM 286 和 Acorn 模型 B 程序员这一代。 我还在等待我可以在谷歌中输入 grbl/gnea 的那一天,它说使用这个 M0 任何 breakout board,从 git 下载代码(这里)然后你关闭。到目前为止,关于基于 Uno 的 GRBL 的大量信息,但 gnea 仍然存在于编码器的世界中。我们当中更机械化的人想要更多的功能、选项和玩具,并希望升级会像魔法一样——控制器将需要对电子设备进行全面检修才能与 3v 一起工作,并将许多外围组件暴露在外部高频噪声中。 |
好吧,鉴于他确实想要模拟输出;atmega 上的 ADC 对他的传感器来说不够好;也许其中一个或几个对他有用: |
如果他的项目必须有模拟输出,并且他考虑了从 grbl 中获取坐标的所有其他选项,那么 MCP4725 是完美的选择,并且可以轻松配置为使用 I2C 引脚。我想甚至 Uno 也可以重新配置以允许与 An4 和 An5 接口。我自己正在使用一个为我的变频驱动器输出主轴速度。我不知道他是否会遭受接收值之间的时间延迟。我知道他建议使用模拟输出,但值得找出他为什么选择使用模拟值显示坐标。为了从 grbl 获得主轴输出,我已经走上了 pwm 到电压转换的道路,输出主轴速度的代表性频率(不是 pwm),然后使用脉冲和音调草图等来读取频率。可以这么说,我终于从马嘴里得到了数据。它对 grbl 的操作没有损害。 |
我仍然不知道有问题的传感器到底是什么……所以我不知道是否需要使用他目前拥有的 DAQ 系统,或者 Arduino ADC 是否可以做到。如果 Arduino ADC 可以做到,那么将传感器馈送到 RAMPS 卡的模拟输入之一并将数据流式传输到 SD 卡是一件相当简单的事情;或者直接从串口发送出去。 编写自定义 M 代码来执行此操作(使用我正在处理的 grbl-mega 分支)并不难。 @akym – 也许你可以明确说明你使用的是哪个传感器,这样我们就可以查看它的数据表?或者如果它是一些没有数据表的自定义传感器,你能描述它的输出吗(即,它是电压输出,电流环路输出,需要什么采样率 – 我认为不多,考虑到 Datascan 的规格7320 – 有多少频道需要数字化等)。 |
感谢很多人提供宝贵的反馈。我正在调查你们发送的所有资源。 所讨论的传感器是定制的霍尔效应传感器,安装在 2 个线性平移级上,输出为模拟电压(0 至 +10V),将在外部数据采集系统(DAQ)上采集。在任何给定实例中,只会安装一个传感器,因此它将连接到一个通道上的 DAQ。我们已经在使用相当多的通道,计划是用 16 位获取它,DAQ 自动缩放为 -10V 到 +10V。当前采样/写入频率为 1/14。位置信号应发送到 2 个不同的通道,并将以 14 位采集。X 和 Y 坐标只有 40 个离散位置,所以我认为分辨率对我的应用程序来说不是问题。正如我之前提到的, @bdurbrow我会尝试自己实施,如果没有成功,我会等待几天,等待您的解决方案。 |
好吧,FWIW 我刚刚在这里上传了我的 grbl 叉子的预测试版(一直向下滚动到底部): 我认为通过使用分压器,您可以使用 atmega2560 上的内置 ADC;AUX1 上的 RAMPS 卡上有两个空闲的模拟引脚。然后您可以构建一个自定义 M 代码来对您的传感器进行采样 – 请查看我上面链接的预测试版中的 grbl_expansion_interface.h。为了读取 ADC,我在 pins_arduino_mega.h 中也有几个函数。serialprint.h 中有从串口发送数据的函数。 |
我正在尝试浏览代码,我想扩展 grbl 以输出 DAQ 的当前 X、Y、Z 位置,我试图找到代码,但我是 grbl 的新手,找不到它,如果有人做过的话类似的东西,请让我指出我需要在哪里做。
扩展问题(与 grbl 无关):即使我找到通过 DAC 转换器将当前位置连续流式传输到 DAQ 的代码,它会妨碍 grbl 的速度或执行吗?