Формулу чего?
Формулу того, когда должен возникать импульс?
s = v0*t + a*t2/2
Применяем формулу квадратного уравнения, и получаем, что импульс с номером n должен возникнуть в момент tn
tn = ((v02 + 2*a*n)0.5 - v0)/a
Но это, конечно, "формула для сферического ШД в вакууме". Т.е. чтобы оценить работу блока PRU_STEPPER на больших ускорениях, нужно в качестве a использовать не accelRamp, а немного другое значение.
Последний раз редактировалось Владимир Ситников; 30.06.2017 в 18:26.
Я при расчете a пользуюсь такой формулой: a = 2*s/t*t. Но при большом s steper не успевает выдать требуемое число импульсов за заданное время.
Последний раз редактировалось Newcomer; 30.06.2017 в 18:28.
В общем, построил для нескольких значений 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) и вывести общую формулу.
А из за чего такие сложности ?
Точное решение квадратного уравнения делать на PRU тяжело, т.к. там только целые числа, и умножения-деления-квадратного корня толком нет.
Можно было бы для каждого импульса применять формулу квадратного уравнения, но тогда пришлось бы для каждого импульса вычислять формулу из #973:
tn = ((v02 + 2*a*n)0.5 - v0)/a
Конечно, v02 это константа и вычислять 2an не так сложно, но всё равно остаются квадратный корень и деление.
Квадратный корень может занимать 0.5мкс, деление до 1мкс.
Сейчас же используется более простая формула -- без квадратного корня. Из сложных операций только одно деление. Это позволяет экономить ресурсы PRU. Из-за того, что квадратный корень не используется и получается отклонение от "эталонной формулы".
позволяет ли объем памяти держать таблицу корней?
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
В моей задаче надо за одно и то же фиксированное время генерировать разное количество импульсов. Число импульсов, которое надо генерировать за фиксированное время может колебаться от 16 до 1120.
Какова будет формула пересчета a в accelRamp при нулевой начальной частоте ?
Последний раз редактировалось Newcomer; 01.07.2017 в 11:27.