注释
很抱歉不请自来就插在这里。 你描述的肯定是可行的。在I2C接口等地方的ATmega上也使用了类似的机制。它的工作原理是将输出变为“集电极开路”模式。 为避免输出冲突问题,该机制通常设置为低电平有效信号,如下所示(在两个控制器上)。
那么协议是:
请注意,控制器在固有的嘈杂电气环境中工作。内部上拉可能不足以在所有这些噪声中保持高水平。可能需要更强的外部上拉(和/或电容滤波器)。 该方案不依赖于接触该引脚的 DDR 寄存器的 GRBL 代码的其他部分。如果它是“未使用的”,那么什么都不应该,但我对代码不够熟悉,无法确定。 祝你的项目好运。 退回潜伏者模式… |
作者
好吧,紧张, |
这可能是一个更好的解决方案。代码中的简短搜索显示 Arduino A4 为 COOLANT_MIST 或 COOLANT_FLOOD,具体取决于是否启用了双轴模式。无论哪种方式,似乎都在使用 A4(Protoneer CNC shield 的 cpu_map.h)。或者,要将 A4 用于 ATC,则需要禁用这些其他功能,以免它们产生干扰。另一种选择是禁用 I2C 并将其中一个引脚用于单线握手协议。 |
哎呀。罢工最后的选择。我忘记了 A4 和 A5 已经与 I2C 共享,所以无论哪种方式,它们实际上都是相同的引脚。A5 用于探针输入,因此它也不可用。所以最重要的是所有的引脚都已经分配给了一些东西。您需要权衡放弃什么以获得 ATC 功能。 |
也在去我的 atc 的路上。我缺乏知识来完全理解他们写的东西。 |
我想让数字引脚等待输入(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 版本让他们不高兴。哈哈。