2017-01-04 17 views
1

私はWindows 10のIoTでラズベリーパイ3を持っています。私はパルスを送信するセンサーからデータを取得したいと思います。すなわち、スイスフローSF800 link。このセンサは、センサを通過する流量に等しい量のパルスを送出する。データシートには2kHzまで送信すると書かれています。Windows 10 IoT GPIO割り込み頻度

私の質問は、ラズベリーパイのGPIOがこの割り込み頻度を処理するのでしょうか?私は繁栄のプロバイダhttps://developer.microsoft.com/en-us/windows/iot/docs/lightningprovidersを見てきましたが、これは大きなパフォーマンスが期待されていますが、どのような種類のパフォーマンスが期待されるのかに関するドキュメントは見つかりません。

答えて

0

私が必要とした割り込み頻度を達成するためには、最初に雷のドライバを使う必要があると思っていました。標準のInbox Driverが必要なものに適していることが判明しました。ここで

は、私の状況を再現する手順は、次のとおりです

私は万ヘルツのレートでパルスを送信し、簡単なArduinoのスケッチを作成しました。

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); 
} 

ページの中央にTextBlockを持つ簡単なUIを持つ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のピンに接続することでした。私はこれを行って、PiのGPIOピンに内蔵されているプルアップ抵抗を利用できるようにしました。

両方のアプリケーションを同時に実行すると、サイクルあたり約30パルスしか収集されませんでした。

Windows IoTセットアップに戻り、ドライバを受信トレイドライバにリセットして、両方のアプリケーションを再インストールします。今回私は脈を見逃さなかった。

結論として、受信トレイドライバは、問題なく10khzまで私に与えてくれるはずです。

1

現在、GPIO割り込みの公式ベンチマークはありません。

ここにはWindows IoT Lightning Performance Testingです。可能な限り速い速度でGPIO 5を0と1の間で切り替えることで、GPIOのパフォーマンスをテストしました。少なくとも17.4kHzが達成できるようです。

およびGPIO interrupt event should be pushed into the queueは失われません。

したがって、上記の情報に基づいて、2kHzの間、アプリケーションは時間内に、欠落することなく、そのような速度割り込みイベントを処理できます。

気軽にお気軽にご利用ください。

+0

私はarduinoのテストを実行して、Piでパルスを押して結果を確認します。私は一度それを共有します。 –

関連する問題