如何使伺服转到某个角度,例如60度
本文关键字:例如 60度 何使 伺服 | 更新日期: 2023-09-27 18:03:58
我已经得到了下面的代码,来回转动伺服,一遍又一遍。我让它工作,但我怎么能创建一个函数,设置它到一定程度…比如60 ?
我的当前代码:
public static void Main()
{
PWM servo = new PWM(PWMChannels.PWM_PIN_D5, 100, .5, false);
servo.Start();
while (true)
{
double startValue, endValue;
for (startValue = 4.712; startValue < 10.995; startValue = startValue + 0.0005)
{
endValue = System.Math.Sin(startValue) * 0.5 + 0.5;
servo.DutyCycle = endValue;
}
}
}
例如,我如何设置60度,然后能够设置为164度?
您需要运行您的代码,对伺服位置进行一些测量,然后将这些测量结果返回给您的程序,以便它可以适当地调整自己。这就是所谓的调整和校准。
你应该结束一个函数,谁的输入是一个所需的角度,谁的输出是你需要命令到伺服的PWM值。在移动伺服之前调用此函数。
注意:你的代码中的循环有点奇怪,所以我不知道你的特定伺服是如何控制的。PWM控制基于它们的占空比工作,占空比是它们相对于低或0到100%的高时间比。对于这个答案,这相当于一个0.0到1.0的PWM值。当然,你必须自己把这些思想和公式集成到你的代码中。
要确定您的校准系数(这将是gain
和offset
在最简单的转换,假设伺服控制是线性的。y = mx + b
,其中gain
为m
, offset
为b
):
- 启动它,并将PWM设置为最小值(假设最小值为0)。
- 测量伺服角度
- 将PWM设置为最大值(假设最大值为1.0)。
- 测量伺服角度
我做了一些假设并任意选择数字,但假设测量值是:
- -10度,PWM设置为0(最小)。
- +80度,PWM设置为1(最大值)。
我们称这些测量为:
x1 = angle1 = -10;
y1 = pwm1 = 0;
x2 = angle2 = 80;
y2 = pwm2 = 1;
我们有两个x
的值,两个y
的值,所以你可以解联立方程y1 = x1 * m + b
和y2 = x2 * m + b
。由于m
是gain
, b
是offset
,我们最终得到以下等式:
y = (1/90) * x + (1/9)
或
gain = 1/90;
offset = 1/9;
dacValue = gain * angle + offset;
现在,假设伺服是可重复的,并且PWM控制是线性的,当请求45度时,您将使用上面的公式应用系数并得到0.6111的答案。你用这个命令你的PWM,你的伺服应该移动。如果你测量伺服位置,它应该在45度。
请注意,由于伺服、电子电路、机械连接等的变化,系统中的每个伺服系统的增益和偏移量可能会有所不同。如果系统的任何部分被修改,您可能需要重新校准该伺服系统。
如果范围不是线性的,这会变得更复杂(例如,伺服移动更接近最大值,而最小值更少)。你需要使用二次方程,高阶方程,或者完全不同的方程。选择取决于你能容忍伺服位置的误差。
如果伺服不可重复(例如每次去一个特定的PWM值,伺服停止在不同的点),控制也将是困难的。
还要注意,这是开环控制,至少在您的系统中是这样。在伺服系统中,存在一个非常相似的控制回路。而不是angle to PWM
,它是PWM to position
,其中的位置可能没有校准到一些现实世界的角度。这就是为什么你需要在程序中处理这个工作。