Разберём то, какие команды выдаёт ФБ дельты.
В двух словах:
0) График частоты от импульсов в документации дельты неправильный. А чего вы хотели от документа 2006 года? 
1) При использовании ступенек дельта генерирует рваный ритм движения -- это нехорошо ни для оборудования, ни для пропуска импульсов
2) Если количество ступенек равно количеству импульсов на разгон, то ритм уже не рваный, но при этом нагрузка на ШД увеличением скорости тоже растёт, а у всех ШД крутящий момент с увеличением скорости лишь падает. Т.е. с точки зрения использования характеристик ШД алгоритм странный
Но там есть ещё одно но. Я не знаю с какой точностью дельта может выдерживать частоту.
В вычислениях ниже предполагается, что точность частоты импульсов выдерживается точно.
На 93-ей странице показано как устроен алгоритм разгона.
Снимок экрана 2016-09-27 в 0.11.42.png
Из этого можно вынести, что разгон выполняется по ступенькам. На каждой ступеньке одинаковое количество импульсов, количество ступенек задаётся пользователем.
Дальше там рассматривается случай: "начальная скорость 1кГц, конечная 10кГц, 100Гц шаг ступеньки, 10000 импульсов на весь разгон".
Рассчитаем этот случай: должно быть (10'000Гц-1'000Гц)/(100Гц/ступенька) == 90 ступенек. В каждой из них примерно по 111 = 10000/90 импульсов.
Строить будем в r-system
Код:
delta <- data.table(i=seq(1, 10000))
delta[, freq := ((i-1) %/% 111) * 100 + 1000] # %/% это целочисленное деление
delta[, dt := 1/freq]
delta[, t:=cumsum(dt)] # сумма интервалов с накоплением
ggplot(delta, aes(i, freq))+geom_point()+scale_x_continuous("Количество импульсов")+scale_y_continuous("Частота, Гц")+ggtitle("Delta PLC, разгон от 1кГц до 10кГц шагами по 100Гц за 10000 импульсов")
График "частота от количества проделанных импульсов" выглядит почти линейно. Ну, разумеется, там же все ступеньки одинаковой длины, и ступенек 90 штук. Выглядит как ломанная прямая.
Уже тут становится очевидно, что в документации delta косяк. По крайней мере, в русской версии.
Теоретический график
delta_ramp_puls.png
А вот что у дельты:
Снимок экрана 2016-09-27 в 0.23.47.png
Ясно видно, что у них неправильно изображена форма "разгона". Скорее всего, это ошибка copy-paste. Т.е. они тупо скопировали другой график и не подумали, что реально график так выглядеть не будет.
Copy-paste или нет, но это 100% ошибка дельты.
Посмотрим как будет выглядеть график "частота от времени":
Код:
ggplot(delta, aes(t, freq))+geom_point()+scale_x_continuous("Время, сек")+scale_y_continuous("Частота, Гц")+ggtitle("Delta PLC, разгон от 1кГц до 10кГц шагами по 100Гц за 10000 импульсов")
delta_ramp_time.png
Тут график похож на тот, который показан в документации. В документации говорится, что "макс частота" достигается через 2606мс, а, согласно нашим вычислениям это должно произойти через 2607 мс. Совпало с точностью до миллисекунд -- т.е. норм.
Код:
> tail(delta, 15)
i freq dt t
1: 9986 9900 0.0001010101 2.606330
2: 9987 9900 0.0001010101 2.606431
3: 9988 9900 0.0001010101 2.606532
4: 9989 9900 0.0001010101 2.606633
5: 9990 9900 0.0001010101 2.606734
6: 9991 10000 0.0001000000 2.606834
7: 9992 10000 0.0001000000 2.606934
8: 9993 10000 0.0001000000 2.607034
9: 9994 10000 0.0001000000 2.607134
10: 9995 10000 0.0001000000 2.607234
11: 9996 10000 0.0001000000 2.607334
12: 9997 10000 0.0001000000 2.607434
13: 9998 10000 0.0001000000 2.607534
14: 9999 10000 0.0001000000 2.607634
15: 10000 10000 0.0001000000 2.607734
Эти миллисекунды не столь важны, как сама форма кривой.
Попробуем посмотреть как зависит форма кривой от количества ступенек в лестнице.
Код:
d <- data.table()
for(n in c(2, 4, 8, 16, 128)) {
d2 <- data.table(i=seq(1, 10000))
pulses_per_step <- 10000 %/% n
d2[, freq := (i %/% pulses_per_step)*((10000-1000) %/% n) + 1000]
d2[, dt := 1/freq]
d2[, t:=cumsum(dt)]
d2[, nsteps:=n]
d <- rbind(d, d2)
}
ggplot(d, aes(t, freq))+geom_point()+scale_x_continuous("Время, сек")+scale_y_continuous("Частота, Гц")+ggtitle("Delta PLC, разгон от 1кГц до 10кГц")+facet_grid(nsteps~.)
delta_ramp_vs_nsteps.png
Особого смысла изучать случай "малого" количества ступенек нет. Понятно, что при ступеньках будут те самые рывки. Например, в случае когда всего 2 ступеньки, движок сначала долго фигачит на 1кГц, а потом бах -- сразу переключается на 5.5кГц.
Кому интересно, может попробовать доказать, но, практика показывает, что кривая близка к экспоненте при увеличении количества шагов.
Собственно, случай "на каждой ступеньке ровно по одному импульсу":
Код:
delta <- data.table(i=seq(1, 9000))
delta[, freq := i+1000]
delta[, dt := 1/freq]
delta[, t := cumsum(dt)]
ggplot(delta, aes(t, freq)) +
geom_point() +
scale_x_continuous("Время, сек") +
scale_y_continuous("Частота, Гц") +
ggtitle("Delta PLC, разгон от 1кГц до 10кГц")+
geom_smooth(formula = log(freq) ~ t, color="red")
delta_exp_fit.png
О чём говорит "экспоненциальный закон изменения частоты от времени"?
О том, что ускорение тоже экспоненциально возрастает от этого самого времени.
Узнаем этот самый эксп. закон:
Код:
> lm(log(delta$freq) ~ delta$t)
Call:
lm(formula = log(delta$freq) ~ delta$t)
Coefficients:
(Intercept) delta$t
6.908 1.000
Иными словами, freq == exp(6.908)*exp(t) == 1000.245 * exp(t)
Ускорение это производная от частоты, и она будет тоже равна 1000.245 * exp(t). Единицы измерения другие, но формула та же (просто у константы 1000.245 разная размерность, которая нас не волнует).
Собственно, строим самый главный график: "нагруженности движка от частоты".
Нагруженность движка линейно зависит от ускорения, поэтому достаточно построить график "ускорения от частоты".
Но у нас же частота равна ускорению!
Т.е. график будет выглядеть так:
Код:
ggplot(delta, aes(freq, freq)) +
geom_point() +
scale_x_continuous("Частота, Гц") +
scale_y_continuous("Ускорение (нагрузка на ШД), Гц/сек") +
ggtitle("Delta PLC, нагрузка на ШД при разгоне от 1кГц до 10кГц")
delta_load.png
О чём это говорит? Кто догадался -- молодец.
Кто не догадался -- расскажу.
Возьмём график крутящего момента от скорости вращения для какого-нибудь ШД. Не абы какого, а такого, который у прибориста.
На самом деле, у всех ШД этот график примерно одинаково выглядит, но проще оперировать реальными цифрами, а не мифическими.
Собственно, ШД ES-MH33480
График:
Снимок экрана 2016-09-27 в 1.01.34.png
Видно, что на малых оборотах движок может развить силу больше 8 Н*м, а с увеличением скорости его сила падает.
Иными словами, дёрнуть с места он может хорошо, а как раскрутится его "тяга" ослабевает.
Т.е. для эффективного использования мощности этого движка, нужно начинать с большого ускорения (задействовать мощный крутящий момент в начале), а потом сбавлять это самое ускорение, чтобы нагрузка на вал не превышала максимальный крутящий момент движка.
Собственно на картинке:
ideal_load.png
Какие отсюда можно сделать выводы:
1) В самом экспоненциальном разгоне смысла мало. Видно что красная кривая ("кривая дельты") упирается в скорость 10 rpm. И эту скорость никак не превысить. Разумеется, конкретная скорость зависит от конкретных цифр, но не суть. Я говорю, что "нет простого способа" сказать дельте "перестань увеличивать ускорение".
Конечно, можно начать играться с количеством ступенек, то при перескоке с одной на другую могут быть неприятные дёрганья -- большие ускорения, а значит, возможны и выходы за кривую возможностей движка.
Конечно, ещё есть вариант делать "составное движение", но если его для этого и будут использовать, то не от хорошей жизни, а от безысходности. Честно говоря, мне лень проверять, но, скорее всего, составное движение в случае дельты не поможет, т.к. движение от 1кГц до 5кГц шагами по 1Гц + движение от 5кГц до 10кГц шагами по 1Гц по факту будут выглядеть точно так же, как и движение от 1кГц сразу до 10кГц этими же шагами по 1Гц. Я просто не исключаю того факта, что в дельте-таки может быть какой-нибудь извратный способ разогнать ШД и при этом не наращивать ускорение при самом разгоне.
2) Кривая с постоянным ускорением тоже рано или поздно упирается в предел движка. Т.е. на определённых оборотах движок уже не может поддерживать нужное ускорение.
Но если реально нужны большие обороты, то можно просто с самого начала указать более маленькое ускорение.
Да, время выхода на режим увеличится, но на режим выйдет.
3) Крутящий момент нужно измерять на "максимально необходимых для данной установки оборотах". Разумеется, указывать нужно не то значение, при котором начали возникать пропуски импульсов, а с неким запасом.
4) Если говорить про "пропуски импульсов", то более важно "сглаживать" не начало пути, а конец -- тот момент, где тяга у движка ослабевает, и нужно снижать нагрузку.
5) В случае "идеальной" кривой (ну, когда сначала ускорение плавно растёт, а потом уменьшается), конечно, по-полной используются возможности движка, но есть шанс, что "горб"-таки выйдет за границы возможностей.
Как отлаживать S-кривую, чтобы она не выходила за границы допустимых нагрузок -- фиг знает.
С каким-нибудь регистратором реального крутящего момента (нагрузки на движок) было бы, конечно, удобнее, но сомневаюсь, что их массово используют.
Скорее всего, нужно делать некое подобие "с плавным выходом на постоянное ускорение", а потом "с плавным переходом на нулевое ускорение == на равномерное движение". Но тут эти самые "плавные выходы", скорее, не для пропуска импульсов будут служить, а для того, чтобы уменьшить толчки оборудования.
Та же самая дельта генерирует большой толчок в конце разгона. У неё ускорение на протяжении всего разгона растёт, а потом сразу меняется на нулевое.