пошаговое планирование с дискретными временными шагами - PullRequest
0 голосов
/ 09 мая 2020

Когда я ускоряюсь, а затем замедляюсь с ускорением a на время t, я оказываюсь в положении x = 0,5 a * t * t после фазы ускорения и в a * t * t после замедления. Теперь часто бывает максимальная скорость, поэтому между ними есть фаза постоянной скорости, где dx = vmax * t.

Теперь легко вычислить время до разгона и время до выбега, учитывая определенное количество шагов, но вы получите нецелое количество временных шагов. Поскольку прерывания, обрабатывающие шаговый двигатель, являются дискретными, мне нужно найти способ немного подделать числа, чтобы получить точное количество запрошенных шагов.

Может ли кто-нибудь придумать алгоритм, который бы немного скорректировал эти числа, чтобы прийти (очень) близко к желаемой позиции?

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
  int a, v, x, i, t, t1;

  x = v = 0;
  for (i=1;i<argc-1;i+= 2) {
    a = atoi (argv[i]);
    t1 = atoi (argv[i+1]);
    for (t=0;t<t1;t++) {
      v += a;
      x += v;
     printf ("t%d: x=%d, v=%d\n", t, x, v);
    }
  }
  exit (0);
}

Запустите это с . / A.out 10 10 0 10 -10 10 , чтобы получить трапецию с 10 шагами / квадратом времени ускорения, накатом, замедлением. Заканчивается в позиции 2000. Легко добраться до 2100: . / A.out 10 10 0 11 -10 10 , но с учетом позиции, в которой нужно закончить, максимального ускорения, максимального v и условия что v = 0 в конце, как вы попадаете в произвольно заданную позицию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...