我正在使用Chris类的新版本:
/*
* Servo NETMF Driver
* Coded by Chris Seto August 2010
* <chris@chrisseto.com>
*
* Use this code for whatveer you want. Modify it, redistribute it, I don't care.
* I do ask that you please keep this header intact, however.
* If you modfy the driver, please include your contribution below:
*
* Chris Seto: Inital release (1.0)
* Chris Seto: Netduino port (1.0 -> Netduino branch)
* Chris Seto: bool pin state fix (1.1 -> Netduino branch)
*
*
* */
using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
namespace Servo_API
{
public class Servo : IDisposable
{
/// <summary>
/// PWM handle
/// </summary>
private PWM servo;
/// <summary>
/// Timings range
/// </summary>
private int[] range = new int[2];
/// <summary>
/// Set servo inversion
/// </summary>
public bool inverted = false;
/// <summary>
/// Create the PWM Channel, set it low and configure timings
/// </summary>
/// <param name="pin"></param>
public Servo(Cpu.PWMChannel channelPin)
{
// Init the PWM pin
servo = new PWM((Cpu.PWMChannel)channelPin, 20000, 1500, PWM.ScaleFactor.Microseconds, false);
servo.DutyCycle = 0;
// Typical settings
range[0] = 1000;
range[1] = 2000;
}
public void Dispose()
{
disengage();
servo.Dispose();
}
/// <summary>
/// Allow the user to set cutom timings
/// </summary>
/// <param name="fullLeft"></param>
/// <param name="fullRight"></param>
public void setRange(int fullLeft, int fullRight)
{
range[1] = fullLeft;
range[0] = fullRight;
}
/// <summary>
/// Disengage the servo.
/// The servo motor will stop trying to maintain an angle
/// </summary>
public void disengage()
{
// See what the Netduino team say about this...
servo.DutyCycle = 0; //SetDutyCycle(0);
}
/// <summary>
/// Set the servo degree
/// </summary>
public double Degree
{
set
{
/// Range checks
if (value > 180)
value = 180;
if (value < 0)
value = 0;
// Are we inverted?
if (inverted)
value = 180 - value;
// Set the pulse
//servo.SetPulse(20000, (uint)map((long)value, 0, 180, range[0], range[1]));
servo.Duration = (uint)map((long)value, 0, 180, range[0], range[1]);
}
}
/// <summary>
/// Used internally to map a value of one scale to another
/// </summary>
/// <param name="x"></param>
/// <param name="in_min"></param>
/// <param name="in_max"></param>
/// <param name="out_min"></param>
/// <param name="out_max"></param>
/// <returns></returns>
private long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
}
}Servo servo = new Servo(PWMChannels.PWM_PIN_D5);
servo.Degree = 30; // Change 'While' to 'For' to limit how many time it repeats
for (int j = 0; j < 3; j++)
{
for (int i = 0; i <= 180; i++)
{
servo.Degree = i;
Thread.Sleep(10);
}
for (int i = 180; i >= 0; i--)
{
servo.Degree = i;
Thread.Sleep(10);
}
}在Netduino中连接3.3v gnd端口5数字伺服
我的伺服系统是:14sec.html
不工作!为什么?有人已经做了一些有用的事了?
发布于 2014-03-28 11:17:44
错过.start()
我的班,工作100% Netduino -伺服类,.NET 4.3.1
using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
namespace Servo_API
{
public class Servo : IDisposable
{
/// <summary>
/// PWM handle
/// </summary>
private PWM servo;
/// <summary>
/// Timings range
/// </summary>
private int[] range = new int[2];
/// <summary>
/// Set servo inversion
/// </summary>
public bool inverted = false;
/// <summary>
/// Create the PWM Channel, set it low and configure timings
/// </summary>
/// <param name="pin"></param>
public Servo(Cpu.PWMChannel channelPin)
{
// Init the PWM pin
// servo = new PWM((Cpu.PWMChannel)channelPin, 20000, 1500, PWM.ScaleFactor.Microseconds, false);
servo = new PWM(PWMChannels.PWM_PIN_D5, 20000, 1500, Microsoft.SPOT.Hardware.PWM.ScaleFactor.Microseconds, false);
servo.Period = 20000;
// Typical settings
range[0] = 1000;
range[1] = 2000;
}
public void Dispose()
{
disengage();
servo.Dispose();
}
/// <summary>
/// Allow the user to set cutom timings
/// </summary>
/// <param name="fullLeft"></param>
/// <param name="fullRight"></param>
public void setRange(int fullLeft, int fullRight)
{
range[1] = fullLeft;
range[0] = fullRight;
}
/// <summary>
/// Disengage the servo.
/// The servo motor will stop trying to maintain an angle
/// </summary>
public void disengage()
{
// See what the Netduino team say about this...
servo.DutyCycle = 0; //SetDutyCycle(0);
}
/// <summary>
/// Set the servo degree
/// </summary>
public double Degree
{
set
{
/// Range checks
if (value > 180)
value = 180;
if (value < 0)
value = 0;
// Are we inverted?
if (inverted)
value = 180 - value;
// Set the pulse
//servo.SetPulse(20000, (uint)map((long)value, 0, 180, range[0], range[1]));
servo.Duration = (uint)map((long)value, 0, 180, range[0], range[1]);
servo.Start();
}
}
private long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
}
}我称之为:
Servo tt = new Servo(Cpu.PWMChannel.PWM_5);
tt.Degree = 30;
tt.setRange(1000, 2000);
tt.Dispose();
}发布于 2014-03-27 21:23:28
我没有使用那个库,但伺服不应该由3.3v供电,你应该把它单独连接到5v引脚。
您可以尝试的另一件事是创建一个新的PWM:
PWM servo = new PWM(Pins.GPIO_PIN_D9);还有,所以我们可以帮忙,你应该描述它的行为.如果它抽搐,慢慢移动,什么的.再加上你连接它的方式(图表,照片)。
https://stackoverflow.com/questions/22699174
复制相似问题