注释
特热约 评论 on 29 Oct 2021
Teensy 在 MCU 上有 USB 堆栈,而不是在你发现的外部芯片上。但是,插件可以通过操作函数指针来做各种事情,包括修改流处理的方式。复制输出应该很容易,在插件 init 函数中保存(相关)HAL 流指针,调用串行 init 函数(这将返回一个带有指向串行流函数的指针的结构)并保存它。将输出函数添加到插件并使用这些函数更新 HAL,在这些函数中调用保存的指针中的函数,您就可以开始了:
处理输入并不容易,IMO 混合 USB 和串行数据不是一个好主意。将函数附加到前台进程(通过grbl.on_execute_realtime)会更好。从那里读取串行输入并将其提交以进行处理。
请注意,实时命令的处理方式与常规输入不同,您必须通过调用
这里的问题是检测“USB 未激活”——它可以通过监听来自它的实时命令来完成,如果安静一段时间让串行接管控制?IMO 上述方法更好,因为即使 USB 处于控制状态,它也允许慢跑。 可以注意到,我已经制作了一个驱动程序级协议,它允许通过 pin 上的握手进行流切换,这样做的缺点是它需要发送方合作。顺便说一句,Teensy 驱动程序还不支持这一点。 Teensy 的另一个可用选项是通过 Phils Pro 板上的第二个 USB 端口连接并为此添加代码支持。如果有人能应对这一挑战,那就太好了…… |
泰尔杰, 一如既往,感谢您的详细建议。 在我看到这个之前,我正在四处寻找你的 MPG 代码。当我想使用红外遥控器时,我是否也可以选择使用将串行输入转换到 MPG 控制器使用的引脚的信号线? 我让 IR 遥控器与 Pi 通话,并且我编写了一个小 Python 存根来生成基本的慢跑命令并将它们输出到串行端口上。现在我刚刚将 Pi 的 USB 链接直接插入 Teensy,但我认为如果我使用 Pi 上的 UART 而不是 USB 串行,并且我将一个引脚连接到 MPG 输入触发引脚,我应该是即使笔记本电脑已连接,能否通过串行引脚发送它们? (编辑)我现在才看到您提到它需要“发件人合作”。我在哪里可以了解更多信息?我猜IOSender今天有这个,但它没有在其他地方广泛部署?啊,我也莫名其妙地掩饰了你说Teensy司机还不支持这个。我今天可以学习哪个司机作为例子? |
我刚刚对一个干净的项目进行了新的拉动,但在使 UART 串行通信正常工作时仍然遇到问题。 我的 UART8 TX 和 RX 引脚连接到我的 Pi。我没有连接 CTS/RTS 引脚。 如果我在 teensy 板上运行一个基本草图,我会在 Pi 的那些引脚上获得 115200 的预期输出,所以知道这些引脚是好的。我尝试在 my_machine.h 中设置这些:
我还更新了 uart.c 中的引脚以获取 uart8 的正确引脚:
没运气。针脚上什么都没有。 我还尝试注释掉 USB_SERIAL 配置,并留下 UART_PORT。那也没有用。 关于下一步尝试什么的任何想法? |
5oc车间 评论 2021 年 10 月 30 日
我认为这与使用 Serial8 有关。查看 uart.c 源文件中 UART5 的详细信息,我注意到一些值与 pjrc 提供的值不同: https://github.com/PaulStoffregen/cores/blob/master/teensy4/HardwareSerial8.cpp |
5oc车间 评论 2021 年 10 月 30 日
我很高兴地报告龙已被杀死:
这是我在 Teensy 4.1 上为 Serial8 创建的条目。我很抱歉没有提交补丁,但我认为最好是真正了解它以及如何将其添加到所需结构的人进行必要的更改,以便它可以与各种板/引脚组合共存:
|
现在我已经让串行工作了,我刚刚测试了一个草图,确认我可以在串行链接打开时将 QEI-SELECT 引脚从 Pi 拉高。理论上,这应该允许我作为发送者接管并从他的 Pi 发送慢跑和其他 gcode,就像 MPG 项目一样。 在 Teensy 驱动程序中完成对它的支持涉及什么,我有什么方法可以帮助实现这一点? |
特热约 评论 2021 年 10 月 30 日
没关系,我将不得不检查数据表——UART5 很可能可以路由到一组以上的引脚。
您可以尝试从MSP432 驱动程序移植代码。大多数代码由 |
5oc车间 评论 2021 年 10 月 30 日
谢谢,我现在去看看。 |
5oc车间 评论 2021 年 10 月 30 日
我非常喜欢用等效的串行功能替换键盘插件中的数据读取功能的想法,但这比我现在知道的要多。更多的学习要做,但要取得进步。很高兴现在可以运行第二个串行端口,因为它将提高调试能力而不会干扰主 grbl 控制台。 |
5oc车间 评论 2021 年 10 月 31 日
正确的是,通过定义 UART=5 并确保端口已设置,我还可以返回为主 grbl 控制台启用 USB 串行,并且 UART 端口仍将暴露给 grblHAL 以供单独调试或应用程序使用? 我试图了解 HAL 命令从备用端口发送和接收数据是什么,或者我是否应该直接使用类似 Arudino 的调用? |
特热约 评论 2021 年 10 月 31 日
这很简单:
在my_machine.h中启用键盘插件,所有传入的字符将直接传递给插件。然后可以发送单点动字符命令。通过 CTRL-X(或发送 0x85)终止点动。使用 在快速、慢速和步进模式之间切换
使用串行“HAL”,在上面的示例中,您通过“串行” io_stream_t结构中可用的调用(函数指针)与端口交互。这公开了许多用于处理流的函数。例如调用 serial.write(“hi!”); 写一个字符串。有点像你用 C++ 做的…… |
5oc车间 评论 2021 年 10 月 31 日
Terje,我想我想多了。我现在就去测试上面的代码,如果它开始从串口读取,我会很高兴! 再次感谢您在 grblHAL 上的所有时间和精力。您构建它的方式非常优雅,我非常感谢能够在这样的事情上“绕开边缘”工作,而无需触及核心代码。 |
特热约 评论 2021 年 10 月 31 日
好吧,它在这里为我工作;-)
是的 – 整个 ting 变得像一个专门的操作系统,问题是如何让用户掌握什么是可能的。其中一部分是跟进诸如此类的请求,我很感激你选择自己花时间而不是把它扔给我…… |
5oc车间 评论 2021 年 10 月 31 日
它非常适合阅读。我有一个控制台输出的副本,在 Pi 串行终端程序上向上滚动我的屏幕。 我似乎无法让它接受一个按键。我已经打开了 IOSender,我已经从 IOSender 解锁并归位了机器,所以我处于空闲状态。当我在串行终端中按“h”或“H”时,什么也没有发生。在“发送”它的键之后,我需要发送第二个字符(我尝试过输入)吗? |
5oc车间 评论 2021 年 10 月 31 日
泰尔杰, 我同意专门的操作系统类比。实际上,我一直在思考这个问题,想知道我能提供什么帮助。昨晚我正在与同样在这里做出贡献的 Drew Marles 讨论这个问题。我想知道是否有某种方法可以帮助创建一系列流程图,这些流程图可以直观地代表您对各种组件如何交互以及如何连接到流程以添加功能等的看法。 每次我有一个新的想法或问题时,你的结构似乎已经被建造来适应它。我很高兴自愿抽出时间尝试创建 grblHAL 环境元素之间关系的可视化地图。 通过 grblMega 工作到一些基本的 RGB 警报代码和现在的 RGB 插件,我的画面比开始时要好得多。如果您认为这很有价值,我会尝试一下,然后再与您联系以进行审查和更正。 |
一个想法可能是举几个例子,比如 RGB 插件和我希望通过 IR 遥控器实现的目标,并展示系统的模块化 HAL 特性如何允许即使是那些刚接触编程的人也可以尝试插件和开发有用的应用程序,而无需了解 grblHAL 的深层核心。 在 grblMega5x 上做我早期的 RGB 工作之前,我从未接触过 Arduino,而且我几乎所有的程序化(如果你甚至可以称之为)经验都是在 bash 脚本中。它证明了您提供的抽象和支持的质量,由 PlatformIO IDE 的强大功能支持,可以快速编写、构建、闪存测试和调试,到目前为止我可以为该项目做出贡献。 grblHAL2000 板上的 Pi 标头就是这种热情的一部分。让这个串行链接正常工作将为人们打开一个全新的世界,让人们可以使用 python、lirc、bash、node-red 等东西来做插件风格的项目,并向他们的机器添加特性和功能。用于支持通过 40 针头安装的 Pi Zero 的接头,就在电路板的背面。随着前几天 Pi Zero 2 W 的发布,它是四核处理器,那里有更多的潜力。 CNC 社区中有很多杰出的人并不在设备编程方面,但我认为如果他们了解它的可访问性,他们可能会开始为项目带来有趣和创新的想法和插件。我将尽我所能帮助开发材料来传达 grblHAL 的故事。 |
5oc车间 评论 2021 年 10 月 31 日
我刚刚意识到,我需要为按键发送十六进制,而不仅仅是在终端中按键,对吗? |
特热约 评论 2021 年 10 月 31 日
‘h’ 切换点动模式,’H’ 应该让机器归位。默认情况下不提供反馈。有一个“事件”可以用来提供反馈, 如果你尝试’F’会发生什么?对我来说,控制器在 Y 方向进入点动模式,然后按 CTRL-X 停止它。
如果您愿意这样做,那就太好了——当其他人加入努力时,这是一个加分项。
不,这是普通的按键。从键盘发送 0x85 有点困难(也许可以通过一些 ALT 加数字键组合?),这就是我添加 CTRL-X 作为替代的原因。 |
5oc车间 评论 2021 年 10 月 31 日
有趣的是,我刚刚在看到你的笔记之前添加了这一点,我在终端上遇到了一些垃圾。听起来可能是接线。现在检查。 |
5oc车间 评论 2021 年 10 月 31 日
我得到了奇怪的字符,然后我似乎遇到了稳定性问题。现在试图捕捉角色。 重新启动时,IOSender 可以连接并回家,但如果我断开连接,它似乎无法重新连接。所以我认为有些事情不太对劲。当我发出按键时,问题似乎开始了。 |
5oc车间 评论 2021 年 10 月 31 日
作为后台(当我再次重新启动时),我使用 Putty 从 Windows 到 ssh 到 Pi,然后运行 minicom。我的 minicom 处于 VT102 模式,我认为 Putty 处于 vt100 模式,以防我们对我们看到的确切字符感到困惑。 接线看起来很牢固。 在终端中按“F”显示 H¯ó |
特热约 评论 2021 年 10 月 31 日
这很奇怪,我这里没有这样的问题。 |
5oc车间 评论 2021 年 10 月 31 日
啊哈!“H”是第一次回家。我已经退出了 IOsender,因此控制台线路不会继续泛滥。重新启动 IO Sender 并再次尝试确认它仍然有效。是的。 |
5oc车间 评论 2021 年 10 月 31 日
‘F’ 当回响到屏幕上时仍然给出那个奇怪的字符。 ‘R’ 回显为 Hh¹½K 并且没有任何反应。 |
5oc车间 评论 2021 年 10 月 31 日
终端仿真可能吗?我是 VT102 在 minicom 上从 P 到 teensy 的串口。Putty 是 Windows 上的默认设置,我通过 ssh 连接到 Pi。我认为它是默认的 vt100。 |
5oc车间 评论 2021 年 10 月 31 日
我停止了 IOSender 以便更容易捕获输出。在我们返回了三四个不寻常的字符串后,我没有得到回声,现在 IOSender 无法再次打开端口,所以我认为我们已经挂起了 Teensy。 啊哈,那可能是我的错误。我在 forward_char(c) 中使用的是 serial.write(c) 而不是 serial.write_char(c)。 |
5oc车间 评论 2021 年 10 月 31 日
好的,不,我在控制台中正确看到了 F、L 和 R。 H 努力将机器归位,IOSender 说它处于空闲和就绪状态,但其他键没有触发任何东西。奇怪的。 |
我刚刚注意到’H’是直接在keypad.c中定义的,但所有其他的都来自keypad.h中的#define。 keypad.h 似乎正确包含在插件的顶部,但我想知道这是否是问题所在? 路径看起来正确,我可以右键单击它并“转到定义”,它会正确打开头文件。 |
特热约 评论 2021 年 10 月 31 日
也许不是,如果超出机器限制,可以忽略点动命令。尝试设置 $40=1,这将慢跑限制在限制范围内。也试试 M 和 C,应该切换雾和冷却液。 |
5oc车间 评论 2021 年 10 月 31 日
M&C 工作正常。 我用 $40=0 和 $40=1 试过,没有变化。 我也搬到了桌子中间,以确保我在各个方向都有间隙。 |
5oc车间 评论 2021 年 10 月 31 日
啊哈!我想“我想知道在 IOSender 中是否可以正常进行键盘慢跑?”: 错误:22 – 进给速率尚未设置或未定义。 |
特热约 评论 2021 年 10 月 31 日
嗯,也许慢跑默认值是错误的(50-55 美元),如果是这样,试试 $RST=&。
应该的,我对此没有任何问题。
是的,这可能是因为慢跑设置错误。 |
5oc车间 评论 2021 年 10 月 31 日
是的,它们归零了,我现在可以在 IOSender UI 中看到。他们以前肯定是有人居住的。这是驱动程序从存储中加载它们的情况,除了它们不存在,所以它将所有内容都设置为零? 是的,一旦我进行了重置,它们就会重新出现(虽然不确定这些是我之前的值,但我认为我最近没有将我的最新值写入我的长期存储。 我在慢跑!呜呼。 |
5oc车间 评论 2021 年 10 月 31 日
太感谢了。除了我没有对 serial.write_char 使用正确的函数调用之外,这非常容易。 代码是如此直接,以至于我有时会猜测您是否提供伪代码来“展示道路”,其余的则是“留给读者作为练习”还是全部代码。 所以现在我需要做的就是在 Pi 上的我的 python 脚本中添加等效的键盘映射,这样你接受的每个命令都会映射到一个适当的按钮,项目基本上就可以开始了。然后,我可以查看使用 RGB 灯(如果有)提供慢跑速度变化等的反馈/确认。完美的。 这使得 Pi 标头现在特别强大,尤其是在将 UART 支持添加到主线之后。 |
PS – 我在思考的最后一件事是是否可以使用这种方法一次发送两个键,或者以其他方式触发对角线移动。 编辑 – 没关系,我看到你已经考虑到了! |
特热约 评论 2021 年 10 月 31 日
他们的键盘插件添加了这些设置。我依靠 8 位校验和来确定数据是否有效,如果不是则执行重置为默认值。我想更改为 16 位校验和,因为 8 位对错误不是很敏感.. .> PS – 我在思考的最后一件事是是否可以使用这种方法一次发送两个键,或者以其他方式触发对角线移动。 您必须在发送端添加 N_KEY 翻转处理,并发送相应的单(小写)字符命令以进行对角线慢跑。或者键盘插件必须更新,但这可能很棘手? |
5oc车间 评论 2021 年 10 月 31 日
keypad.h 中已经定义了大多数对角线移动的组合。我可以添加任何我想怀疑的东西。 我可以看到我想做的一件事是使 Z 进给率独立于整体点动率。我的 Z 快速上下移动总是有点令人不安。我意识到这将意味着无法使用 X/Y 和 Z 进行复合移动,但我认为事先将 Z 移动到净空高度可能更安全。 |
Microsoft MCE 遥控器具有大量默认键,因此我可能只使用箭头键进行单个轴移动,并使用数字键盘或媒体控制按钮进行对角线移动。 这是我正在使用的遥控器:https ://www.amazon.ca/Pinnacle-Remote-Windows-Media-Center/dp/B000WR2E00有很多选择。 |
特热约 评论 2021 年 10 月 31 日
它是否具有类似于键盘 CTRL 和 SHIFT 的键修饰符,可用于选择慢跑模式?如果是这样,慢跑模式可以是单字符命令的一部分。0、1 和 2 也可以用来设置它。 |
5oc车间 评论 2021 年 10 月 31 日
对不起,我消失了。在我上一条信息后不久,我们家就断电了。 我想我可以从我正在编写的 python 脚本中发送键修饰符。现在我有数字发送 1、2、3 并成功更改模式。现在只需测试所有组合。工作出色。 我确实在代码中发现了一个错字/错误。B 没有工作,我注意到这个语句 n keypad.c 中似乎有一个杂散的 1 字符: case JOG_YB: // Jog -Y 我删除了它,B 按预期工作。 不幸的是,我必须出去,因为我很想整理一下并制作一个小视频,让您看到这一切的实际效果,但恐怕要等到以后再说。 |
5oc车间 评论 2021 年 11 月 1 日
为了将来通过 Google 找到此线程的任何人的利益,lirc 仍然是 IR 控制的一个选项,但显然从大约 4.14 内核开始,IR 支持已移入内核并通过以下方式公开: 司机。这应该可以让主流遥控器在 Linux 机器上工作并表现得像键盘一样快。今天我将研究消除 lirc 的开销并切换到这个。我的阅读表明这应该是可行的,并且将来用户的初始设置会更快。 |
特热约 评论 2021 年 11 月 1 日
这将在下一次提交中修复。
有趣的想法,不确定绘制/描述有多容易。对此进行讨论会很好。仅供参考,Phil 在他的网站上有一个概述,您想扩展它吗? |
5oc车间 评论 2021 年 11 月 7 日
我会再次查看 Phil 的网站,距离我通读它已经有几个月了。 |
特热约 评论 2021 年 11 月 9 日
仅供参考,我现在添加了一个选项来启用键盘插件,而无需通过定义 |
5oc车间 评论 on 29 Oct 2021
我经常发现自己在店里,需要慢跑机器才能让龙门架离开,但如果我在机器上切割,我不会随身携带笔记本电脑。
我想要一种通过按钮或操纵杆等以有限的方式移动机器的方法,而无需拿起我的笔记本电脑并启动发送器。
在 grblHAL2000 板上有一个 RaspberryPi 接头,包括将 Pi 上的 UART 连接到 Teensy 上的 Serial2。最初我认为 Teensy 的行为类似于 arduino,并且默认情况下 USB 串行将被复制到串行端口上,所以我可以在笔记本电脑未连接时从 Pi 发送一些基本的慢跑命令,然后移动机器.
事实证明,默认情况下,Teensy 不会在任何物理串行引脚上镜像 USB 串行通信。
我正在考虑在 Teensy 上使用串行 2 上的 Pi 和一个插件,也许可以允许慢跑,但我不确定最好的方法。我希望能够在 Pi 端使用 USB IR 遥控器(我有几个)之类的东西,并将这些按键映射到各种 GCODE 和 grbl 命令。这听起来像是一种合理的方法吗?或者当USB不活动时以某种方式在serial2上启用双向通信并直接与grblHAL核心对话是否更有意义,就好像它只是另一个发送者一样?