Как повысить производительность контактов GPIO на Raspberry Pi в ядре Windows IOT

У меня есть следующий код, работающий на Raspberry Pi 3 под управлением Windows 10 с использованием С #

GPIO init ....

_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


person Stuart Smith    schedule 24.09.2016    source источник
comment
Боюсь, что это нелегко сделать с помощью UWP, особенно если ядро ​​Windows iot не является операционной системой времени чтения. Однако, если вы хотите иметь точный контроль над переключением gpio, вы можете использовать встроенный контроллер DMA.   -  person Jackie    schedule 25.09.2016
comment
Спасибо, ваш ответ привел меня к провайдеру молний для контактов GPIO. Я проверю это, чтобы увидеть, смогу ли я получить необходимую мне производительность.   -  person Stuart Smith    schedule 26.09.2016
comment
Да, поставщик освещения утверждает, что имеет лучшую производительность по сравнению с драйвером почтового ящика по умолчанию, msdn предоставляет подробный результат тестирования переключения бита GPIO, developer.microsoft.com/en-us/windows/iot/docs/.   -  person Jackie    schedule 26.09.2016


Ответы (2)


Microsoft предоставляет полный результат теста переключения бита GPIO с помощью raspberry pi 2, его можно найти в https://developer.microsoft.com/en-us/windows/iot/docs/lightningperformance.

Таким образом, вы можете видеть, что результат зависит от версии IoT, модели драйвера, собственного набора инструментов .NET и даже языков программирования. Но в худшем случае можно достичь примерно 10 кГц.

Я не тестировал последнюю версию IoT Redstone 1, но предполагаю, что она должна иметь аналогичную производительность с TH2.

Итак, в общем, выберите драйвер молнии вместо драйвера папки входящих сообщений по умолчанию, он должен иметь лучшую производительность на портах GPIO.

Кроме того, отключение собственного набора инструментов .NET также значительно повысит производительность.

Я вижу, что вы используете вывод GPIO для управления сервоприводом, в этом случае программная синхронизация должна быть достаточно хорошей. Однако, если вы хотите использовать его для источника синхронизации, которому требуется высокая точность, не доверяйте программному обеспечению синхронизации (поставщику освещения), программный джиттер всегда непредсказуем. Хорошей альтернативой является использование встроенного контроллера DMA, который использует аппаратную синхронизацию и должен иметь точность в пределах 1 микросекунды.

person Jackie    schedule 26.09.2016

Как вы измерили 100 мс? 100 мсек, сколько времени потребовалось для выполнения двух вызовов Write (), или там был другой код?

Мы измерили время каждого вызова Write () на 3,6 микросекунды (из приложения C ++).

Первый вызов Write () после открытия вывода и установки режима привода может занять больше времени, чем последующие вызовы, из-за того, как работает базовый стек. Включено ли ваше измерение в первый вызов функции Write ()?

person Jordan    schedule 01.10.2016
comment
Это не ответ на вопрос. Если у вас есть вопрос, я бы порекомендовал вам опубликовать новый с вашим делом и сценарием. - person AVK; 01.10.2016
comment
Измерения проводились в среде разработки Visual Studio. Измерения проводились в цикле for, и время было примерно одинаковым во всех случаях. - person Stuart Smith; 02.10.2016