Последний раз редактировалось Newcomer; 25.09.2016 в 22:28.
Я же говорю: допустимое ускорение подаётся на вход блоку.
Ему передаётся:
enable
количество импульсов
ускорение при разгоне
ускорение при замедлении
Если вопрос только "в пропусках импульсов", то указываем "допустимое ускорение" и радуемся.
Блок будет правильно отрабатывать все движения, понимая пределы для данной установки.
Друг мой (или не друг). Вы хотите странного. Я уже сказал, что само по себе "время разгона" не несёт в себе достаточной информации.
Нужна ещё информация о том "какая скорость будет достигнута при этом разгоне".
Если очень уж хочется играться со временами, то можете потом сделать обёртку, которая вычисляет времена и всё такое.
Но, с точки зрения физики процесса, ускорение является основополагающей величиной, поэтому сам блок будет работать именно с ускорением.
Тащить лишнее преобразование "времени в ускорение" внутрь блока я не буду -- это лишь осложнит сам блок, и не принесёт абсолютно никакой пользы.
Тут не только "в физике" дело, а ещё и в том, что в фактических формулах время не фигурирует. Либо скорость, либо ускорение. Время -- нет.
Более того, если говорить об S кривых, то вы никогда не сможете вычислить "время разгона" для случая S кривой. Ну, даже если вы и сможете (вдруг?), то среднестатистический пользователь -- точно нет.
Поэтому вынесение параметра "время разгона" будет мешать дальнейшим улучшениям блока. S-кривую уже просто так не получится добавить, т.к. у S-кривой понятие "время разгона" весьма относительно.
Последний раз редактировалось Владимир Ситников; 25.09.2016 в 22:42.
По вашему предельную частоту и время разгона надо держать в голове чтобы вычислить предельное ускорение. По моему ничего в голове держать и вычислять не надо, а надо тупо на входе блока задать предельную частоту и время разгона.
Последний раз редактировалось Newcomer; 25.09.2016 в 22:43.
А?
Кто запрещает в коде указать:
stepper(quantity := 300, max_speed := 60, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо 400 импульсов? Вот 400:
stepper(quantity := 400, max_speed := 60, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо 10? Вот 10:
stepper(quantity := 10, max_speed := 60, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо просто раскрутить до 60 имп/сек и пусть фигачит?
stepper(quantity := -1, max_speed := 60, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо раскрутить до 5000имп/сек?
stepper(quantity := -1, max_speed := 5000, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо просто сделать 100 импульсов на частоте 60Гц?
stepper(quantity := 100, max_speed := 60, accel_ramp := 0, decel_ramp := 0, enable:=...) ?
В таком коде можно без проблем менять max_speed, можно без проблем менять quantity.
И никаких вычислений "времени разгона" делать не нужно.
Числа 10000/10, как я говорил, берутся "из пальца, что установка без проблем разгоняется до 10000 за 10 секунд". Хотите того или нет, но подобные числа в любом случае придётся откуда-то брать.
Вы ШД как выбираете? Не по цвету же?
А теперь покажите, как будет выглядеть предлагаемый вами вариант. Хотя бы для случая 300/400 импульсов.
Последний раз редактировалось Владимир Ситников; 25.09.2016 в 22:53.
Я привёл варианты кода, которые решают задачи управления ШД.
Есть установка, у которой предельное ускорение 10'000Гц/10сек, предельное замедление предельное ускорение 10'000Гц/20сек
1) Сделать 300 импульсов, максимальная скорость 60 Гц
2) Сделать 400 импульсов, максимальная скорость 60 Гц
3) Сделать 10 импульсов, максимальная скорость 60 Гц
4) Раскрутиться до 60 имп/сек и продолжить вращение бесконечно
5) Раскрутиться до 5000 имп/сек и продолжить вращение бесконечно
5) Просто сделать 100 импульсов на частоте 60 имп/сек.
Покажите как хотя бы первые 1-2-3 задачи будут решаться, если у ФБ будут такие аргументы, как вы предлагаете:
enable, period, quantity, accel_time, decel_time
Я к тому, что "accel_time" и "decel_time" совершенно непонятно как вычислять.
Реально, приведите пару строк, как будет выглядеть использование блока, если аргументы такие, как вы предлагаете. По факту -- аргументов "enable, period, quantity, accel_time, decel_time" недостаточно. Как минимум, нужен аргумент "какая по факту скорость достигается в конце разгона".
Последний раз редактировалось Владимир Ситников; 25.09.2016 в 23:07.
Если надо сделать 300 шагов за определенное время, то я прикину какая частота импульсов должна быть чтобы уложиться в заданное время. Далее буду подбирать время разгона и торможения чтобы вал ШД повернулся на заданный угол без пропуска импульсов. И так для любого количества импульсов. Задача вашего ФБ просто, без всякого думоства, исполнить то, что задано на входе.
Последний раз редактировалось Newcomer; 25.09.2016 в 23:23.