Я хотел бы получить частотный и рабочий цикл двух сигналов ШИМ (т. Е. ШИМ-входы) и установить их для другого (т. Е. Выход ШИМ) в зависимости от входов. Эти ШИМ-сигналы имеют рабочий цикл 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
Ok @ Servé, мне здорово, что RPi (то есть малина Pi) не является системой реального времени. Затем, как бы вы использовали MS-IoT (например, Microsoft IoT Lightning) Lightning? В чем его цель? –
Я не знаю об этой библиотеке. Посмотрев на источник, кажется, что он создан для Ардуино. может кто-то может помочь – Laurijssen
посмотрим, может ли кто-нибудь помочь;) –