gpt4 book ai didi

c# - 如何使 Helm 机转到某个角度,例如 60 度

转载 作者:行者123 更新时间:2023-11-30 22:06:18 25 4
gpt4 key购买 nike

我有以下代码可以来回转动伺服系统,一遍又一遍。我让它工作了,但是我怎样才能创建一个函数来将它设置到一定程度……例如 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 度?

最佳答案

您需要运行您的代码,对 Helm 机位置进行一些测量,然后将这些测量值返回给您的程序,以便它可以适本地 self 调整。这称为调整和校准。

你最终应该得到一个函数,它的输入是一个所需的角度,而它的输出是你需要向伺服系统发出命令的 PWM 值。在移动伺服之前调用此函数。

注意:你代码中的循环有点奇怪,所以我不知道你的特定伺服是如何控制的。 PWM 控件根据其占空比工作,即高电平与低电平的时间比率,即 0 到 100%。对于这个答案,这等同于 0.0 到 1.0 的 PWM 值。当然,您必须自己将这些想法和方程式整合到您的代码中。

确定您的校准系数(假设伺服控制是线性的,在最简单的变换中将是 gainoffsety = mx + b,其中 gainmoffsetb。):

  1. 启动它,并将您的 PWM 设置为最小值(假设最小值为 0)。
  2. 测量 Helm 机的角度。
  3. 将 PWM 设置为最大值(假设最大值为 1.0)。
  4. 测量 Helm 机的角度。

我正在做一些假设并任意选择数字,但假设测量值是:

  • -10 度,PWM 设置为 0(最小值)。
  • +80 度,PWM 设置为 1(最大值)。

我们称这些度量为:

x1 = angle1 = -10;
y1 = pwm1 = 0;
x2 = angle2 = 80;
y2 = pwm2 = 1;

x 有两个值,y 有两个值,因此您可以求解联立方程 y1 = x1 * m + by2 = x2 * m + b。由于 mgainboffset,我们最终得到以下等式:

y = (1/90) * x + (1/9)

gain = 1/90;
offset = 1/9;
dacValue = gain * angle + offset;

现在,假设伺服是可重复的,并且 PWM 控制是线性的,当需要 45 度时,您将使用上面的等式应用系数并得到 0.6111 的答案。你用这个命令你的 PWM,你的伺服应该移动。如果你测量伺服位置,它应该在 45 度。

请注意,由于伺服系统、电子电路、机械连接等方面的变化,系统中每个伺服系统的增益和偏移可能会有所不同。如果修改了系统的任何部分,您可能需要重新校准那个伺服系统。

如果范围不是线性的,这会变得更加复杂(例如, Helm 机移动更接近最大值,而最小值更小)。您需要使用二次方程、高阶方程或完全不同的方程。选择取决于您在伺服位置上能够容忍多少误差。

如果 Helm 机不可重复(例如,每次达到特定的 PWM 值, Helm 机都会停在不同的点),控制也会很困难。

另请注意,这是开环控制,至少是您的系统。在伺服系统中,存在一个非常相似的控制回路。它不是PWM 角度,而是PWM 位置,其中位置可能未校准到某个真实世界的角度。这就是为什么您需要在程序中处理该工作。

关于c# - 如何使 Helm 机转到某个角度,例如 60 度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23721950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com