注释
我认为那部分额外内存将用于 usb 缓冲区 我将 USB 和 st 库用于我的 stm32 端口,我只是保持一切相同,并且从 usb tx/rx 中断读取/写入与 uart 使用的相同缓冲区。 数据往往会成块出现,但我认为使用外部 usb 芯片时也是如此,它们都与 usb 数据包大小和 1ms 间隔有关 |
很高兴听到移植应该相对简单。我不熟悉 USB 到串口转换过程的工作原理。我知道数据包延迟会导致 XON/XOFF 流量控制出现问题,如果转换器无法以某种方式管理的话。 我很好奇这会占用多少处理器时间,甚至有必要使用 USB 转串口功能。我想如果一切都集成到一个闪存中,我们可以自由破解这段代码,使其更适合 Grbl,而不是包罗万象。您知道 USB 缓冲区需要多少内存吗? |
我试过将它移植到莱昂纳多身上,但卡在了连续剧上。我需要找出 usb 串口是如何处理的。 您上面没有提到的另一个问题是当前的 leonardo 引导加载程序负责处理 USB 串行内容,但它的大小也约为 4k – 因此它限制了程序的可用空间。 grbl 可以通过引导加载程序下载还是需要外部程序员将其加载到微型计算机上? |
感谢您试一试!我还没有拿起莱昂纳多,也不确定他们是如何管理串行 USB 的。很高兴知道它在引导加载程序中。这并不能真正让我们直接控制它,因为它确实如此。 Grbl 可以通过引导加载程序或外部编程器进行闪存。使用引导加载程序方法,之后您可以立即返回使用 Arduino IDE,而无需重新刷新引导加载程序。我们这样做是因为这会吸引新用户尝试 Grbl。使用外部编程器进行闪存确实有助于消除短暂的“启动”延迟,这种延迟会使 Grbl 在此期间容易受到电子噪声的影响。 |
我一直在尝试让 grbl 在也是 Atmega32u4 的 teensy 上运行,我通过使用 pjrc 串行库http://www.pjrc.com/teensy/usb_serial.html使串行工作非常容易,我可以通信使用 grbl 并转储设置,但是当我尝试发送任何 G 代码时它似乎挂起。我怀疑这是一个定时器中断问题,但我还没有尝试调试它。 好吧我放弃了,没有简单的方法来调试它挂在哪里,所以我只买了一个 Uno |
大家好! 今晚我花了一些时间搞砸了这个并且已经走得很远了!这是我的分支:https ://github.com/tmpvar/grbl/commits/atmega32u4-support 基本上我已经开始将LUFA作为依赖项进行集成,这会增加大约 4k 的闪存大小(没什么大不了的吧?) 我在上述分支上使用了adafruit 的 atmega32u4 分线板。除了实际的步进运动之外,一切似乎都处于工作状态。发送 我的理解是 LUFA 不使用中断进行通信,这使实现者可以自由使用所有中断。在我们的案例中,我认为这是一个问题。也许强迫 grbl |
你好!我一直在尝试将这一行的查询拼凑起来,以便在我自己的基于 32u4 的电路板上使用。tmpvar 先生似乎取得了不错的进展,但上面的内容听起来有点像遇到了障碍。这会被视为不便还是绝对的阻碍? 如果是前者,我会热衷于更深入地挖掘,但如果知道它很棘手,我不想浪费时间。 哦,还有这里所做的所有工作的超级粉丝。GRBL 非常优秀,你们都应该得到最高的赞扬。 |
@rdpowers我当然认为值得深入挖掘。我记得这个线程(或另一个?)还有更多内容,相当于“不可能”,但老实说,我认为这取决于管理 32u4 上的 USB 接口需要多少时间。 我猜想那里有更多的“东西”需要处理,而不仅仅是与 uno 上 usb 和 atmega328p 之间的串行芯片通信。如果您有任何发现,请告诉我们! |
@tmpvar我想我已经解决了你的问题 原来32u4没有Timer2!这里的行是问题所在:https ://github.com/grbl/grbl/blob/edge/stepper.c#L151-152 几行之后的 sei() 看起来是问题所在,但这只是因为那是不存在的 Timer2 ISR 最终第一次触发的时候。 我猜测当 Timer2 中断被触发时(错误地并且即使它被定义)它触发了 ISR(BADISR_vect),它在未处理时重置微。这是一个完整的猜测,我可能会稍后检查它是否是这种情况。 改为使用 Timer3 似乎效果很好。虽然我还没有完全让我的设备工作(也没有检查时间没有从根本上改变和破坏东西),但步进器移动并且似乎没有任何东西最终损坏 – 只需要调整以使事情完全排序然后合并到当前grbl 的版本。 非常感谢您让我走上正轨! |
让我们使用 Timer0 而不是 Timer3——原来 32u4 上的 Timer3 是 16 位的,溢出 0xFFFF 比溢出 0xFF 花费更多的时间。之后好好工作! |
仅供参考,我已经将我的 Leonardo/32u4 分支支持到当前版本的 grbl – 0.8c。你可以在这里找到它: 由于 LUFA 依赖性,它已接近最大尺寸,我不得不删除几个功能以使其适合微型,包括冷却液、主轴控制和归位。可以通过移除 Catalina 引导加载程序并使用专门的编程器来重新安装它们……留给读者练习。 尚未在实际机器上进行测试,但似乎可以做所有正确的事情。 32u4 确实是一个糟糕的目标选择,鉴于程序内存的限制,我怀疑我会继续努力跟上 仍然很乐意回答任何问题。希望其他人发现这很有用!:) |
@rdpowers: 甜的!感谢您对此进行尝试。我一直很好奇支持莱昂纳多需要什么。用户提出的主要潜在问题之一是 USB 处理及其如何影响步进脉冲和其他实时操作。例如,如果您收到任何抖动或跳过的步骤。很难测试这种类型的东西。 另一个是涉及的空间,你似乎已经弄清楚了。我们为 328p 版本所做的其中一件事是去除我们不需要的非常大块的 Arduino 库,只保留我们所做的事情。在大多数情况下,我们最终重写了其中的大部分,以在大小和速度上都更有效率。Leonardo 也可以这样做,但我认为这可能不值得付出努力,因为 Uno 和 Leonardo 之间的成本差异很小。 |
我认为从技术上讲,您可以通过 USB将相当高的波特率注入这些东西。我的一个朋友说她 但是,是的,那个引导加载程序有点棘手。我想知道有多少
|
@chamnit, 是的,确实很难测试抖动或跳过的步骤。我得到的最好的答案是轶事;我运行上面提到的 0.8a 版本已经有一段时间了,结果还算合理。这只是一台做小工作的小机器,但它们表现得很好,看起来运行平稳。它的运行速度也不是那么快,这对两个部门都有帮助。 我对 AT 芯片不是很了解。我想我只是希望有朝一日可以使用具有类似架构的更大版本的 32u4,然后这可能会更有价值。它至少可以帮助防止有人整理连续剧(再次感谢@tmpvar,很棒的东西!)和一些小问题,比如支持哪些定时器。 @kitizz:我还没有真正做过任何测试,但在这个设置中,你几乎只是忽略了波特 – 有太多的变量并且不知道哪个部分正在以什么速度抽象……我已经打孔了从 250000 到 9600 的一切,并且能够与 32u4 通信就好了。我使用在 115200 连接的客户端,因为这似乎是合理的,但是,除了感觉之外,没有任何其他支持。当我有一个更大的工作负载小 G0,G1 命令时,它似乎仍然不会影响操作的流畅性,但这可能更多地与 grbl 内的有效缓冲和机器速度有关,而不是传输速率。或不。耸肩 |
你是如何测试USB速度的?虚拟串口的波特率设置对32u4没有任何意义。无论是 9600 还是 250000,它都会以相同的速度运行。 |
@cody82:我没有测试速度,但我假设在我用来流式传输 G 代码的脚本或程序中设置速度会影响信息在管道上的速率,但那里和之间的多个软件层微意味着我不太清楚任何东西在那里结束的速度有多快。 Wireshark 的 Linux 版本支持 usb 监控,所以可能有一些方法可以判断,但由于它对我有限的铣削没有不利影响,我不太倾向于追逐它。 |
我的实验是简单地测试是否可以在 32u4 上运行 grbl。LUFA 可能不是最好的选择,因为我们已经越来越接近 32k 的限制。我敢打赌我们可以把它压扁,类似于@chamnit提到过,但不会丢失默认构建中的功能。 @rdpowers惊人的!你的代码在哪里? @chamnit我看到使用支持 usb 的 avr 的好处是缺少辅助芯片来执行 usb 操作,对于像我这样的人来说,这将允许使用不一定基于 arduino 的自定义控制器。不过我同意,这不是一个重要的优先事项。 几天前我在一次会议上还看到了另一件事,其中一个人闪现了 atmega8,它在 arduino 上进行 usb 通信以注册为操纵杆。虽然我知道这是可能的,但我从未见过。有dfu程序员真的很容易!虽然它不是立即适用的,但对于完全用完他们的 arduino 空间的人来说,它可能是一个选择。有趣的是,arduino uno 类板上实际上有两个处理器。 |
仅供参考 teensy2 http://www.pjrc.com/store/teensy.html也是 32U4,非常便宜。我尝试了一段时间让 GRBL 在上面运行,但遇到了计时器问题。这个端口应该可以帮助我解决这个问题。 |
为什么这个问题还没有解决就关闭了? |
@prusnak:目前还没有正式支持莱昂纳多的计划。这就是为什么这个问题被关闭了。 |
@chamnit很公平。从讨论中不清楚,这就是我感到困惑的原因。 |
好吧,今晚很晚了。看来关于GRBL在LEONARDO上运行的问题完美解决了。也许我应该给grbl – 0.8ca尝试提到的@rdpowers. |
我上传了一个从grbl-atmega32u4-support-8c编译的 HEX 文件。此外,还需要一个虚拟USB驱动程序,谁可以在这里下载一个。 |
我能够通过以下方式编译和上传分支@rdpowers对 Arduino Yun 来说没有问题。在 OSX 上,不需要虚拟 USB 驱动程序。 值得注意的是,必须删除一些功能 – 特别是归位。我会看看是否有可能包括归位,因为它是一个非常重要的功能(至少对我而言)。 |
嘿大家。我真的希望我能早点找到这个线程…… 上周我一直在将 grbl0.9j 移植到 Leonardo/32u4,主要是因为我没有意识到它已经被尝试过……(是的,我确实搜索过,但显然不够努力。)并且在许多端口实际完成和工作的方式……我可以用“Grbl Controller”很好地控制它并获得移动轴反馈。而且我不必放弃任何功能,只需打开 GUI_REPORTING 即可。(0.9j 有 AMASS、Spindle PWM 和其他改进)是的,我重新映射了 Timer2 -> Timer4,并且我一直在使用 Teensy USB 库和库存引导加载程序。(没有丝瓜) 然而,在“清理”分配端口、引脚和定时器时,我遇到了 USB 中断向量优先级高于定时器中断的问题(显然这里众所周知)。我想知道是否有人想出解决方案,或尝试过以下任何一种方法:
我将查看“rdpowers/grbl”存储库,以防其中有任何有用的东西,但任何建议都很好。我太接近了。 |
@unorthodox-engineers那么,您是否设法解决了中断优先级问题?你能分享你的修改吗? |
是的。结果证明问题不存在……USB 中断都发生在设置/握手阶段,一旦端点建立,一切都由 u32 的硬件 FIFO 缓冲区和轮询调用处理。里面其实很整洁。我可以确认莱昂纳多完全有能力以相当高的速度无故障地运行 grbl。 事实上,由于硬件级校验和/重传/流量控制,USB 链接在技术上优于串行链接或 UNO 上的 USB 转换器。(内置 XON/XOFF 的等价物)您可以直接进入堆栈,在 32u4 上,做各种有趣的事情。 虽然 Timer 和 GPIO 引脚有很多问题……几乎所有东西都被重新分配了,这让 GrblShields 变得毫无用处,我对此并不满意,我仍在寻求改进。 USB“HIDS”(硬件 ID)也存在问题,结果证明这是一个规模惊人的兔子洞。基本上,“USB Implementers Forum”(USB 等同于 MPAA)收取分发硬件 ID 的许可费。不出所料,通用串行端口没有“类 ID”。每个 USB 设备制造商都应该为获得 HID 支付 4000 美元,允许其他人使用您的 HID 是撤销您的密钥的合法理由。 从技术上讲,Arduino 上的 HID 仅获得 Arduino LLC 固件的许可。为了正确地做事,我们应该从 OpenMoko 获得一个“官方”grbl HID(由于许可故障,它拥有为数不多的可重新分配的 HID 块之一,并将 ID 提供给开源项目。)然后编写一个使用该 ID 的 Windows .inf 驱动程序。(是的,真的。这就是为什么每个该死的串行端口设备似乎都有自己的驱动程序文件,而 Cypress 芯片如此受欢迎。制造商别无选择。很高兴 Microsoft/Linux/Apple 忽略了规范并且不每个单独的 USB 闪存驱动器/鼠标/网络摄像头都需要一个。) 如果我们得到一个 HID 并编译成唯一/随机的产品序列号,那么 grbl 设备就可以被操作系统明确识别。他们总是会被分配到相同的 COM 端口。您甚至可以添加检测连接和运行程序的 linux udev 条目。我认为这是一个可能值得麻烦的可靠性水平,但这仍然是一种努力。 我一直在(广泛!)与 Sungeun 沟通,他掌握了我开发的大部分代码,尤其是 USB 驱动程序,但因为我也做了很多其他更改(将步进器输出替换为 Galvos 的 DAC 代码等)在我们中至少有一个人无法访问这两个平台的情况下,将这些更改拖入其中有点困难。他只有 Unos,而我只有 Leonardos,这将难度级别提高到“困难”。另外,我的激光器坏了,所以我现在根本无法测试:-( 分支和发布很诱人,但这可能是引起分叉的好方法,我们已经有足够多的分叉了。 如果您迫切需要,请告诉我,我会把我的代码发给您。它需要针对您的平台进行更改(特别是如果您再次使用步进器)并且您可能需要调试一些功能,例如限位开关。至少在圣诞节之后我才会回到这个话题。 我们真正需要的是对两个平台都具有良好测试设置并且可以验证我们的构建的人。然后 Sungeun 和我可以破解代码,并在我们破坏另一个分支时得到通知。 |
您肯定不想为开源项目拥有自己的 HID/VID。 2015-11-28 1:43 GMT,Jeremy Lee notifications@github.com:
|
刚刚注意到 Arduino Leonardo 已经发布。因此,我想开始讨论这将对 Grbl 带来哪些变化。主要区别在于 Leonardo 基于 Atmega32U4 芯片,而不是带有 AtmegaXU2 或 FTDI USB 转串口芯片的 Atmega328p。这是两者之间差异的简短列表。