开源改变世界

使用代码功能试验工具更换器 #845

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

打开
MeJasonT 打开了这个问题 2020 年 4 月 1 日 · 6条评论
打开

使用代码功能试验工具更换器#845

MeJasonT 打开了这个问题 2020 年 4 月 1 日 · 6条评论

注释

使用代码功能试验工具更换器 #845

我想让数字引脚等待输入(pulseIn)说高电平,一旦信号变回低电平,我想将接收引脚的状态更改为输出,然后传输脉冲。

这个想法是使用 1 个数字引脚,就像运行 GRBL 的 Arduino 和工具更换器之间的握手一样,
这个想法是让 GRBL 传输一个固定持续时间的脉冲,比如 2 秒(不重要,只要足够长的时间让工具更换器识别它) .

接收端 Arduino(引脚)然后从输入变为输出,然后传输连续脉冲,直到代码中的布尔状态发生变化,从而再次关闭输出。

GRBL Arduino 将被编码为仅传输 2 秒脉冲,然后切换为收听。

这样,如果需要更换工具,Grbl 会传输一个信号,然后恢复为监听引脚,只要信号为高,例如,它就知道工具更换器正忙。一旦工具更换器完成其任务,它会将信号驱动为低电平,然后再次成为输入引脚。看到这个销钉变化后,GRBL 继续进行铣削操作。

UNO版的GRBL只有1个备用pin,恰好是A4。

总体规划。

整个项目可能看起来像发送到 grbl 的串行命令将使用虚拟串行端口应用程序桥接到第二个 USB。换刀器 arduino 将监听传输的 gcode 中的换刀指令,并解析出工具命令 M6 和 T*(* = 工具编号)
这不能引发换刀,因为读入 GRBL 缓冲区的值意味着它没有完成它的所有操作只是因为它更改了工具更换指令,并且需要在准备就绪时启动操作 – 工具更换器需要告诉 GRBL 它已完成。
随着代码的推进,M6 T* gcode 将告诉工具更换器 arduino 它期望加载什么工具,因此当它接收到 go/active 脉冲时,它将使用该信息来提供正确的工具。
其余的将是用于伸出和缩回的换刀电机的伸出和缩回传感器,用于查看工具清除和工具加载的传感器,限位开关和工具位置 ID 传感器(检查工具与主轴对齐而不是半翘起。可能是编码器为工具编号/位置提供皮带和支架,一旦归位,步进器应该能够知道它在哪里,但如果它丢失步骤,可能无法提供正确的工具,并且会发生大屠杀。
重置引脚将与 grbl 菊花链arduino 所以任何警报都会终止两个 Arduinos 上的操作。
@chamnit 我很想知道您的意见,尤其是步进电机代码。我的计划是尝试使用 accelstepper,因为我不知道如何剥离和使用高效快速的 GRBL 步进代码/例程。ARM 构建似乎仍未成为构建您自己的硬件的大型 DIY 项目,因此我暂时坚持使用 Atmega 328/Uno 版本。每次我搜索新的 ARM 版本时,我都会遇到那些要么为更新的、更不同的处理器编写代码,要么在所有用户都用完它之前才设法运行一个,就像 UNO 的情况一样。或者意味着购买新处理器的开发板并且仍然没有任何硬件指导。好消息是 Linux 程序员仍然是肛门的,认为并行端口仍然有未来,认为我让他们要求 USB 版本让他们不高兴。哈哈。

使用代码功能试验工具更换器 #845

很抱歉不请自来就插在这里。

你描述的肯定是可行的。在I2C接口等地方的ATmega上也使用了类似的机制。它的工作原理是将输出变为“集电极开路”模式。

为避免输出冲突问题,该机制通常设置为低电平有效信号,如下所示(在两个控制器上)。

set the data output register to "0"
turn on the pin's internal pull up resistor (or use an external one)
send the desired signal to the DDR control for the pin
	a "1" on DDR turns the output off - pull up will pull output high
	a "0" on DDR turns the output on - data output register "0" drives output low

那么协议是:

  1. GRBL 控制器在 X 时间内将输出拉低(将 DDR 设置为“0”)。
  2. 换刀控制器必须通过将其输出拉低(将 DDR 设置为“0”)来响应低信号。换刀控制器必须在 X 时间内响应。
  3. 在时间 X 之后,GRBL 控制器释放信号(将 DDR 设置为“1”)并读取数据(在引脚上,而不是数据输出寄存器,这里没有什么特别的,这就是 ATmega 的工作方式)并等待信号为低. (如果工具更换控制器没有足够快地返回,这里需要一个超时来中止工作)
  4. 当工具更换完成时,工具更换控制器释放输出(将 DDR 设置为“1”)以再次拉高。
  5. 当 GRBL 控制器看到数据引脚变高时,它会继续运行。

请注意,控制器在固有的嘈杂电气环境中工作。内部上拉可能不足以在所有这些噪声中保持高水平。可能需要更强的外部上拉(和/或电容滤波器)。

该方案不依赖于接触该引脚的 DDR 寄存器的 GRBL 代码的其他部分。如果它是“未使用的”,那么什么都不应该,但我对代码不够熟悉,无法确定。

祝你的项目好运。

退回潜伏者模式…

使用代码功能试验工具更换器 #845
作者

好吧,紧张,
你不是在跳我的朋友,非常欢迎你。
我正在阅读这个主题,感谢您提供的信息。

使用代码功能试验工具更换器 #845

我的 32 位端口支持可选工具表和将 ATC 代码挂接到 grbl 核心:

https://github.com/terjeio/grblHAL/blob/cdab733cae58b598ecc849a01008a5157ad93bcd/grbl/hal.h#L173-L174

核心处理 T 和 M6/M61 命令的解析,并根据需要将调用分派到入口点——不需要“中间人”。我一直在修补 ATC 一段时间,使用一个单独的控制器来处理机械和 I2C 来发出命令/读回状态。

使用代码功能试验工具更换器 #845

这可能是一个更好的解决方案。代码中的简短搜索显示 Arduino A4 为 COOLANT_MIST 或 COOLANT_FLOOD,具体取决于是否启用了双轴模式。无论哪种方式,似乎都在使用 A4(Protoneer CNC shield 的 cpu_map.h)。或者,要将 A4 用于 ATC,则需要禁用这些其他功能,以免它们产生干扰。另一种选择是禁用 I2C 并将其中一个引脚用于单线握手协议。

使用代码功能试验工具更换器 #845

哎呀。罢工最后的选择。我忘记了 A4 和 A5 已经与 I2C 共享,所以无论哪种方式,它们实际上都是相同的引脚。A5 用于探针输入,因此它也不可用。所以最重要的是所有的引脚都已经分配给了一些东西。您需要权衡放弃什么以获得 ATC 功能。

使用代码功能试验工具更换器 #845

也在去我的 atc 的路上。我缺乏知识来完全理解他们写的东西。
使用暂停针或探针针我想这就是我将用来调整 grbl 和 atc 之间的运动和通信的方法

喜欢 (0)