我在使用C#运行Windows 10的树莓派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提供了关于使用树莓派2切换GPIO位的完整测试结果,请在https://developer.microsoft.com/en-us/windows/iot/docs/lightningperformance中找到它。
因此,您可以看到结果因IoT版本,驱动程序模型,.NET本机工具链甚至编程语言而异。但是在最坏的情况下,大约可以达到10kHz。
我尚未在最新的IoT Redstone 1版本上进行测试,但我猜它应该与TH2具有相似的性能。
因此,通常,选择闪电驱动程序而不是默认的内置驱动程序,应该可以在GPIO端口上获得更好的性能。
同样,禁用.NET本机工具链也将具有明显更好的性能。
我看到您正在使用GPIO引脚来驱动伺服器,在这种情况下,软件时序应该足够好。但是,如果要将其用于需要高精度的时钟源,则不要相信软件时序(照明提供商),则软件抖动总是不可预测的。一种不错的选择是使用内置DMA控制器,该控制器使用硬件时序,并且精度应在1微秒内。