开源改变世界!!

闭环主轴控制 #265

推推 grbl 2年前 (2023-01-29) 84次浏览
打开
BogdanTheGeek 打开了这个问题 2019 年 10 月 25 日 · 17条评论
打开

闭环主轴控制#265

BogdanTheGeek 打开了这个问题 2019 年 10 月 25 日 · 17条评论

注释

闭环主轴控制 #265
极客博格丹 评论了 2019 年 10 月 25 日  

我想为主轴 PWM 实现一个闭环 PID 控制算法。我想使用带有外部反馈源(如霍尔传感器或光学传感器)的标准 BLDC ESC 来测量 RPM 并调整 PWM,以获得准确的主轴速度。

grbl 的标准版本没有实现这一点,因为我相信 ram 和计时器有限,至少对我来说,这将是 grbl_ESP32 的一个巨大的“销售因素”。

这可能只是一个以相当低的优先级在后台运行的任务。我主要使用 idf,所以我不熟悉 Arduino 核心可以访问多少。

此功能正在开发中还是我可以继续实施它?关于应将哪个 GPIO 用于反馈的任何偏好?
编辑:
这也开启了主轴失速检测的可能性,并可能节省大量立铣刀。

闭环主轴控制 #265 BogdanTheGeek 添加了 增强 新功能或要求标签 2019 年 10 月 25 日
闭环主轴控制 #265

有趣的想法。我不是软件专家,但如果实施,我肯定会使用它。

闭环主轴控制 #265
所有者

我很想知道这在 Grbl_ESP32 中的表现如何。

我认为您需要的功能在 Arduino 核心中。Grbl_ESP32 中使用的所有 GPIO 都已编写,因此用户可以在 cpu_map 中选择它。尝试将该方法用于您的 I/O。

闭环主轴控制 #265
作者
极客博格丹 评论了 2019 年 10 月 26 日  

我不太熟悉 grbl 源代码以及我应该使用的定时器等。我已经为我的想法编写了一个应该可行的实现,但由于我的 CNC 当前出现故障,我无法对其进行测试。如果我做一个拉取请求,你可以吗,@bdring查看代码是否有任何愚蠢的错误?如果有人自愿将他们的带传感器(带有任何速度传感器)的 BLDC 主轴用于一些测试和 PID 调整,我会非常感激。

这是我的测试叉子:
https ://github.com/BogdanTheGeek/Grbl_Esp32

闭环主轴控制 #265
所有者

我们可以通过您的分叉进行所有初始测试。目前不需要针对 devt 或 master 的 PR。

为您的计时器编号使用定义的常量,以便轻松更改。选择当前未使用的任何号码。

我认为在我进行任何测试或购买硬件之前,您应该选择电机和编码器并进行一些基本测试。

闭环主轴控制 #265

我有一个可以用来做一些基本测试的传感器电机,我只需要将它连接到我的一个 esp32 上。我会在周末看看我能做些什么。哪些定时器没有被使用?

闭环主轴控制 #265
所有者

现在只有 (1) 个定时器中断。它用于步骤生成。

#define STEP_TIMER_INDEX TIMER_0
闭环主轴控制 #265

我一直在修补我的MSP432 grblHAL 驱动程序中的主轴 PID 。一些提示:

  1. 如果不需要中断,可以将计数器输入直接分配给 GPIO。我现在懒得查看 ESP32 数据表,但是大多数 MCU 都允许这样做。

  2. 你真的想为 PID 循环常数分配 $-settings,在调整期间为每个更改重新刷新将是一件痛苦的事情。

  3. 可能需要更完整的 PID 算法,测试会告诉…

祝你好运!

闭环主轴控制 #265

谢谢你的提示@terjeio. 我同意你的观点,pid 设置应该可以从 grbl 设置访问。至于计数器输入,我不太确定你的意思。我真的很想找到一种不使用中断的方法,因为它们对 ESP32 来说是一种痛苦,因为你几乎必须使用队列作为中断,这会过多地重置 esp32。我有一些代码正在运行,但它非常疯狂。我必须进行一些调试以查看代码发生了什么。我真的很想实现一些可以轻松移植到其他平台但也可以利用 ESP32 功能的东西。

闭环主轴控制 #265

@BogdanTheGeek
请参阅技术参考中的第 17 章 PULSE_CNT。如果使用这些计数器之一,您可以摆脱脉冲计数中断。也许也可以使用 RMT 通道,如果时钟输入可以从 GPIO 引脚路由,甚至可以使用定时器。您必须深入研究数据表才能找到答案。当然你仍然需要一个计时器来处理采样(在 spindle_pid_task() 中)。

闭环主轴控制 #265
所有者

@BogdanTheGeek这取决于您拥有的编码器,但脉冲计数器基本上无需任何代码即可对引脚上的脉冲进行计数。然后您可以设置一个 RTOS 任务,它不会干扰步骤的时间等,以确定速度并应用更正。

它将使用 esp_timer_get_time() 和计数来确定速度。

闭环主轴控制 #265

我真的很喜欢不使用中断的想法,我认为脉冲计数器和 RTC 的组合是可行的方法,因为即使没有 RTOS 的微控制器也可以实现类似的功能。
我还考虑过使用 MCPWM 并捕获信号,但是用于控制 ESC 的代码已经使用 ledc 实现并且可以正常工作。

闭环主轴控制 #265

任何人都可以帮助我进行 $settings 吗?我不知道在哪里添加它们以及如何让它们显示在网络界面中等等。我想如果 CPU_MAP 使用反馈引脚,我将不得不使用一些 ifdef 来只包含它们,但我不确定这个 ifdef 应该在的所有地方。

闭环主轴控制 #265

在 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 选项后第一次刷新时将设置重置为默认值。

我不知道网络界面是否会自动选择新设置。

闭环主轴控制 #265
所有者

我一直避免更改设置,因为它会破坏很多 gcode 发件人。许多人不使用健壮的解析方法,并且会因最微小的变化而中断。

话虽如此,继续进行您想要的任何更改。我稍后会解决发件人问题。我建议使用 $3x 类型编号,因为这是当前主轴功能所在的位置。

可能会有一个#define ORIGINAL_SETTINGS_ONLY 类型选项。如果您需要为首选发件人选择该选项,它只会报告原始设置但支持对所有设置进行更改。

WebUI 不支持它们,但可能会忽略额外的。它需要知道描述(以多种语言)来支持它们。

闭环主轴控制 #265
terjeio 评论了 2019 年 10 月 27 日  

有点 OT 但与执行不当的发件人有关:我刚刚预发布了Grbl 的配置应用程序(仅限 Windows),IMO 简化了设置,无需弄清楚位域之类的东西或参考文档。一个完整的发件人将在稍后……

编辑:
忘记提及完整的发送者有一个 PID 日志查看器,在调整时能够以图形方式查看阶跃响应是非常有用的。缺点是它需要更多的固件更改……

闭环主轴控制 #265
贡献者

不确定这是否是离开它的正确位置,但 G76/G96 会很不错,它可以让我摆脱我的质心橡子和它的糟糕软件。似乎与“闭环”步进控制有关的问题是相关的。

我还读到有人试图使用“混合闭环步进器”时遇到同步问题。例如,由于某些瞬间跳跃,X 必须进行调整,现在它比其他步进器领先/落后几个刻度。据我所知,解决这个问题的唯一方法是排除故障。如果 grbl 看到更改,处理 G96 的相同代码将能够做一些补偿。

有一堆半测试的 grbl fork 实现了某种形式的主轴同步。@terjeio评论了其中的一堆。

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
增强新功能或要求
项目

还没有

发展

没有分支机构或拉取请求

6人参加
闭环主轴控制 #265闭环主轴控制 #265闭环主轴控制 #265闭环主轴控制 #265闭环主轴控制 #265闭环主轴控制 #265

喜欢 (0)