У меня вполне конкретная задача: необходимо за заданное время сгенерировать определенное количество импульсов. Как мне посчитать ускорение ?
У меня вполне конкретная задача: необходимо за заданное время сгенерировать определенное количество импульсов. Как мне посчитать ускорение ?
Есть 2 варианта:
1) Для конкретного значения "начальной скорости" подобрать ускорение, чтобы в итоге разгонялось за нужное время
Например, если нужно разогнать с начальной скорости 300Гц с ускорением 5'000 кГц/сек, то нужно указывать accelRamp=860000.
Будет такая картина:
2017-06-30_860.png
Общая продолжительность -- 17.82мс
> 300*0.01782+5e6*(0.01782**2)/2
=> 799
Т.е. получается 800 импульсов за то время, какое должно было быть при нач. скорости 300 и ускорении 5'000 кГц/сек
Конкретное значение 8'600'000 я нашёл просто подбором.
2) Переписать весь stepper блок.
Последний раз редактировалось Владимир Ситников; 30.06.2017 в 17:34.
В общем, построил для нескольких значений accel_ramp первые 1000 импульсов, и получается следующая связь между accel_ramp и фактическим a:
accelRamp = -4e-9 * a2 + 1,7252 * a - 118961
a = 1e-9 * accelRamp2 + 0,5677 * accelRamp +85109
Иными словами, если указать accel_ramp = 5000000, то будет a = 1e-9 * 50000002 + 0,5677 * 5000000 + 85109 == 2948609
Вспоминаем, что когда указывали 5000000, то разгонялось за 23мс.
Проверяем: 300 * 0,023 + 2948609 * 0,0232/2 == 786 -- т.е. весьма близко к 800.
И наоборот. Чтобы получить a = 5000000, то нужно указывать accelRamp = -4e-9 * 50000002 + 1,7252 * 5000000 - 118961 == 8407039
И не забываем, что эти формулы только для min_speed=300.
Возможно, стоит провести больше экспериментов (для разных min_speed) и вывести общую формулу.