avatar_Бандерівець

ПИД-Регулятор

Автор Бандерівець, 29-10-2011, 13:19:10

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Игорь

Цитата: Олежище від 29-03-2012, 12:31:41Так ведь я тоже ПИ управление на клапан сделаю и на отбор по пару
Не ленись, делай ПИД. "Д" можно исключить только если нет быстро изменяющихся возмущений. Но при отборе по пару таким возмущением будет любое изменение подачи воды.
Я сделал такой регулятор - именно для отбора по пару выше дефлегматора. Им сейчас пользуется СМIТ.
Подача воды в дефлегматор регулируется аналоговым ПИД-регулятором, опорная температура - либо в насадке (при ректификации), либо в зоне отбора пара  - при дистилляции.
Долго не мог наладить нормальной его работы в ПИ - режиме, пока не добавил Д - составляющую.
Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

Олежище

Диф. составляющая это одна строчка в программе, сам понимаешь.
Цитата: Игорь від 31-03-2012, 02:46:35Подача воды в дефлегматор регулируется аналоговым ПИД-регулятором,
Я конечно понимаю, что раньше все ПИД регуляторы были аналоговыми, но я тобой горжусь. После МК, возиться с аналоговой схемой и перепаивая детали устанавливать коэффициенты, не я не готов. :) хотя если жизнь заставит, то смогу.
Мою работу сейчас тормозит отсутствие 6мм нерж. трубки. Возиться с рубашечным дефлегматором это не совсем правильно. Но, блин, в Харькове уже 3 недели не могу купить, вчера МеталлХолдинг опять на неделю отфутболил, прочие поставщики с 6мм вообще дела иметь не хотят. Шо за страна....

Игорь

Цитата: Олежище від 31-03-2012, 14:17:28После МК, возиться с аналоговой схемой
Не после, а перед. После той схемы я твердо решил заняться МК.

У меня в той схеме по ПИД-управлению нагревался куб (стабилизация давлениа) и подавалась вода в дефлегматор. Вода в холодильник парового отбора - по П-закону. Индикация - световая и цифровая, на "морде" ровно 40 светодиодов.
Вот разработка и реализация платы давления
Guests are not allowed to view images in posts, please Register or Login

фото морды не могу найти.
Это была хорошая школа - что такое ПИД я прошупал вручную и понял хорошо.
Цитатавчера МеталлХолдинг опять на неделю отфутболил, прочие поставщики с 6мм вообще дела иметь не хотят. Шо за страна....

Шо за народ? Нет шоб спросить Игоря за трубу, а потом пойти и взять ее, - так нет, он батон на страну крошит.
Ты в Харькове? Если таки да - звони в понедельник 784-14-24, скажи, шо от меня :).
Спроси за славянский шкаф.... ой... за трубу.
И если найдешь у них шестёрку на один, с тебя магарыч.
Не знаю, может Хайм уже прикрыл свою лавочку, и ее нет уже ни на Киргизской 19, ни на Основянской, 106... Тогда магарыч с меня.
Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

ДЯДЬКА

Российская "история"-сплошная пропаганда и написана для оправдания кровавых преступлений против цивилизации.
   ДЯДЬКА.

БандерівецьTopic starter

#34
На своей макетке у меня такие данные +/-, вечером напишу точные данные

Тзад = 50С
Тмакс = 52С
Тмин   = 48С

А = 4С
Тс = 20 сек.

Управление нагревателем с помощью ШИМ, через irlz34n.
Для начало хочу настроить П- регулятор.

Далее свой расчет
Чтоб нагреть на 1 градус нужно увеличить значение  на ШИМ = 256/А = 64. То есть  при 48С ШИМ = 256, а при 52С  ШИМ = 0

Допустим у нас температура 49С, тогда ошибка 50-49=1, ШИМ = (А/2+ошибка)*Цена управления ШИМ = (2+1)*64= 192

Как я понимаю это без Кп, если с Кп то значение ШИМ нужно умножить на Кп.

Интервал с которым запускается расчет ШИМ 20 или 25 секунд.
Правильно?



Игорь

#35
Цитата: vovanxp від 06-04-2012, 16:09:36
Тзад = 50С
Тмакс = 52С
Тмин   = 48С
А = 4С
Тс = 20 сек.
Вова, если у тебя есть допустимый коридор температур, то достаточно сделать только П-регулирование. Если ты задаешь коридор от 48 до 52 градусов, для его поддержания достаточно настроить управление нагревом так, чтобы при 48 градусах и ниже он был максимальным. а при 52 и выше - отключался. В диапазане от 48 до 52 нагрев должен уменьшаться от 100 до 0%, или при восьмибитном вариатне - от 0 до 255Если имеющаяся мощность не меньше необходимой, но и не на порядок её выше , температура войдет "в клещи" и будет держаться в заданном диапазоне. я бы посоветовал для начала запрограммировать именно такой, "двухпороговый" пропорциональный регулятор, пощупать процесс, а потом идти дальше.
ЦитатаА = 4С
Тс = 20 сек.
Вова, это ты задал значения, или такие параметры у тебя получились при запуске в режиме старт-стоп?

ЦитатаЧтоб нагреть на 1 градус нужно увеличить значение  на ШИМ = 256/А = 64. То есть  при 48С ШИМ = 256, а при 52С  ШИМ = 0
Вова, при восьмибитке 256 - это ноль. Не забудь. Максимум это 255.
ЦитатаДопустим у нас температура 49С, тогда ошибка 50-49=1, ШИМ = (А/2+ошибка)*Цена управления ШИМ = (2+1)*64= 192
Погоди.
Давай по шагам.
1. Ты установил точку настройки 50 градусов.
2. Ты измерил максимальный "вылет" при старт - стопе  А = 4 градуса.
3. Значит Коэффициент пропорциональности Кп=0,55/А.

Значит пропорциональная составляяющая равна 0,55 / 4 х Ошибку
Чтобы значение ШИМ "0" соответствовало выключению нагрева, а 255 - 100%, ошибку будем вычислять как Тзад - Тфакт, тогда чем ниже фактическая температура, тем дольше будет нагрев.

Теперь мы можем вычислить значение П.
Если Тфакт= 49 градусов, П= 0,55 / 4 х (50-49) = 0,1375, то есть П-составляяющая будет стремться открыть нагрев на 13.75% от максимума. ПЕреведя в единицы ШИМ, получим 255 х 0,1375 = 35
ВАЖНО!
Если Тфакт будет 51 градус, составляющая П будет равна минус35, и это правильно. Нужно позволить составляющей П давать как положительный, так и отрицательный вклад в сумму ПИД, ограничив ее в диапазоне от -255 до +255.
И только потом, когда сумма ПИД будет получена, ее (эту сумму) надо будет ограничить значениями от 0 до 255.

ЦитатаИнтервал с которым запускается расчет ШИМ 20 или 25 секунд.
НЕТ! За 20 секунд твой объект успевает ищзменить температуру на 4 градуса! Если управлять так редко, получишь вечные недолеты и перелеты управления.

Пишу следующее сообщение - про квантование.

Вова, не забывай, что я не специалист в ПИД-управлении.



Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

Игорь

Для выбора частоты итераций, нужно задаться временем стабилизации системы в новом положении. Скажем, ты изменил настройку с 50 на 55 градусов. Нужно задать время, за которое ты хочешь, чтобы система стабилизировалась.
Я понимаю, что ты не собираешься менять задание, это нужно для того, чтобы система достаточно быстро стабилизироалась при изменении не только задания, но и при изменении внешних воздействий.

блин... все спят, я выключил свет, печатаю вслепую, будут опечатки...

Давай отвлечемся от твоего тестового объекта и рассмотрим колонну.
Если она полностью насыщена спиртом, в ней имеется как минимум 400 мл флегмы, из которых 50-100 мл можно безболезнегго отобрать отобрать при любом, самом безобразном режиме, пока управление не стабилизируется.
Поэтому, если отбор при ШИМ=255 составляет 2500 мл/час, 50 мл наберутся минимум за 0,02 часа, или за 72 секунды значит нам нвдо, чтобы время стабилизации системы отбора при любом воздействии не превышало минуты.

Дальше, важный момент.
Периодичность изменения ШИМ должна находиться в диапазоне от 1/10 до 1/100 от нужного времени стабилизации
Это значит, что если мы хотим, чтобы система устраняла помехи за минуту, мы должны измерять параметры, вычислять ПИД и менять ШИМ с частотой от 10 до 100 раз в минуту.

Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

Игорь

Пошли дальше.
Если мы используем дифференциальную составляющую, важно сделать время между замерами стабильным и без пропусков. В противном случае лучше вообще отказаться от Д.

Я не читаю лекцию, а рассуждаю! Ищи косяки.

Итак, допустим, мы установили частоту итераций 1 герц.

Переходим к дифференциальной составляющей.

Ее задача - препятствовать изменениям стабильности, компенсировать их.
Если между двумя замерами температура в твоей экспериментальной банке упала на 1/16 градуса, значит ты когда-то раньше недодал какую-то порцию тепла, и Д-составляющая должна в следующей порции возместить этот недостаток. Но насколько?

Что мы знаем о системе? Знаем, что если мы даем 100%-ный нагрев, температура поднимается на 4 градуса примерно за 10 секунд (половина от Тс), или  на 0,4 градуса за секунду.
Значит, если между двумя замерами (за секунду) температура упала на 0,4 градуса или больше, составляющая Д должна быть равна 100%, то есть 255, если не изменилась - должна быть равна нулю, а если выросла на 0.4 градуса, то минус 255 (это мне контрольные точки для проверки формулы).

Для вычислния Д нам надо считать дельту Тфакт. Чтобы не путаться со знаками, будем из старой температуры отнимать новую. Тогда, если температура упала, дельта будет положительной, и Д будет увеличивать нагрев. Все правильно.
Ввожу новое сокращение.  dTфакт =Tфакт старое - Tфакт новое.

Тогда дифференциальная составляющая Д =Тс / 2А х dTфакт = 2,5 dTфакт. Не забываем умножить это на 255.

Если dTфакт=0.4 , то Д будет равно 100%. Все верно.

Если дельта за одну секунду составит 1/16 градуса - одну "ступеньку" нашего градусника, то Д= 2,5 х 1/16 = 15,625%, или 40 в восьмибитном варианте, когда 100% соответствует 255 единиц ШИМ. Если две ступеньки, то 80, и так далее.

Дальше расмотрим составляющую И.
Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

Игорь

Составляющая И должна расти, пока имеется недолет температуры, и уменьшаться пока наблюдается перелет. Когда температура соответствует заданию, И не должно изменяться. Когда температура стабилизируется на заданой величине, составляющая П станет равной нулю (ведт ошибка нулевая), составляющая Д тоже станет равной нулю (dTфакт нулевое), а составляющая Д будет в точности соответствовать потерям тепла твоей банки, и будет давать в нее мощность, равную мощности потерь. Поэтому, чтобы иметь возможность дать полный нагрев,  максимальное значение, которое должна принимать составляющая И, должна быть равна 100%, то есть 255, а миимальное - на первый взгляд - ноль, чтобы можно было стабилизировать температуру при любых малых теплопотерях.
Но чуйка подсказывает мне, что нужно позволить И накапливаться до значения минус 255... Не могу пока сформулировать почему, да и не вижу необходимости  - проще будет проверить на реальном объекте.

Важнее сейчас поговорить о другом. О скорости нарастания И.
Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

БандерівецьTopic starter

Цитата: Игорь від 07-04-2012, 00:04:29то есть П-составляяющая будет стремться открыть нагрев на 13.75%
То есть мы получаем значение в процентах?

Игорь

Получаем в долях от полной мощности. Чтобы получить значение 8-битного ШИМ, умножаем на 28-1=255, для 9-битного - на 29-1=511, для 10-битного - на 1023
Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

БандерівецьTopic starter


m16

ну ка подай возмущение - положи кусочек льда . справится пид?

Игорь

#43
Сделел "пид-помогалку" для определения коэффициентов.
Модель - как у Вовы. Маленький маломощный нагреватель и датчик температуры на нем. Со временем можно будет сделать аналогичную модель для любого процесса.

Для начала надо подогнать параметры расчетной модели под реальный объект.
На реальном объекте нужно задать порог и запустить позиционное регулирование (старт-стоп). Система войдет в колебания с периодическим включением и выключением нагревателя.
После этого нужно выполнить такую последовательность действий.

1. Определить три величины - минимум и максимум температур и время между включениями нагревателя.
Допустим, при пороге 50 градусов, это 48-55 градусов и 20 секунд
2. Задать периодичность замеров и циклов управления. Она должна быть в 10-100 раз меньше периода, определенного на предыдущем шаге.
Давайте будем управлять раз в секунду.

3. Запускаем "помогалку". Отключаем П, И и Д (мнимаем нужные галочки) - видим белый график позиционного управления. Если соотношения мощностей нагрева и охлаждения достаточно чтобы довести температуру до порога, белая линия превратится в синусоиду. Если мощности недостаточно, добавляем в разделе "параметры".

4. Предварительно устанавливаем инерционность системы - в графе "инерция" вводим количество циклов замеров, равное периодичности колебаний при реальном, измеренном "старт-стопе", деленное пополам.

У нас период был 20 секунд, цикл замеров и управления в секунду, значит устанавливаем инерцию 10.
Чтобы произошел пересчет, нужно увести курсор из поля управления.

После пересчета синусоида изменит вид. Пока точно подгонять период не нужно.

5. Теперь, играясь другими параметрами настройки, нужно довести максимум и минимум синусоиды до тех, что были определены на реальном объекте.
Подогнав максимум и минимум, можно подстроить инерционность.
Все параметры изменяют график "на лету" и только два требуют выхода мышкой из поля настроек - это периодичность и выбор вида датчика.

Теперь расчетная модель соответствует реальному объекту и можно приступить к подбору параметров ПИД.

6. Включаем Пропорциональную составляющую.
При избыточных ее значениях красная температурная кривая будет такой-же синусоидой, что и белая старт-стопная.
[attach=1]
При недостаточных значениях кривая температуры не будет иметь начального всплеска и будет далека от порога.
[attach=2]
Изменяя параметр Кп, нужно добиться, чтобы красная температурная кривая стабилизировалась, но имела небольшой "начальный вылет" и 1-2 затухающих колебания перед стабилизацией.
[attach=3]

7. Теперь настроим дифференциальную составляющую. Не интегральную. а именно дифференциальную.
Ее задача - подавить колебания, особенно начальный вылет.
Включаем Д соответствующей галочкой и подбираем такое наименьшее значение, при котором  колебания кривой заметно снизятся. Наверное лучше всего добиться новой формы температурной кривой такой-же, как и старой, но как-бы значительно уменьшенной в масштабе. При этом температура все еще останется ниже порога.
[attach=4]
Не нужно завышать значения коэффициента Кд, так как малые завышения удлиняют время выхода на режим, а большие помимо того приводят к самовозбуждению и раскачке системы.

8. Пора настроить интегральную составляющую.
Ее задача - затянуть кривую в уровень порога.
Включаем "И" и подбираем значения.
Избыточное значение Ки приводят к большому начальному всплеску, а сильно завышенные вообще вводят температурную кривую в синусоидальные колебания.
[attach=5]
недостаточные значения Ки замедляют подход температуры к порогу.
[attach=6]
В любом случае некорректно подобранные значения Ки приводят к удлиннению времени выхода на стабильный режим.
Правильно подобранные коэффициенты дают такую картинку - быстрый подлет к порогу и быстрая стабилизация с минимальным вылетом.
[attach=7]
Такой режим у меня получился при таких параметрах системы и настройках ПИД.
[attach=8]
После подбора параметров и получения удовлетворительных результатов, нужно проверить систему на стабильность скачкообразным изменением порогов вверх и вниз. При необходимости можно подладить параметры ПИД.
[attach=9]

"Помогалка" приложена.
Эксель и VBA, макросы должны быть разрешены.







Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

БандерівецьTopic starter

Немного похвастаюсь AVR-C#

SMF spam blocked by CleanTalk