【问题标题】:Increasing GPIO switching speed提高 GPIO 切换速度
【发布时间】:2022-01-14 19:12:49
【问题描述】:

我正在做一个小项目,我希望看到使用带有 PI 4 的 NEOPIXEL WS2812B 来实现。我想我可能会遇到硬件限制,我很好奇它周围是否有任何问题。这是我正在使用的代码

void send1()
{
    //T1H
    digitalWrite(DATA, HIGH);
    //usleep(0.85);
    //T1L
    digitalWrite(DATA, LOW);
    //usleep(0.4);
}

如您所见,我已经注释掉了 usleep 的内容,因为我遇到了时间问题,我想看看我可以获得的最大切换速度。

这样我得到了大约 1.200us 的切换速度。 Neopixels 需要 0.4 和 0.85us 的切换速度才能正常工作。有没有人有任何建议可以帮助降低这个数字?我只是使用普通的 gpio pin。我对玩 pi 比较陌生,所以我不知道所有的技巧。

我确实在 pinout.xyz 上看到了这个

GPIO 18 的 PWM0 输出特别有用,结合 一些快速、直接的内存访问技巧,用于驱动具有 非常具体的时间。 Unicorn HAT 上的 WS2812 LED 非常好 实际操作中的示例。

这似乎很有希望,因为我使用的 LED 型号相同。但它并没有真正说明更多的技巧。

【问题讨论】:

  • 我自己没有测试过这个,但我很确定neopixels可以与树莓派一起使用。由于以上是您可以获得的最快速度(我假设您正在使用wiringpi?),这应该没问题。你能分享提到所需切换速度的部分吗?
  • 第一步是转到内核驱动程序,以防您在此硬件上运行操作系统。如果没有帮助,您需要确保您的操作系统支持实时操作。

标签: raspberry-pi gpio raspberry-pi4


【解决方案1】:

直接回答

您可以在 rpi 上尝试以下任何 gpio 库,

进一步的建议

不建议直接从树莓派生成 PWM 信号,因为 linux 内核不是为实时应用而设计的,任何其他更高优先级的进程都可以从任何正在运行的进程中接管 CPU,所以基本上你不能确保具有恒定的 PWM 信号输出。在您的情况下,NEOPIXEL LED 可能会闪烁或稍微改变颜色。

如果您需要更好的 PWM 输出质量,建议您使用小型 I2C PWM 模块,例如许多基于 PCA9685 的板。您的树莓派只有在需要更新值时才会通过 I2C 接口控制模块,因此您的 CPU 会为您的其他应用程序保存。

【讨论】:

  • Pi 确实支持硬件 PWM。我不确定它是否可以用于手头的任务,但总的来说,它们工作得很好。
  • 我很抱歉,但这不是答案。我完全了解可用的 gpio 库。我也对 PWM 输出的功能有所了解。这不是我要找的。我试图从wiringPi中挤出性能。或者关于使用更快的库的好建议。我的主要问题是他们是如何在独角兽帽子上做到这一点的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多