Делимся опытом Наступив на грабли - сообщи другим! Обмен опытом разработки и ремонта электронных устройств. |
20.09.2020, 18:05
|
|
Гражданин KAZUS.RU
Регистрация: 07.05.2019
Сообщений: 753
Сказал спасибо: 67
Сказали Спасибо 147 раз(а) в 92 сообщении(ях)
|
Как правильно сделать anti-windup для ADRC регулятора?
Скоро начнем развлекаться с заменой PID на ADRC в стабилизаторе оборотов бормашинки. В матлабе сам ADRC уже смоделировали, вроде работает хорошо. Но есть нюанс - на "перегрузках" во всех этих контроллерах клинит интеграторы, и нужен anti-windup, чтобы интегратор быстро "отпускало".
Собственно вопрос, а как правильно реализовать anti-windup для ADRC? В интернетах примеры в основном для PID. Нужна какая-то методичка для программистов и чайников, а не полный курс теории регулировния .
|
|
|
|
04.12.2021, 13:06
|
|
Гражданин KAZUS.RU
Регистрация: 07.05.2019
Сообщений: 753
Сказал спасибо: 67
Сказали Спасибо 147 раз(а) в 92 сообщении(ях)
|
Re: Как правильно сделать anti-windup для ADRC регулятора?
Подниму тему. А расскажите братья и сёстры, почему все до сих под массово юзают PID вместо ADRC, если последний намного круче. Из приятного - сам компенсирует нелинейности системы, из-за которых PID пришлось бы сильно расслаблять, чтобы не уйти в автоколебания.
Почему-то до сих пор нет готовых методичек, как слепить ADRC и как его настроить.
https://github.com/speedcontrols/ac_...nd-calibration - тут записали, чего смогли и как смогли. Но если честно - у меня у самого от попыток понять формулы начинает мозг плавиться. Хотя сам код довольно простой (не капитально сложнее PID-а).
Я это к чему... было б здорово либо найти нормальную литературу для прикладного применения, ну или может написать такую.
|
|
|
|
04.12.2021, 17:02
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,198
Сказал спасибо: 11,132
Сказали Спасибо 3,843 раз(а) в 2,920 сообщении(ях)
|
Re: Как правильно сделать anti-windup для ADRC регулятора?
Таки не совсем для чайников практические руководства, но нашел пару работ для вполне вменяемого начала.
Первая группы авторов из поднебесной, вторая из MIT.
Для курса MIT не стоит смотреть на название… Математики там не так уж и заумно много…
Ссылки из каких-то рассылок типа IEEE, для первой нужно сделать запрос к авторам на полный текст.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
05.12.2021, 08:36
|
|
Гражданин KAZUS.RU
Регистрация: 07.05.2019
Сообщений: 753
Сказал спасибо: 67
Сказали Спасибо 147 раз(а) в 92 сообщении(ях)
|
Re: Как правильно сделать anti-windup для ADRC регулятора?
Ну вот первая ссылка считай что закрытая. Вторая не про ADRC, хотя возможно я ошибся.
Для простых смертных сложность не в дизайне отклика anti-windup, а как это потом именно к ADRC примотать (там менее очевидно куда втыкать, в отличие от PID).
https://github.com/speedcontrols/ac_...rc.h#L154-L176 вот кстати, имплементация самого ADRC. На прикладном уровне просто совсем. Только нет методичек как для PID-ов, о том как прикладывать мутную теорию к практике. А без методичек ни один экплуатационщик такое не осилит. Хотя на практике это было бы очень заманчиво - меняем черный ящик с PID-ом на черный ящик с ADRC, и получаем на халяву намного лучшую регулировку. Это какбэ не диванная аналитика интернет-специалиста, а на реальном девайсе проверено.
Будь я поближе к чистой науке - сам бы методичку написал, чтобы прославиться. Но я уже от такого далековат, мне сподручнее в других областях мозг применять.
UPD. Попробовал послать запрос для первой ссылки. Но судя по названию, они решают вопрос с транспортной задержкой. А мне надо немножко другое (и попроще) - как в коде затыкать обзервер.
Последний раз редактировалось p_v; 05.12.2021 в 08:51.
|
|
|
|
18.08.2024, 18:47
|
|
Гражданин KAZUS.RU
Регистрация: 07.05.2019
Сообщений: 753
Сказал спасибо: 67
Сказали Спасибо 147 раз(а) в 92 сообщении(ях)
|
Re: Как правильно сделать anti-windup для ADRC регулятора?
https://chatgpt.com/share/79765faa-0...8-62e76b0f4036
Может кому пригодится. Попытал ChatGPT насчет ADRC. С чисто инженерным уклоном, в сторону практического применения. И даже создалось впечатление, что всё понял .
Если тезисно:
1. ADRC первого порядка в большой вероятностью в 2 раза эффективнее ПИД-а.
2. Anti-windup делается через простую обрезку выходного значения.
3. Простая калибовка заключается в записи отклика системы без регулятора, на подачу максимального воздействия, и вычислению 3 коэффициентов.
b0 (масштаб) - просто максимум производной отклика. Остальные два - 1/t и 1/3t, где t - время достижения 63% на отклике. Для большей уверенности можно уменьшить коэффициенты на 10-20%, чтобы сильно уменьшить вероятность возбуждения.
Пока не проверял, надо будет воткнуть в модель, покрутить.
На сокровенное знание не претендую, меня интересовало чисто прикладное применение - есть километры задач, где втыкаются примитивные PID-ы, и хочется там не задумываясь втыкать ADRC.
|
|
|
|
10.01.2025, 16:02
|
|
Гражданин KAZUS.RU
Регистрация: 07.05.2019
Сообщений: 753
Сказал спасибо: 67
Сказали Спасибо 147 раз(а) в 92 сообщении(ях)
|
Re: Как правильно сделать anti-windup для ADRC регулятора?
Как дошло до моделирования, выяснилось что чатгпт меня на@#$л, а я в свою очередь вас . Направление-то верное, но всё немного иначе.
https://nbviewer.org/github/puzrin/r...ing/adrc.ipynb - ловите юпитеровский нотебук, с картинками и формулами. Это по крайней мере на модели правдоподобно работает.
- Обрезка выхода делается ДО итерирования обзервера. Это автоматически дает anti-windup и убирает необходимость последующей коррекции обзервера.
- На калибровке никто не крутит коэффициенты ADRC напрямую. Крутят коэффициенты частоты обзервера (N) и контроллера (M).
С практической точки зрения, когда нафик не надо грузиться теоретической мутотой, и мы делаем замену PID-а, а не выжимаем теоретический максимум, достаточно знать следующие вещи:
- Сначала смотрим время отклика системы по шаговому воздействию. Это определяет базовую частоту и b0 (масштабирование), а дальше можно настраивать сам adrc.
- "M" (обычно 2..5) ставится = 3, и больше не трогается. Это во сколько частота контроллера меньше частоты обзервера. Если с вашей задачей справляется пид, то будет оптимально, крутить нет смысла.
- "N" увеличивается пока не начнутся колебания. Обычно 3-10. Но если дойдет до 50, как синус в военное время, то тоже норм. У меня дошло. Видимо от того что в модели не учтена небольшая транспортная задержка или что-то еще.
Общий смысл - не парьтесь над конкретным значением N, до какого дойдет, то и хорошее. В итоге, по сути, надо крутить только 1 коэффициент. Это даже меньше чем в пиде (!)
По субъективным ощущениям - штука классная, и не требует идеального подбора коэффициентов. Плюс ей в достаточной степени плевать на нелинейности системы. Например у универсального двигателя момент по всему диапазону меняется очень сильно. ПИД либо скрючит на низах, либо станет тупить на верхах. ADRC с подобным справляется очень хорошо. Там конечно, в отличие от пида, в теории черт ногу сломит. Но на практике получается удобнее, проще, и более жесткое регулирование.
Что еще надо знать:
- Нужна плавучка. Тоеретически для каждого конкретного кейза у ADRC второго порядка можно попробовать подобрать размерность фиксированной точки, но тема тухловатая. Операций относительно немного, так что даже с софтовым float современные контроллеры нормально потянут.
- Для моторов настоятельно советуют воткнуть ADRC третьего порядка, а не второго. Чтобы мог учитывать инерцию. Если смотреть на ADRC как на черный ящик, то визуально отличий нет, там просто внутри на один коэффициент больше (они все через N/M берутся). Но частоту обзервера понадобится поднять раз в десять. У меня полезли нюансы, что пока просто не могу с такой частотой скорость определять. Но в любом случае, даже второй порядок будет заметно лучше обычного пида.
Из забавного - можете поискать на ютюбе видос, где грузик между двумя пружинками, за которые рандомно дергают актуаторы. Автор говорит, что пидом удержать грузик на месте принципиально невозможно, а ADRC справляется.
Так что ADRC не только "проще" ПИД-а в эксплуатации, но и намного более продвинутый. Я пытался по-всякому выяснить, почему ПИД-ы еще везде не повыкидывали нафик, при такой очевидной разнице. Похоже, пипл просто не в курсе . Ну и не так много готовой прикладной инфы, а если пытаться разбираться с теории - это кого угодно отпугнет. Плюс миллионы промышленных контроллеров пид-овских наклепали, а там все консервативно, никто не пошевелится пока не прижмет. Еще наверное лет 10-20 назад можно было пожалиться что плавучка дорогая, но в нынешнее время это уже не серьезно.
Последний раз редактировалось p_v; 10.01.2025 в 17:26.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:40.
|
|