[英]No GPIO controller on Raspberry Pi 3 with Windows 10 IoT
[英]How to get better performance out of GPIO pins on Raspberry pi in Windows IOT core
我在使用 C# 运行 Windows 10 的 raspberry pi 3 上运行以下代码
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 中找到。
因此您可以看到结果因物联网版本、驱动程序模型、.NET 原生工具链甚至编程语言而异。 但在最坏的情况下,可以达到大约 10kHz。
我还没有对最新的 IoT Redstone 1 版本进行测试,但我猜它应该具有与 TH2 相似的性能。
所以,一般来说,选择 Lightning 驱动程序而不是默认的内置驱动程序,它应该在 GPIO 端口上有更好的性能。
此外,禁用 .NET 本机工具链也将具有明显更好的性能。
我看到您正在使用 GPIO 引脚来驱动伺服,在这种情况下,软件时序应该足够好。 但是,如果要将其用于需要高精度的时钟源,请不要相信软件时序(照明供应商),软件抖动总是不可预测的。 一种不错的选择是使用内置DMA 控制器,它使用硬件定时,精度应在 1 微秒内。
你是如何测量100ms的? 运行两次 Write() 调用需要 100 毫秒,还是那里有其他代码?
我们以 3.6 微秒(来自 C++ 应用程序)测量了每个 Write() 调用。
由于底层堆栈的工作方式,打开引脚并设置驱动模式后的第一次 Write() 调用可能比后续调用花费的时间更长。 您的测量是否包括第一个 Write() 调用?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.