2016-10-12 1 views
4

Я хотел бы получить частотный и рабочий цикл двух сигналов ШИМ (т. Е. ШИМ-входы) и установить их для другого (т. Е. Выход ШИМ) в зависимости от входов. Эти ШИМ-сигналы имеют рабочий цикл 50%, а их диапазон частот от 1 кГц до 20 кГц.Как использовать MS-IoT Lightning для установки/получения PWM с помощью малины Pi2?

Я проверил сеть немного, и я нашел библиотеку Microsoft IoT Lightning (то есть автобусные провайдеры) из ядра IoT Windows 10. Кажется, что эта библиотека мне нужна, даже с примером PWM Consumer!
Однако, хотя я тестировал свой первый пример на основе PWM Consumer, я заметил, что диапазон частот PWM-контроллера ограничен с 40 Гц до 1 кГц. Следовательно, первый вопрос: частотный диапазон не поддерживается.
Кроме того, в то время как свойство PWM Controller «ActualFrequency» возвращает частоту, заданную с помощью «SetDesiredFrequencyMethod», объекты PWMPin предоставляют только информацию о текущем рабочем цикле.

Следовательно, я искал Google для поиска ответа, и я нашел this question, что смущает меня даже больше, чем две предыдущие проблемы.

Знаете ли вы, если это возможно, и как использовать MS-IoT Lightning Library для установки/получения сигналов ШИМ с 1 кГц до 20 кГц на малине Pi2?

Здесь несколько строк кода из примера:

public async void Run(IBackgroundTaskInstance taskInstance) 
    { 
     if (!LightningProvider.IsLightningEnabled) 
     { 
      // Lightning provider is required for this sample 
      return; 
     } 

     var deferral = taskInstance.GetDeferral(); 

     // Use the PAC9685 PWM provider, LightningPCA9685PwmControllerProvider 
     pwmController = (await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider()))[0]; 
     motorPin = pwmController.OpenPin(0); 
     secondMotorPin = pwmController.OpenPin(1); 

     //// To use the software PWM provider, LightningSoftwarePwmControllerProvider, with GPIO pins 5 and 6, 
     //// uncomment the following lines and comment the ones above 
     //pwmController = (await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider()))[1]; 
     //motorPin = pwmController.OpenPin(5); 
     //secondMotorPin = pwmController.OpenPin(6); 

     pwmController.SetDesiredFrequency(50); 
     motorPin.SetActiveDutyCyclePercentage(RestingPulseLegnth); 
     motorPin.Start(); 
     secondMotorPin.SetActiveDutyCyclePercentage(RestingPulseLegnth); 
     secondMotorPin.Start(); 

     timer = ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick, TimeSpan.FromMilliseconds(500)); 
    } 

    private void Timer_Tick(ThreadPoolTimer timer) 
    { 
     iteration++; 
     if (iteration % 3 == 0) 
     { 
      currentPulseLength = ClockwisePulseLength; 
      secondPulseLength = CounterClockwisePulseLegnth; 
     } 
     else if (iteration % 3 == 1) 
     { 
      currentPulseLength = CounterClockwisePulseLegnth; 
      secondPulseLength = ClockwisePulseLength; 
     } 
     else 
     { 
      currentPulseLength = 0; 
      secondPulseLength = 0; 
     } 

     double desiredPercentage = currentPulseLength/(1000.0/pwmController.ActualFrequency); 
     motorPin.SetActiveDutyCyclePercentage(desiredPercentage); 

     double secondDesiredPercentage = secondPulseLength/(1000.0/pwmController.ActualFrequency); 
     secondMotorPin.SetActiveDutyCyclePercentage(secondDesiredPercentage); 
    } 

Все самое лучшее, Lorenzo

ответ

0

Raspberry PI не является системой реального времени (он имеет кэш и предсказание ветвлений), поэтому он не может обрабатывать ШИМ-сигналы именно так. Он просто не может точно измерять микросекундные тайминги, когда инструкция вызывает обновление кеша или слишком много, если утверждения не дают их предсказания. Microsoft IoT Lightning дает arduino в качестве примера, который находится в режиме реального времени.

+0

Ok @ Servé, мне здорово, что RPi (то есть малина Pi) не является системой реального времени. Затем, как бы вы использовали MS-IoT (например, Microsoft IoT Lightning) Lightning? В чем его цель? –

+0

Я не знаю об этой библиотеке. Посмотрев на источник, кажется, что он создан для Ардуино. может кто-то может помочь – Laurijssen

+0

посмотрим, может ли кто-нибудь помочь;) –

1

Основание молнии IoT, по-видимому, имеет ограничение программного обеспечения на выходной частоте контроллера ШИМ, см. Это file.

Не уверен, что это сработает, но то, что стоит сделать, это сделать клон молнии repository, изменить константы Max/MinFrequency, построить проект и ссылаться на него непосредственно в исходном проекте, вместо ссылки на nuget пакет.

Я с нетерпением жду, когда этот подход будет проверен с помощью области.

В качестве альтернативы вместо использования драйвера Lightning используйте драйвер inbox по умолчанию, драйвер устройства pwm, для которого можно найти в here, попробуйте посмотреть, можете ли вы использовать более высокую частоту выше 1 кГц.

+0

спасибо за ссылку драйвера BCM! На данный момент я только что решил проблему, перейдя в linux и используя библиотеку [PiGPIO library] (http://abyz.co.uk/rpi/pigpio/), daemon и python. Поэтому я смог читать и генерировать ШИМ от внешнего источника и к нему. –

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