方向引脚延迟#115
注释
可能有几种方法可以做到这一点。 Grbl 方法是使用计时器来延迟。这会占用另一个宝贵的计时器,但可能会起作用。 理想的 ESP32 方式是使用RMT 功能。不久前,我写了一篇关于此的博客文章。这将允许您获得一个 OFF_ON_OFF 信号,其中前 2 个阶段具有持续时间。不幸的是,我在让 RMT 在 Grbl 中发挥出色时遇到了很多麻烦。RMT 不喜欢从中断中调用。我认为这可能是由于 RMT 的 API。我在使用带有 Grbl 的 RTOS 来解决这个问题时也遇到了麻烦。我不是 RTOS 方面的专家,自从我尝试过之后,API 发生了很多变化,所以 RMT 可能会有希望。 在我完成一些其他项目后,我可能会在几周内再看一遍。如果有人知道任何可以帮助解决此问题的专家,那也很棒。 |
是的,会很棒。 由于我有硬件(DM556 加上 3A 步进器,例如 1200 毫米 X 轴),我可以提供测试编程。同时,我将尝试在 Arduino 上使用 GRBL 进行学习,尽管这不是我的首选解决方案。ESP32 有更多优势 |
不是专家,但这似乎对我有用:
和
我绕过 API 直接在 ISR 代码中写入 RMT 寄存器。代码可以很容易地改回 grbl 中的原始编码风格。 |
看起来很棒。我要到本周末才能对其进行测试,但它看起来与我将要尝试的非常相似。 API 看起来假设您打算对传输的数据进行大量更改,需要等待传输完成,并处理多个线程。 我们希望每次都发送完全相同的内容,并且这些步骤的固有时间安排消除了所有其他问题。 你的方法看起来很棒。 |
那很快。您的分支中的一个小问题:由于在 RMT init 中完成了步骤反转,因此不应在 stepper ISR 中再次完成(第 326 行)。另外,我忘记包含一段将时钟信号分配给 RMT 外围设备的代码片段 – 似乎不需要它,因为你让它工作无论如何?
我没有将它添加到 initRMT,因为我在更改设置时调用了 initRMT(我在单独的函数中执行所有外围设备的基本设置)。 |
谢谢,我的意思是删除那个反转。我还没有测试过这些东西。我也会添加那个时钟的东西。 我跳过了联动电机功能以加快基本测试。我需要重新添加它。 |
根据您的建议更新。 我当前的 RMT 方法不允许您像以前一样自由定义和/或自由步进 GPIO 引脚。我需要找出一种健壮的设计方法来仅初始化所需的 RMT 通道并在 stepperSetStepOutputs() 中引用它们 也许最好的方法是在 cpu_map.h 中分配通道号? |
更改了代码以允许主分支具有相同的 I/O 和轴灵活性。轴现在是这样配置的.. #define X_STEP_PIN GPIO_NUM_12 我计划很快与 master 合并,并在 config.h 中选择 RMT。这将允许它与 master 一起测试。 |
延斯豪瑟 评论 on 4 Apr 2019
还没有实现,是的。我读了
我已经买了一些 DM556 步进电机驱动器,它们需要一点延迟。
有没有办法解决这个问题?