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