2017-01-20 23 views
1

После долгих поисков я решил задать здесь. Как я могу управлять двигателями постоянного тока с помощью драйвера Pololu DRV8835? Я попытался использовать библиотеку Microsoft.IoT.Lightning, но частота кажется слишком низкой. В Python library частота этого драйвера составляет 20 кГц. Когда я попытался изменить эту библиотеку, сборка сделала исключение из-за несуществующих целей (но они даже не появились после создания библиотеки).Управление двигателями постоянного тока в C# с DRV8835 и Raspberry Pi

Это мой код:

public async Task Initialize() 
    { 
     try 
     { 
      if (!LightningProvider.IsLightningEnabled) 
      { 
       throw new Exception("No lightning provider detected!"); 
      } 

      LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider(); 

      Gpio = await GpioController.GetDefaultAsync(); 

      APhase = Gpio.OpenPin(19); 
      BPhase = Gpio.OpenPin(6); 

      APhase.SetDriveMode(GpioPinDriveMode.Output); 
      BPhase.SetDriveMode(GpioPinDriveMode.Output); 

      Pwm = await PwmController.GetDefaultAsync(); 
      Pwm.SetDesiredFrequency(1000); 

      AEnable = Pwm.OpenPin(26); 
      BEnable = Pwm.OpenPin(13); 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 
    } 

    private bool stopMove = true; 

    private double speed = 1; 

    public void StopMove() 
    { 
     stopMove = true; 
    } 

    public async Task MoveForward() 
    { 
     await Task.Delay(1); 
     stopMove = false; 

     APhase.Write(GpioPinValue.Low); 
     BPhase.Write(GpioPinValue.Low); 

     AEnable.SetActiveDutyCyclePercentage(speed); 
     BEnable.SetActiveDutyCyclePercentage(speed); 

     Debug.WriteLine("Starting..."); 

     AEnable.Start(); 
     BEnable.Start(); 

     while (!stopMove) { } 

     AEnable.Stop(); 
     BEnable.Stop(); 

     AEnable.SetActiveDutyCyclePercentage(0); 
     BEnable.SetActiveDutyCyclePercentage(0); 
    } 

    public async Task MoveBackward() 
    { 
     await Task.Delay(1); 
     stopMove = false; 

     APhase.Write(GpioPinValue.High); 
     BPhase.Write(GpioPinValue.High); 

     AEnable.SetActiveDutyCyclePercentage(speed); 
     BEnable.SetActiveDutyCyclePercentage(speed); 

     AEnable.Start(); 
     BEnable.Start(); 

     while (!stopMove) { } 

     AEnable.Stop(); 
     BEnable.Stop(); 

     AEnable.SetActiveDutyCyclePercentage(0); 
     BEnable.SetActiveDutyCyclePercentage(0); 
    } 

Кто-нибудь знает любой рабочий раствор?

ответ

0

Есть два способа вы можете попробовать:

Во-первых, с использованием библиотеки Microsoft.IoT.Lightning. Существует два поставщика ШИМ:

  • Software simulate PWM. Но вы можете увидеть max frequency is 1kHz. Чтобы использовать более высокую частоту, вы можете изменить константу и ссылаться на исходный код молнии для вашего проекта, а не на самородок. Тем не менее, поскольку он использует время программирования программного обеспечения, вы могли бы отключить сигналы в своей агрессивной попытке.
  • PCA9685. Для этого вам нужно a external PCA9685 module and some electronic circuits. Аналогично, вам нужен исходный код ссылки, чтобы изменить максимальную частоту, определенную.

Во-вторых, используя драйвер без коробки BSP. Этот драйвер поддерживает встроенное PWM-оборудование. Попытайтесь использовать более высокую частоту, чтобы увидеть, соответствует ли генерируемый сигнал вашему требованию.

+0

Я попытался изменить эту библиотеку, но сборщик процессов «Файл полезной нагрузки» (мой рабочий стол) \ lightning-develop \ Providers \ Microsoft.IoT.Lightning.Providers.targets 'не существует. " – Nick14