This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM4378:读取 GPIO 上的高频编码器

Guru**** 2931100 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/662068/am4378-reading-high-frequency-encoder-on-gpio

器件型号:AM4378

您好!

我的设置涉及4个有刷直流电机、这些电机具有高分辨率编码器(55000个周期/旋转)、我将使用 AM437x 板对其进行控制。 我使用 EHRPWM 通过改变 PWM 占空比来改变电机速度。 编码器的输出连接到一个普通 GPI 引脚、我已将该引脚配置为使用/sys/interface 在上升沿触发。  我已经了解了 eCAP 模块、但是它们目前正被其他一些硬件使用、不可用于此目的。

当值文件发生更改时、epole_wait 会通知我、即接收到编码器节拍。 每个电机都有四个这样的线程在运行、这会增加编码器计数、而另一个线程则执行其余的处理(PID、错误检查等)。 每个线程的重量都很轻、处理线程大约需要20us。 当编码器输出频率在8-10kHz 范围内时、该设置在低速时工作正常。 但是、当我提高速度并且编码器频率上升到大约20kHz 时、编码器线程错过了相当多的节拍。 我知道在上下文切换和其他处理中会花费一些时间、但即使如此、我也不应错过超过50%的节拍、这是在我的案例中发生的。 这是尽管为编码器线程提供了非常高的调度优先级。 是否有办法提高线程开关频率? 我是否达到了任何硬件上限? 有没有更好的方法来解决这个问题?

感谢你能抽出时间!

Puneeth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是什么软件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用的是从 TI SDK 编译的 Linux 内核。 用于控制 EHRPWM、GPIO 等 我使用的是通过 sysfs 接口上的 C++(使用 g++编译)进行的简单系统调用。 我使用 pthread 进行多线程处理。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    可以在控制台上发布什么 uname -a returns? 您是否正在使用 RT Linux SDK? 哪个版本? 从应用的说明中可以看到、您需要一个非常确定的系统。

    您是否还可以发布您如何设置线程优先级?

    此致、
    Schuyler
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我们尚未看到对上一帖子的回复、因此我们假设您已成功找到所需的答案。

    此致、
    Schuyler