注释
我想我不明白你说你已经修改了与步进驱动器的接口是什么意思?你是说你必须修改 GRBL 代码,还是你只是制作一个屏蔽来将 arduinl 连接到驱动程序? 我自己让 GRBL 在 48V 和 5A(Keling 6050)下运行 3 个外部步进驱动器,没有任何修改。至于压力测试,有一个大约 4500 行长的“roadrunner”程序,它由许多直线段组成,可能对您有用。您可以在以下链接中获取代码。 https://github.com/synthetos/TinyG/blob/master/gcode_samples/roadrunner.gcode 在这里你可以看到我的机器在 GRBL 和 LinuxCNC 2.6 上运行相同的代码(切割空气)。 https://www.youtube.com/watch?v=c1mxS7WI-tg 事实上,我刚从我的车间回来,在过去的 3 个小时里运行我的机器为新机器制造零件。我正在使用我自己的 GUI 界面,虽然 GUI 有一些问题需要修复,但它表现良好并且 GRBL 从未错过任何一个节拍。 |
谢谢 109JB 我不得不修改代码,因为 L6474 使用 SPI 来获取配置和状态信息。Kieling 司机看起来不错,但相当昂贵。STM 芯片可处理高达 7A 的峰值电流和大约一半的 RMS。带 arduino 引出线的评估板成本约为 10 欧元。 Road runner 可能是一回事,但听起来更强调硬件而不是软件。 |
作为压力测试和可靠性问题的一部分,我遇到了这个问题: http://embeddedgurus.com/stack-overflow/2010/04/efficient-c-tip-12-be-wary-of-switch-statements/ 编译器选择影响 switch 语句的方式的可能性在紧密的嵌入式实现中尤其令人担忧。使用 if () 语句还可以节省一些代码。这主要影响 report.c 和 gcode.c(不是时间关键代码) 最好将它从 ISR(SERIAL_RX) 和 stepper.c 中的关键代码中删除 |
我已经删除了 stepper.c 中的开关,它节省了 12b(大概还有一点执行时间)。我还将 RAMP_DECEL 代码放在第一位以赋予其最高优先级,将 RAMP_CRUISE 放在最后(最长代码路径) 重新排序常量声明确保第一个测试是快速的 ==0
串行 ISR 仅节省 2b 并且可能是有害的,因为失败字符(最常见)每个得到四次测试。开关代码的顺序可能更好:需要检查反汇编的编译器输出。如果编译器想出一个聪明的解决方案,最好直接对其进行编码,以确保它不会在将来的某个时间跳转到不同的“启发式”解决方案,因为以及添加其他控制字符时。 效率问题的一部分是这些控制字符是散布在 ASCII 竞争环境中的古怪东西。如果它们不是 NIST 标准的一部分,那么将它们映射到连续序列(如 cntl-U … cntl-X)将是有利的。 串行中断表示 GRBL 核心时序上的抖动。让它尽可能小和尽可能恒定会很好。 |
Sonny,我在 Shapoko 上看到了一个以 35kHz (?) 运行的 GRBL 视频,结尾是一条“辫子”。 这与测试目录中的 braid_cut2d.nc 是一样的吗? 我在我的设置上运行了它,它仍然可以在工作台上正常运行,使用我完成的 mod,但它只做了很小的位移。我想演示正在运行完整的步骤,如果是同一件事的话。 测试我的更改对整体性能的影响是否是一件好事? 谢谢。 |
我一直在对 GRBL 添加一些内容,使其与 STM L6474 板接口,以提供比典型的大约 2A 驱动程序经常使用的更强大的驱动程序。
这已将大约 1.5K 添加到已编译的 GRBL 目标代码中。
我将驾驶相当大的机械硬件,因此在信任它为机器提供动力之前,我需要通过测试我修改后的 GRBL 来做一些事情。
现在 GEBL 已经相当成熟,并且在广泛的应用领域进行了大量的测试。我需要检查的是我添加的模组是否引入了新问题,特别是与内存使用有关的问题。我主要考虑堆栈和堆分配。
有没有人对 GRBL 进行过任何压力测试,或者可以就我需要最密切关注的领域以及最坏情况下的情况提供建议?
如果我要编写自己的压力测试,最糟糕的事情会是什么?
感谢您的任何建议。