注释
贡献者作者
上面提到的解决方案似乎工作正常。 我删除了关闭步进脉冲的定时器中断,并在主步进驱动器中断结束时用延迟循环替换它(void IRAM_ATTR onStepperDriverTimer())
常用 Grbl 设置为 3 uSecs,这也是最小值。我不确定为什么这是最低要求,但我会保留它。TI DRV8825 等常见驱动器需要 1.9uS 的步进脉冲长度。 我认为它不会影响性能,因为时间很短。无论如何,你不能比最小步进脉冲时间允许的速度更快。在那之前我没有分析过代码,但它可能会占用大部分时间。 我还没有提交代码,以防万一有人想对此发表评论。 |
贡献者作者
几年来,我一直在使用 STM32 设备开发自己的 gcode 处理器。最近已经开始使用各种 ESP 设备进行遥感项目。非常愿意迁移到您的实施。 |
贡献者作者
更改为使用上述方法。 |
我不确定为什么步进脉冲计时不准确。它起作用很奇怪,但不准确。这可能是由于定时器是如何打开或重新启动的。
一种解决方案可能是使用esp_timer_get_time()以微秒为单位捕获脉冲开启时间,完成中断代码并添加一个空的 while 循环,直到另一个esp_timer_get_time()达到关闭时间。我讨厌中断中的 while 循环,但它应该只有几微秒,其中一些在 while 循环之前运行代码已经过期。
巴特