2017-01-04 9 views
1

У меня есть малина pi 3 с Windows 10 IoT. Я хотел бы получить данные от датчика, который посылает импульсы. А именно швейцарский поток SF800 link. Этот датчик будет посылать количество импульсов, равное количеству потока через датчик. В техническом описании указано, что я отправлю до 2 кГц.Windows 10 IoT GPIO частота прерывания

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

ответ

0

Первоначально я подозревал, что мне нужно будет использовать драйвер молнии, чтобы достичь частоты прерывания, в которой я нуждался. Оказывается, стандартный драйвер Inbox достаточно для того, что мне нужно.

Вот шаги, чтобы воспроизвести мою ситуацию:

Я создал простой Arduino эскиз, который будет посылать импульсы со скоростью 10000 Гц.

int dataPin = 12; 

void setup() { 
    pinMode(dataPin, OUTPUT); 
} 

void loop() { 
    int count = 0; 
    while (count < 400) 
    { 
     //pulse 
     digitalWrite(dataPin, HIGH); 
     digitalWrite(dataPin, LOW); 
     //This delay presumably makes the pulse be 10000 Hz 
     delayMicroseconds(100); 
     count++; 
    } 
    delay(5000); 
} 

Создано приложение UWP с простым пользовательским интерфейсом, который имеет текстовый блок в центре страницы.

public sealed partial class MainPage : Page 
    { 
     private GpioController gpio; 

     private const int inputPinNumber = 17; 

     private GpioPin inputPin; 

     private int count; 

     private I2cController i2cController; 

     private SpiController spiController; 

     public MainPage() 
     { 
      this.InitializeComponent(); 
      this.Setup(); 
     } 

     private void Setup() 
     { 
      if (LightningProvider.IsLightningEnabled) 
      { 
       LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider(); 
      } 

      this.gpio = GpioController.GetDefault(); 


      this.inputPin = this.gpio.OpenPin(inputPinNumber); 
      if (this.inputPin.IsDriveModeSupported(GpioPinDriveMode.InputPullUp)) 
      { 
       this.inputPin.SetDriveMode(GpioPinDriveMode.InputPullUp); 
      } 
      else 
      { 
       this.inputPin.SetDriveMode(GpioPinDriveMode.Input); 
      } 

      this.inputPin.ValueChanged += InputPinOnValueChanged; 
     } 

     private void InputPinOnValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args) 
     { 

      var task = Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => { 
       if (args.Edge == GpioPinEdge.FallingEdge) 
       { 
        this.count++; 
        this.CountBlock.Text = this.count.ToString(); 
       } 
       else 
       { 
        } 
      }); 
     } 
    } 
} 

Установить Windows IoT на использование драйвера с прямой памятью.

Следующим шагом было подключение штыря на Arduino с помощью штифта на Pi через транзистор. Я сделал это, чтобы я мог использовать встроенный резистор Pull-Up на контактах GPIO на Pi.

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

Вернулся в настройку Windows IoT и сбросил драйвер обратно в драйвер Inbox и повторил оба приложения. На этот раз я не пропустил пульса.

В заключение необходимо, чтобы драйвер Inbox был достаточным, чтобы дать мне до 10 кГц без каких-либо проблем.

1

На данный момент нет официальных контрольных точек прерывания GPIO.

Адрес Windows IoT Lightning Performance Testing. Он тестировал производительность GPIO, переключая GPIO 5 между 0 и 1 с максимально возможной скоростью. Кажется, по крайней мере 17,4 кГц может быть достигнуто.

И GPIO interrupt event should be pushed into the queue и не будет потерян.

Таким образом, на основе вышеприведенной информации, для 2 кГц, приложение сможет обрабатывать такое событие прерывания скорости во времени и без пропусков.

Не стесняйтесь использовать его, и если есть какие-либо проблемы, пожалуйста, дайте мне знать.

+0

Я собираюсь запустить тест с ардуино, чтобы надавить импульсы на Pi и проверить мои результаты. Я поделюсь ими, как только я это сделаю. –

Смежные вопросы