пошаговое планирование с дискретными временными шагами

Когда я ускоряюсь, а затем замедляюсь с ускорением 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 в точке конец, как вы попадаете в произвольную данную позицию?

0 ответов

Другие вопросы по тегам