Блоки ускорения

Серия блоков для работы с ускорением

Пользовательские блоки не подходящее под другие разделы
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Блоки ускорения

#1

Сообщение Dryundel » 09.03.2019{, 20:59}

Серия блоков для работы с ускорением

Описание блоков:
Acceleration Overtake v.1.15 (догоняющий)Показать
Блок изменяет переменную Out в сторону переменной in с заданной скоростью Accel. Другими словами, переменная Out плавно изменяется с положительным ускорением Accel или отрицательным ускорением (торможением) Accel, всегда стремясь к значению на входе in.
Когда (Out<in) то Out возрастает стремясь к in , со скоростью Accel (step/s) .
Когда (Out>in) то Out убывает стремясь к in, со скоростью Accel (step/s).
Поддерживаются как положительные так и отрицательные значения in и Out.
Отрицательные значения Accel не поддерживаются !!! Если на вход Accel подается отрицательное значение то принимается его модуль.
При старте (начале работы), переменной Out присваивается значение со входа in.
По умолчанию при появлении на входе En логического нуля изменение переменной на выходе Out останавливается, Out "замораживается". При появлениии на входе En логической единицы, изменение Out продолжается. Если требуется что бы при остановке блока, запрете на работу блока (En=0), значение на выходе Out не "замораживалось", а сбрасывалось до значения на входе in, следует изменить параметр Reset, установив True (в парамерах пользователя).
Параметр step задает шаг изменения переменной на выходе Out.

Входы блока:
in - входная переменная
Accel - ускорение step/s за секунду или проще step/s^2
En - Разрешение на изменение переменной Var (работу блока).

Параметры пользователя:
step - шаг изменения переменной Var.
Reset - заморозка / сброс Out в in при en=0
Acceleration Overtake Plus v.2.15 (догоняющий)Показать
Блок изменяет переменную Out в сторону переменной in с заданной скоростью Accel или Brak. Другими словами, переменная Out плавно изменяется с положительным ускорением Accel или отрицательным ускорением (торможением) Brak, всегда стремясь к значению на входе in.
Когда (Out<in) то Out возрастает стремясь к in , со скоростью Accel (step/s) .
Когда (Out>in) то Out убывает стремясь к in, со скоростью Brak (step/s).
Поддерживаются как положительные так и отрицательные значения in и Out.
Отрицательные значения Accel и Brak не поддерживаются !!! Если на вход Accel или Brak подается отрицательное значение то принимается его модуль.
При старте (начале работы), переменной Out присваивается значение со входа in.
По умолчанию при появлении на входе En логического нуля изменение переменной на выходе Out останавливается, Out "замораживается". При появлениии на входе En логической единицы, изменение Out продолжается. Если требуется что бы при остановке блока, запрете на работу блока (En=0), значение на выходе Out не "замораживалось", а сбрасывалось до значения на входе in, следует изменить параметр Reset, установив True (в парамерах пользователя).
Параметр step задает шаг изменения переменной на выходе Out.

Входы блока:
in - входная переменная
Accel - ускорение step/s за секунду или проще step/s^2
En - Разрешение на изменение переменной Var (работу блока).

Параметры пользователя:
step - шаг изменения переменной Var.
Reset - заморозка / сброс Out в in при en=0
Acceleration Reverse v.3.15 (Реверсивный)Показать
Блок изменяет переменную Var в заданных пределах MIN и MAX с заданной скоростью Accel, и в сторону зависящую от знака Accel. Если Accel имеет отрицательное значение то переменная Var уменьшается. Если Accel положитнльное то Var Увеличивается. Другими словами, переменная Var плавно изменяется с положительным ускорением Accel или отрицательным ускорением (торможением) Accel. За направление изменения переменной Var отвечает знак Accel.
Когда Accel > 0 то переменная Var всегда стремится к MAX (возрастает), с заданной скоростью Accel (step/s) за секунду.
Когда Accel < 0 то переменная Var всегда стремится к MIN (убывает), с заданной скоростью Accel (step/s) за секунду.
Когда Accel = 0 то изменение переменной Var прекращается. Var "замораживается"
Поддерживаются как положительные так и отрицательные значения пределов MIN и MAX.
В случае если MIN > MAX то возрастание является убыванием. Другими словами направление ускорения инвертируется.
В случае если Var оказалась вне диапазона MIN<->MAX то Var возвращается в этот диапазон со скоростью Accel, стремясь к MIN или MAX в зависимости от знака Accel.
При старте (начале работы), переменной Var присваивается стартовое значение VarStart.
При появлении на входе En логического нуля изменение переменной на выходе Var останавливается, Var "замораживается". При появлениии на входе En логической единицы, изменение Var продолжается.
Параметр step задает шаг изменения переменной на выходе Out.

Входы блока:
MIN - ограничение минимального значения переменной (минимальной скорости)
MAX - ограничение максимального значения переменной (максимальной скорости)
Accel - ускорение step/s за секунду или проще step/s^2 (Может быть как положительным так и отрицательным)
VarStart - стартовое значение переменной Var
En - Разрешение на изменение переменной Var (работу блока). При появлении на входе En логического нуля изменение переменной на выходе Var останавливается, Var "замораживается". При появлениии на входе En логической единицы, изменение Var продолжается.

Параметры пользователя:
step - шаг изменения переменной Var.
Acceleration Range v.4.15 (Диапазонный)Показать
Блок изменяет переменную Var в заданных пределах MIN и MAX с заданной скоростью Accel, и в сторону зависящую от сигнала на входе Dir. Другими словами, переменная Var плавно изменяется с положительным ускорением Accel или отрицательным ускорением (торможением) Accel. За направление изменения переменной Var отвечает параметр Dir.
Когда Dir = True(1) (включено ускорение) то переменная Var всегда стремится к MAX (возрастает), с заданной скоростью Accel (step/s) за секунду.
Когда Dir = False(0) (включено торможение) то переменная Var всегда стремится к MIN (убывает), с заданной скоростью Accel (step/s) за секунду.
Поддерживаются как положительные так и отрицательные значения пределов MIN и MAX.
В случае если MIN > MAX то возрастание является убыванием. Другими словами направление ускорения инвертируется.
Отрицательные значения Accel не поддерживаются !!! Если на вход Accel подается отрицательное значение то принимается его модуль.
При старте (начале работы), переменной Var присваивается стартовое значение VarStart.
При появлении на входе En логического нуля изменение переменной на выходе Var останавливается, Var "замораживается". При появлениии на входе En логической единицы, изменение Var продолжается.
Параметр step задает шаг изменения переменной на выходе Out.

Входы блока:
MIN - ограничение минимального значения переменной (минимальной скорости)
MAX - ограничение максимального значения переменной (максимальной скорости)
Accel - ускорение step/s за секунду или проще step/s^2
Dir - направление изменения переменной Var. Если Dir=1 то задействуется ускорение и переменная Var увеличивается с ускорением Accel. Если же Dir=0 то задействуется торможение и переменная Var уменьшается с ускорением Accel.
VarStart - стартовое значение переменной Var (работает при включенном параметре MyStart (True) в параметрах пользователя)
En - Разрешение на изменение переменной Var (работу блока). При появлении на входе En логического нуля изменение переменной на выходе Var останавливается, Var "замораживается". При появлениии на входе En логической единицы изменение Var продолжается.

Параметры пользователя:
step - шаг изменения переменной Var.
Acceleration Range Plus v.5.15 (Диапазонный)Показать
Блок изменяет переменную Var в заданных пределах MIN и MAX с заданной скоростью Accel или Brak, и в сторону зависящую от сигнала на входе Dir. Другими словами, переменная Var плавно изменяется с положительным ускорением Accel или отрицательным ускорением (торможением) Brak. За направление изменения переменной Var отвечает параметр Dir.
Когда Dir = True(1) (включено ускорение) то переменная Var всегда стремится к MAX (возрастает), с заданной скоростью Accel (step/s) за секунду.
Когда Dir = False(0) (включено торможение) то переменная Var всегда стремится к MIN (убывает), с заданной скоростью Accel (step/s) за секунду.
Поддерживаются как положительные так и отрицательные значения пределов MIN и MAX.
В случае если MIN > MAX то возрастание является убыванием. Другими словами направление ускорения инвертируется.
Отрицательные значения Accel не поддерживаются !!! Если на вход Accel подается отрицательное значение то принимается его модуль.
При старте (начале работы), переменной Var присваивается стартовое значение VarStart.
При появлении на входе En логического нуля изменение переменной на выходе Var останавливается, Var "замораживается". При появлениии на входе En логической единицы, изменение Var продолжается.
Параметр step задает шаг изменения переменной на выходе Out.

Входы блока:
MIN - ограничение минимального значения переменной (минимальной скорости)
MAX - ограничение максимального значения переменной (максимальной скорости)
Accel - ускорение step/s за секунду или проще step/s^2
Brak - торможение (отрицательное ускорение) step/s за секунду или проще |step/s^2|
Dir - направление изменения переменной Var. Если Dir=1 то задействуется ускорение и переменная Var увеличивается с ускорением Accel. Если же Dir=0 то задействуется торможение и переменная Var уменьшается с ускорением Brak.
VarStart - стартовое значение переменной Var (работает при включенном параметре MyStart (True) в параметрах пользователя)
En - Разрешение на изменение переменной Var (работу блока). При появлении на входе En логического нуля изменение переменной на выходе Var останавливается, Var "замораживается". При появлениии на входе En логической единицы изменение Var продолжается.
Параметр step задает шаг изменения переменной на выходе Out.

Параметры пользователя:
step - шаг изменения переменной Var.
Acceleration_Overtake_v.1.15_(CODE).ubi
(51.04 КБ) 273 скачивания
Acceleration_Overtake_Plus_v.2.15_(CODE).ubi
(67 КБ) 226 скачиваний
Acceleration_Reverse_v.3.15_(CODE).ubi
(74.21 КБ) 243 скачивания
Acceleration_Range_v.4.15_(CODE).ubi
(90.81 КБ) 212 скачиваний
Acceleration_Range_Plus_v.5.15_(CODE).ubi
(110.19 КБ) 239 скачиваний
Последний раз редактировалось Dryundel 04.10.2020{, 21:51}, всего редактировалось 4 раза.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Блоки ускорения

#21

Сообщение Di123 » 25.07.2021{, 13:37}

ecoins писал(а):
25.07.2021{, 12:54}
6.4095/ вкл/выкл -плохая идея делить на 0, лучше заменить на SWITCH. =4095.
нет там при прошивке в епром пишется 1 и далее через счётчик она не может опустится ниже 1 и можно выбирать 1-10 по кругу не выходя за рамки диапазона
ecoins писал(а):
25.07.2021{, 12:54}
7.Вход in - синим на рисунке. Было 4095, стало 0.
ну как бы да - было 0 потомучто на входе 0 по 9 столбцу ... далее пришла 1 и на входе появилось 4095 ... а далее снова 0 в 9 столбце и на входе 0
ecoins писал(а):
25.07.2021{, 12:54}
8.Выход Accel - было 4095->2032,232,0....
опрос уарта 1 сек вот он и выдернул что увидел

ну тут суть проекта была в том что я сам придумал и сделал его

у меня сложности с вашими блоками там прописи много делать надо помнится раньше низнаю как щас
вот еслиб вы предлагали их как алексграни в уже прописаном виде менюшек где нужно просто выбрать и протыкать нужны пункты и галочки это намного облегчило бы взаимодействие с ними возмите к примеру его творение на шимовских блоках всё прекрасно реализовано но если взять его творение на пидрегулятор то там мозг взорвался от попытки разобраться

вот спецально для вас собрал как просили самое простое что можно
генератор 30/30 сек
ускорение 1 сек
уарт шаг 1 сек
2021-07-25_173235.png
2021-07-25_173235.png (2.68 КБ) 1855 просмотров

на видео чотко видно как график останавливается примерно после 4300 сек = 71 мин
Video_2021-07-25_173119.wmv
(424.99 КБ) 58 скачиваний
Отправлено спустя 2 минуты 35 секунд:
не останавливается а перестаёт рисовать выход

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Блоки ускорения

#22

Сообщение ecoins » 25.07.2021{, 13:47}

Di123 писал(а):
25.07.2021{, 13:39}
вот спецально для вас собрал как просили самое простое что можно
генератор 30/30 сек
ускорение 1 сек
уарт шаг 1 сек
Спасибо. Похоже это из-за таймера.
Попозже реализуем что-то похожее - сейчас много работаем с сенсорами, прямо сейчас конкретно BME280 с тремя интерфейсами.

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Блоки ускорения

#23

Сообщение AlexCrane » 27.07.2021{, 07:20}

Dryundel, Di123, ecoins, Теперь таймер не будет переполнятся
Acceleration_Overtake_v.1.16fix_(Code_-_Basic).ubi
(102.26 КБ) 94 скачивания
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

Блоки ускорения

#24

Сообщение Labu559 » 27.07.2021{, 16:02}

AlexCrane писал(а):
27.07.2021{, 07:20}
Dryundel, Di123, ecoins, Теперь таймер не будет переполнятся
Ув. сообщество, гляньте пж. тему "_isTimer нежданчики", где ув. Sancho дал развёрнутый ответ на такого рода, довольно распространённыё проблемы. Попробовал накидать визуализацию:
демонстрационный скетч проблемыПоказать
Overflow_micros3.ino
(3.19 КБ) 36 скачиваний
Overflow_micros(is_Timer).png
добавил скрин симуляции. Замена (по демо-скетчу) 8-битной переменной uint8_t _micros, 32 - битным unsigned long micros() , ничего существенно не изменит- просто отсрочит неизбежное переполнение. Смотрите, анализируйте, если найдёте ошибку- поправляйте, но обе функции (условия) из блоков if((micros() >= (loopTime + time)) и также if (((micros()-loopTime) >= time ) прекращают работать до переполнения (в демоскетче) 8-битных переменных массива loopTime[], (в оригинале) 32-битной переменной unsigned long loopTime, когда loopTime >= (0xFFFFFFFF - time). 0xFFFFFFFF/1000 мкс/1000 мс/60 сек= 71мин 34мс.
Di123 писал(а):
25.07.2021{, 13:39}
...останавливается примерно после 4300 сек = 71 мин
Да ув.Дмитрий Di123, хотя Ваш проект пока трудно назвать образцом для подражания, но Вы правы, и действительно нашли глубоко спрятанную проблему преобладающего колличества блоков использующих ф-и времени millis() и micros().
Последний раз редактировалось Labu559 28.07.2021{, 08:05}, всего редактировалось 1 раз.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Блоки ускорения

#25

Сообщение Di123 » 28.07.2021{, 02:58}

Labu559, с новым блоком покрайне мере работает без проблем два дня
на крайний случай я придумал под этот проект свой блок ускорения

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Блоки ускорения

#26

Сообщение Di123 » 12.10.2021{, 05:13}

AlexCrane, два месяца без проблем ваша версия отработала
а можно ли её подружить с ремоте ху на ЕСП8266 ?
а то блок вытаскиваю вайфай не работает
убираю работает

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Блоки ускорения

#27

Сообщение AlexCrane » 12.10.2021{, 07:24}

Di123, Проект можно увидеть?
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Блоки ускорения

#28

Сообщение Di123 » 12.10.2021{, 19:06}

он загружается но к телефону не подключается и на вемосе постоянно моргает светодиод а в уарте какой то мусор хотя он не подключен
2021-10-12_223822.png
удаляю блок ускорения и всё норм загружается и подключается к телефону
тест.flp
(275.35 КБ) 45 скачиваний

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Блоки ускорения

#29

Сообщение AlexCrane » 12.10.2021{, 21:26}

Di123, Возможно деление на ноль (там где 4095/сек)
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Блоки ускорения

#30

Сообщение Di123 » 13.10.2021{, 05:35}

AlexCrane, спасибо теперь заработало всё

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

управление диммированием через ШИМ

#31

Сообщение Di123 » 18.10.2021{, 16:22}

Dryundel, я у меня возникают проблемы с вашим ускорителем когда дело косается дробных частей он их не понимает
допустим состовляющая ускорителя у нас получилась 3 и всё нормально он каждую секунду нащитывает по 3 ступеньки в шиме
но стоит подать дробное число допустим берём 60 мин / 1024 = 3,5 где ускоритель отбрасывает 0,5

а счётчик я задаю любое произвольное число оно делится преобразуется и маштабируется в импульсы и далее их остаётся только пощитать до соответствующей битности
2021-10-18_200320.png
2021-10-18_200320.png (4.62 КБ) 1643 просмотра

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

управление диммированием через ШИМ

#32

Сообщение Dryundel » 18.10.2021{, 16:37}

Di123 писал(а):
18.10.2021{, 16:22}
Dryundel, я у меня возникают проблемы с вашим ускорителем
Блоком ускорения что ли? (Надо бы им заняться и обновить)
Di123 писал(а):
18.10.2021{, 16:22}
допустим состовляющая ускорителя у нас получилась 3 и всё нормально он каждую секунду нащитывает по 3 ступеньки в шиме
но стоит подать дробное число допустим берём 60 мин / 1024 = 3,5 где ускоритель отбрасывает 0,5
Данную проблему Вы имеете вероятно уже на стадии деления. int или long при делении на int может либо отбрасывать дробную часть либо округлять (в теории). Не помню что делает штатный блок. Если хотите получить дробное значение используйте делитель float.
Блок ускорения в любом случае работает с целыми числами. Поэтому что бы все получилось используйте множитель. Т.е. умножайте делимое еще на 100 и используйте это в качестве входного значения на блок который принимает целочисленное.
Кивни если понял. :yes:

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

управление диммированием через ШИМ

#33

Сообщение Di123 » 18.10.2021{, 17:36}

Я так и делал умножал потом выход делил но не зашло срочно надо было и я глубоко невдавался в исследования и набросал альтернативу

Завтра проверю разницу между ними если ускоритель и счётчик написаны на одной функции или таймере или что там в них заложено то разницы не будет при подщете мелких частых импульсов

Кстати я в прошлом году вроде интересовался у вас как перевести медленный ШИМ пидрегулятора в мощность используя генератор Который дробил рабочий импульс а счётчик пытался пощитать их и вывести некую состовляющию но ничего не получалось и недавно изучил быстрый счётчик и оказывается это очень просто делается закорачиваем две ноги ардуино одну от пида вторую от скоростного и выбираем подщет длины импульса а зная его всю длину просто машиабируем 0-100%
В ардуино это конечно кащюнство использовать редкие пины
Но в есп зато они все прерывательные практически

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

управление диммированием через ШИМ

#34

Сообщение Dryundel » 18.10.2021{, 17:49}

Di123 писал(а):
18.10.2021{, 17:36}
Кстати я в прошлом году вроде интересовался у вас как перевести медленный ШИМ пидрегулятора в мощность используя генератор Который дробил рабочий импульс а счётчик пытался пощитать их и вывести некую состовляющию но ничего не получалось и недавно изучил быстрый счётчик и оказывается это очень просто делается закорачиваем две ноги ардуино одну от пида вторую от скоростного и выбираем подщет длины импульса а зная его всю длину просто машиабируем 0-100%
А Вы явно не ищете легких путей. :)

Аватара пользователя
LRoman
Рядовой
Сообщения: 5
Зарегистрирован: 20.11.2021{, 18:31}
Репутация: 0
Имя: Роман

Блоки ускорения

#35

Сообщение LRoman » 26.04.2022{, 16:31}

:smile9:

valand
Рядовой
Сообщения: 63
Зарегистрирован: 15.07.2018{, 15:12}
Репутация: 13
Имя: Андрей

Блоки ускорения

#36

Сообщение valand » 26.09.2022{, 23:18}

А не встречал ли кто подобных блоков ускорения\торможения где время разгона\торможения постоянно и не зависит от величины входа?
Шаги в секунду не очень удобно, так как например указав 25шагов в секунду и подав на вход шим 25, лампа будет разгораться одну секунду а подав 255 уже 10 секунд. Хочется что бы лампа (просто как пример) разгоралась ровно N секунд хоть до 25 хоть до 127 хоть до 255.

Ответить

Вернуться в «Другое»