如何从 Windows IOT 核心中的 Raspberry pi 上的 GPIO 引脚获得更好的性能

How to get better performance out of GPIO pins on Raspberry pi in Windows IOT core

我在 raspberry pi 3 运行 windows 10 上有以下代码 运行 使用 C#

GPIO 初始化....

_gpioController = GpioController.GetDefault();
                _motorPin = _gpioController.OpenPin(Convert.ToInt32(RaspberryGPIOpin);
                _motorPin.SetDriveMode(GpioPinDriveMode.Output);   

GPIO 引脚开启关闭

_motorPin.Write(GpioPinValue.High);
_motorPin.Write(GpioPinValue.Low);

问题是在我的应用程序中打开和关闭 GPI 引脚需要 100 毫秒,但我需要它在不到 25 毫秒的时间内改变伺服的方向。

有没有办法加快 GPIO 引脚的开关速度?

或者我应该看看某种硬件控制器来控制伺服。我不想这样做。我的代码也在线程中 运行 。我应该去掉螺纹吗?

我有一个更简单的应用程序,其中的代码确实有效... https://github.com/StuartSmith/RaspberryPi-Control-Sg90-Example

Microsoft 提供了使用 raspberry pi 2 切换 GPIO 位的完整测试结果,在 https://developer.microsoft.com/en-us/windows/iot/docs/lightningperformance.

中找到它

因此您可以看到结果因 IoT 版本、驱动程序模型、.NET 本机工具链甚至编程语言而异。但在最坏的情况下,大约可以达到10kHz。

我没有测试过最新的 IoT Redstone 1 版本,但我猜它应该与 TH2 具有相似的性能。

所以,一般来说,选择闪电驱动而不是默认的内置驱动,它应该在 GPIO 端口上有更好的性能。

另外 禁用 .NET 本机工具链 也会有明显更好的性能。

我看到您正在使用 GPIO 引脚驱动伺服,在这种情况下软件时序应该足够好。但是,如果你想将它用于需要高精度的时钟源,请不要相信软件定时(照明提供商),软件抖动总是不可预测的。一个不错的选择是使用内置的 DMA 控制器,它使用硬件定时,精度应该在 1 微秒以内。

100ms 是怎么测出来的? 运行 两次 Write() 调用需要 100 毫秒,还是其中有其他代码?

我们测得每次 Write() 调用的时间为 3.6 微秒(来自 C++ 应用程序)。

由于底层堆栈的工作方式,打开引脚并设置驱动模式后的第一次 Write() 调用可能比后续调用花费更长的时间。您的测量是否包括第一次 Write() 调用?