注释
有趣的想法。我不是软件专家,但如果实施,我肯定会使用它。 |
我很想知道这在 Grbl_ESP32 中的表现如何。 我认为您需要的功能在 Arduino 核心中。Grbl_ESP32 中使用的所有 GPIO 都已编写,因此用户可以在 cpu_map 中选择它。尝试将该方法用于您的 I/O。 |
我不太熟悉 grbl 源代码以及我应该使用的定时器等。我已经为我的想法编写了一个应该可行的实现,但由于我的 CNC 当前出现故障,我无法对其进行测试。如果我做一个拉取请求,你可以吗,@bdring查看代码是否有任何愚蠢的错误?如果有人自愿将他们的带传感器(带有任何速度传感器)的 BLDC 主轴用于一些测试和 PID 调整,我会非常感激。 |
我们可以通过您的分叉进行所有初始测试。目前不需要针对 devt 或 master 的 PR。 为您的计时器编号使用定义的常量,以便轻松更改。选择当前未使用的任何号码。 我认为在我进行任何测试或购买硬件之前,您应该选择电机和编码器并进行一些基本测试。 |
我有一个可以用来做一些基本测试的传感器电机,我只需要将它连接到我的一个 esp32 上。我会在周末看看我能做些什么。哪些定时器没有被使用? |
现在只有 (1) 个定时器中断。它用于步骤生成。 #define STEP_TIMER_INDEX TIMER_0
|
我一直在修补我的MSP432 grblHAL 驱动程序中的主轴 PID 。一些提示:
祝你好运! |
谢谢你的提示@terjeio. 我同意你的观点,pid 设置应该可以从 grbl 设置访问。至于计数器输入,我不太确定你的意思。我真的很想找到一种不使用中断的方法,因为它们对 ESP32 来说是一种痛苦,因为你几乎必须使用队列作为中断,这会过多地重置 esp32。我有一些代码正在运行,但它非常疯狂。我必须进行一些调试以查看代码发生了什么。我真的很想实现一些可以轻松移植到其他平台但也可以利用 ESP32 功能的东西。 |
@BogdanTheGeek |
@BogdanTheGeek这取决于您拥有的编码器,但脉冲计数器基本上无需任何代码即可对引脚上的脉冲进行计数。然后您可以设置一个 RTOS 任务,它不会干扰步骤的时间等,以确定速度并应用更正。 它将使用 esp_timer_get_time() 和计数来确定速度。 |
我真的很喜欢不使用中断的想法,我认为脉冲计数器和 RTC 的组合是可行的方法,因为即使没有 RTOS 的微控制器也可以实现类似的功能。 |
任何人都可以帮助我进行 $settings 吗?我不知道在哪里添加它们以及如何让它们显示在网络界面中等等。我想如果 CPU_MAP 使用反馈引脚,我将不得不使用一些 ifdef 来只包含它们,但我不确定这个 ifdef 应该在的所有地方。 |
在 settings.h 中添加新变量,最好是在 settings_t 结构的末尾。由于这需要扩展,他们可能(?)将所有位的默认值设置为 1,除非刷新清除设置并因此触发对 settings.cpp 中的 settings_restore() 的调用。我不知道 ESP32 在这方面是如何设置的,如果设置在刷新后仍然存在,你必须处理它,见下文。 在 defaults.h 中添加合理的默认值,并使用它们在 settings_restore() 中设置初始值。还将它们添加到 settings.cpp 中的 settings_store_global_setting() 和 report.cpp 中的 report_grbl_settings()。 如果设置在刷新后仍然存在,我会在 settings.cpp 中向 read_global_settings() 添加代码,测试所有设置的位(或者值是否超出合理范围),如果是,则应用默认值。另一种选择是在添加这些时更改 settings.h 中的 SETTINGS_VERSION – 这可确保在更改 PID 选项后第一次刷新时将设置重置为默认值。 我不知道网络界面是否会自动选择新设置。 |
我一直避免更改设置,因为它会破坏很多 gcode 发件人。许多人不使用健壮的解析方法,并且会因最微小的变化而中断。 话虽如此,继续进行您想要的任何更改。我稍后会解决发件人问题。我建议使用 $3x 类型编号,因为这是当前主轴功能所在的位置。 可能会有一个#define ORIGINAL_SETTINGS_ONLY 类型选项。如果您需要为首选发件人选择该选项,它只会报告原始设置但支持对所有设置进行更改。 WebUI 不支持它们,但可能会忽略额外的。它需要知道描述(以多种语言)来支持它们。 |
有点 OT 但与执行不当的发件人有关:我刚刚预发布了Grbl 的配置应用程序(仅限 Windows),IMO 简化了设置,无需弄清楚位域之类的东西或参考文档。一个完整的发件人将在稍后…… 编辑: |
不确定这是否是离开它的正确位置,但 G76/G96 会很不错,它可以让我摆脱我的质心橡子和它的糟糕软件。似乎与“闭环”步进控制有关的问题是相关的。 我还读到有人试图使用“混合闭环步进器”时遇到同步问题。例如,由于某些瞬间跳跃,X 必须进行调整,现在它比其他步进器领先/落后几个刻度。据我所知,解决这个问题的唯一方法是排除故障。如果 grbl 看到更改,处理 G96 的相同代码将能够做一些补偿。 有一堆半测试的 grbl fork 实现了某种形式的主轴同步。@terjeio评论了其中的一堆。 |
我想为主轴 PWM 实现一个闭环 PID 控制算法。我想使用带有外部反馈源(如霍尔传感器或光学传感器)的标准 BLDC ESC 来测量 RPM 并调整 PWM,以获得准确的主轴速度。
grbl 的标准版本没有实现这一点,因为我相信 ram 和计时器有限,至少对我来说,这将是 grbl_ESP32 的一个巨大的“销售因素”。
这可能只是一个以相当低的优先级在后台运行的任务。我主要使用 idf,所以我不熟悉 Arduino 核心可以访问多少。
此功能正在开发中还是我可以继续实施它?关于应将哪个 GPIO 用于反馈的任何偏好?
编辑:
这也开启了主轴失速检测的可能性,并可能节省大量立铣刀。