Contact me: hankecnc@gmail.com

从外部中断触发实时线程 #213

推推 grbl 3年前 (2023-01-29) 493次浏览
打开
jmelson 打开了这个问题 2016 年 11 月 21 日 · 11 条评论
打开

从外部中断触发实时线程#213

jmelson 打开了这个问题 2016 年 11 月 21 日 · 11 条评论

注释

从外部中断触发实时线程 #213
合作者

我想问一下是否可以从外部中断触发实时线程。Pico Systems 板都可以锁存编码器计数并通过并行端口生成定期中断。这会将位置采样抖动降低到板上石英振荡器的抖动。只要实时线程在下一个时钟滴答之前完成,RT 抖动将不复存在。

这将需要 loadrt emcmot 命令行接受中断号而不是线程周期。

从外部中断触发实时线程 #213
合作者

你可以有一个将线程同步到某个外部时钟的 pll。
ethercat 这样做:https ://github.com/sittner/linuxcnc-ethercat/blob/master/patches/add-task-pll-functions.patch

从外部中断触发实时线程 #213
合作者

Mesa 固件中也有 DPLL。
http://linuxcnc.org/docs/2.7/html/man/man9/hostmot2.9.html#dpll(锚点位于标题下方)。我认为这是为了做同样的事情。
不过,似乎确实可以通过并行端口在 Linux 中触发中断:https
://www.oreilly.com/library/view/linux-device-drivers/0596005903/ch10.html 那么问题就变成了是否这给出了比 RTAPI 计时器更实时的行为。

从外部中断触发实时线程 #213
贡献者

IIRC 几年前在 emc-developers list 上讨论过这个话题。这至少在 Machinekit 的路线图上,但我认为它从未实现过。

链接到@sittner的代码,由粘贴@rene-dev上面(并合并到 Machinekit 中)是我实际看到的唯一一个遵循外部硬件而不是内部时钟的 RT 线程计时的实现。它应该是开发此功能的指导性示例。

从外部中断触发实时线程 #213

应该有可能足够早地唤醒“接近”预期中断的线程,然后在 pin 上忙等待(当然有一些超时)。

从外部中断触发实时线程 #213
合作者

Machinekit 有一种使用 Mesa PCI 中断来触发 RT 线程的方法(我认为 Charles S 致力于此)在这种情况下,他们使用 DPLL 速率生成器作为主机而不是从机。

从外部中断触发实时线程 #213
合作者

这样做有什么好处吗?

从外部中断触发实时线程 #213
合作者

我猜你会以必须在驱动程序中包含中断代码为代价获得较低的抖动
我认为使用硬件设备作为主要定时源的一个可能缺点是你可能无法将它用作绝对时间参考(应该是可能与 LinuxCNCs TOD 同步线程)

从外部中断触发实时线程 #213
合作者作者
杰梅尔森 评论了 2018 年 11 月 16 日 通过电子邮件
从外部中断触发实时线程 #213

在这种情况下(“一个真正的伺服系统”)主机时钟的抖动应该没有那么重要,因为硬件可以对编码器进行采样并在它自己的时钟滴答时锁存新的速度。主机只需在这两个时钟滴答之间的任何时间使用硬件的时间戳进行计算。

即使您将中断传递到 linux 以唤醒伺服线程,我怀疑延迟或抖动也不会改善太多,因为首先导致抖动的任何原因都可能会干扰唤醒线程,无论导致它的事件如何. 至少在 RT 抢占的情况下。

从外部中断触发实时线程 #213
合作者作者
杰梅尔森 评论了 2018 年 11 月 16 日 通过电子邮件
从外部中断触发实时线程 #213
贡献者

Machinekit 有一种使用 Mesa PCI 中断来触发 RT 线程的方法(我认为 Charles S 致力于此)在这种情况下,他们使用 DPLL 速率生成器作为主机而不是从机。

@cdsteinkuehler

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
还没有
项目

还没有

发展

没有分支机构或拉取请求

6人参加
从外部中断触发实时线程 #213从外部中断触发实时线程 #213从外部中断触发实时线程 #213从外部中断触发实时线程 #213从外部中断触发实时线程 #213从外部中断触发实时线程 #213

喜欢 (0)