Заголовок сообщения: Re: PID-регулятор на языке C.
Добавлено: Сб май 14, 2022 22:32:31
Открыл глаза
Зарегистрирован: Ср сен 24, 2014 12:30:09 Сообщений: 62
Рейтинг сообщения:0
Цитата:
А для вас сильно принципиально написать функцию ПИД регулятора самостоятельно?
Моя задача не столько сделать готовое работающее устройство, сколько разобраться, как это все работает. Поэтому мне хотелось бы написать все самому. Именно для наглядности для меня я не убираю dt из I и D составляющих. Поэтому прошу всех присутствующих больше не указывать мне, что код неоптимален с точки зрения производительности. Если бы это была реальная задача, я бы взял какого-нибудь монстра PIC32 с FPU, а не STM32 низшего сегмента. Скажу лишь то, что за период дискрета в 10 мс я успеваю 20 раз передать данные по SPI с термопары, посчитать все float'ы от ПИД-регулятора, и вывести 35 символов на LCD. И все это вместе взятое не занимает и 5 мс, то есть запас еще 5 мс до следующего срабатывания таймера. Напомню, что МК у меня не делает больше ничего кроме перечисленного. За наводку на готовый алгоритм Вам спасибо, гляну.
Цитата:
Неужели так сложно найти и прочитать статьи о настройке ПИД-регуляторов?
Пример можно? В том, что читал я, нет ни слова о выборе времени дискрета. Везде говорят, что чем оно меньше, тем лучше.
Однако, согласитесь, что выполнять ПИД-регулирование в 10 раз чаще чем можно выдать регулирующий импульс на тиристор - это не дело. 9 из 10 подсчетов пропадут даром.
да, слишком часто - тоже плохо, нотне с математической т.з., а с инженерной: 1) нагрузка на процессор (иногда бесполезная, как в данном случае) 2) шумы и дискретизация данных - т.к. в компоненте Д, dt стоит в знаменателе, то уменьшение шага увеличивает влияние dL на выход ПИД и если величина изменений пропорционально прошедшему времени и компенсирует уменьшение dt, то ошибки измерения не зависят от прошедшего времени и при уменьшении dt зтановятся заметнее
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Скажем проще: слишком частое ПИД-ирование по отношению к отклику системы, когда разница соседних замеров измеряемой величины нулевая (или почти нулевая) при любых условиях, приводит к неиспользованию дифф.компоненты, а ПИД превращается в ПИ, у которого коэфф Ki нужно занизить и ввести ограничение на макс. I. При этом, из-за пониженного Ki вклад отдельных измерений весьма незначителен.
А в библиотеке CMSIS DSP действительно есть ф-ции готового ПИД, можете оттудава взять.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Скажем проще: слишком частое ПИД-ирование по отношению к отклику системы, когда разница соседних замеров измеряемой величины нулевая (или почти нулевая) при любых условиях, приводит к неиспользованию дифф.компоненты, а ПИД превращается в ПИ, у которого коэфф Ki нужно занизить и ввести ограничение на макс. I. При этом, из-за пониженного Ki вклад отдельных измерений весьма незначителен.
Примерно так и есть. Ki должен быть очень малым (много меньше Kp). Потому и говорю, что дифф.компоненту можно выкинуть, функционирование упростится, станет более предсказуемым, устойчивее к случайным шумам и настройка регулятора упростится. А "плохо с инженерной точки зрения" - легко решаемо, оптимизацией алгоритма. Которую ТС никак не хочет. Как уже показал выше - легко оптимизировать на много порядков по скорости.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Есть ПИД регулятор, а есть ПИ-регулятор. У каждого свои плюсы и минусы, своё применение. Но это ещё не значит, что из ПИД получится сделать ПИ просто сократив интервалы вызова алгоритма до исчезновения дифф.составляющей. То есть, ПИ должен делаться методом Kd = 0 и убиранию расчёта дифф., а не получением нулевой разницы между соседними выборками.
Для убирания случайных помех может применяться аналоговое и/или цифровое фильтрование сигнала. А дифф. компонента отражает динамическое изменение системы, например охлаждение извне. На примере паяльника таким изменением будет касание жалом спаиваемых деталей и последующий отрыв жала. Теплоемкость системы меняется, скорость изменения температуры будет меняться. И дифф. компонента помогает быстрее следить за динамическим изменениями. У интегральный компоненты задача другая - постепенно подводить к заданному значению систему в статическом состоянии. Попытка заставить интегральную составляющую выполнять роль дифыеренциальной будет хуже работать
Скажем проще: слишком частое ПИД-ирование по отношению к отклику системы, когда разница соседних замеров измеряемой величины нулевая (или почти нулевая) при любых условиях, приводит к неиспользованию дифф.компоненты, а ПИД превращается в ПИ.
не только, ещё, когда дискретная величина перешагнёт на следующий шаг - этот шаг будет многократно усилен делением на малую величину и вместо Д компоненты получаем "сильно икающий 0"
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
По этим ссылкам нет методик определения параметров регулятора, посему и ценность их, увы, нулевая.
Для кого как...
Где? Не вижу. Выше я показал пример расчёта коэффициентов ПИД-регулятора по методу AMIGO (Астрома-Хагглунда). В приведённых ссылках ничего подобного нет. Не нужно вводить людей, тем более не сведующих в вопросе, в заблуждение.
А попробуй раскрыть скобки и увидишь, то это всё та-же, только оптимизированная для вычисления контроллером формула ПИД регулятора...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
перепишем, вставивив все переменные: Y:=Y+(Kp+Ki+Kd)*(X2)+(-Kp-2Kd)*(X1)+Kd*(X0); X2 - текущее, X1 - прошлое, X0 - позапрошлое положения. приведем переменные к одной точке: X1=X2-V2*dt; X0=X1-V1*dt; V1=V2-A2*dt; X0=X2-2*V2*dt+A2*dt^2; вставим в уравнение: dY*dt=(Kp+Ki+Kd)*(X2)+(-Kp-2Kd)*(X2-V2*dt)+Kd*(X2-2*V2*dt+A2*dt^2); чтоб проще было считать — упростим, примем: dt=1 и.е. dY*dt=Vy; скорость изменения выхода X2=X; текущее отклонение V2*dt=V; текущая скорость изменения отклонения A2*dt^2=A; текущая скорость изменения скорости (ускорение) отклонения тогда: Vy=(Kp+Ki+Kd)*(X)+(-Kp-2Kd)*(X-V)+Kd*(X-2*V+A); Vy=KpX+KiX+KdX -KpX-2KdX+KpV+2KdV +KdX-2KdV+KdA; Vy=Ki*X+Kp*V+Kd*A; вуаля! если всё это проинтегрировать: Y=Ki*I+Kp*X+Kd*V; где I — первообразная от X П.С.знаю, что с т.з. строгой математики тут не совсем всё точно (но в данном контексте оно не сильно испортило бы картину)
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Заголовок сообщения: Re: PID-регулятор на языке C.
Добавлено: Вс июн 05, 2022 07:16:59
Опытный кот
Карма: 16
Рейтинг сообщений: 166
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 826 Откуда: Уже не город Белых гор
Рейтинг сообщения:0
Ivanoff-iv, Большое спасибо за разъяснения. Стало намного понятнее. Однако, в этих формулах жёстко закреплены постоянные времени интегрирования и дифференцирования. И они напрямую связаны с периодом работы самого ПИД регулятора. Мне для настройки было понятнее задавать постоянные интегрирования и дифференцирования независимо от периода работы ПИД регулятора. Также приходилось периодически обнулять И составляющую для уменьшения колебательного процесса. Но я всё равно благодарен вам за точные разъяснения, сам не додумался бы до такого. ЗЫ. Так это ПИД по скорости регулирования! Я то разбирался с ним, как с ПИД по смещению
ну, мне просто было лень печатать... можешь dt до самого финиша тащить, результат от этого не изменится... хотя... я понял мысль... в исходной формуле нигде не учитывается время между циклами... т.е. оно считается константой
Добавлено after 8 minutes 4 seconds: я И не обнуляю, а только ограничиваю... раньше ограничивал константой, теперь придумал новый, более гибкий способ (который я тут, на 1 странице предложил) только его надо немного допилить - ввести граничные условия, чтобы П+Д компонентами И в минуса не угнало...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения