经过长时间的搜索,我决定在这里问一下。
如何使用Pololu DRV8835电机驱动器控制直流电机?
我试图使用Microsoft.IoT.Lightning
库,但频率似乎太低了。在Python library中,此驱动器频率为20 kHz。
当我尝试修改此库时,由于不存在的目标,构建引发了异常(但在构建库后它们甚至没有出现)。
这是我的代码:
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 :(得分:0)
有两种方法可以尝试:
首先,使用Microsoft.IoT.Lightning库。有两个PWM控制提供商:
其次,使用开箱即用的驱动程序BSP。该驱动器支持片上PWM硬件。尝试使用更高的频率来查看生成的信号是否符合您的要求。