Так бы сразу и написали, что у вас проблемы с делением в коде. Я вас про это сразу спросил.
Так бы сразу и написали, что у вас проблемы с делением в коде. Я вас про это сразу спросил.
Проблем с делением у меня нет. И в коде деление без проблем используется.
Но вы хотите странного, и непонятно зачем.
Вот опишите реальную задачу где важны именно ваши параметры -- посмотрим.
Сейчас же всё выглядит так, что вы хотите такие входные параметры "потомучтогладиолус".
Чувствуется что вы не работали с ШД. Ускорение это более абстрактное понятие чем частота и время. На практике при работе с ШД оперируют временем и частотой импульсов.
А?
Кто запрещает в коде указать:
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.