Перейти к содержанию

    

Несколько вопросов по ПИД регулятору

Возникла необходимость и желание ознакомиться с ПИД регуляторами. Проблемы не заставили себя долго ждать...

Предположим, нужно сделать простой регулятор для паяльника. Берем ATmega8 и определяем 16р. OCR1A для управления нагревателем. OCR1A=0 и нагреватель выключен, OCR1A=65535 и нагреватель включен на полную мощность. Естественно, программируем 16р. ШИМ. Также я сделал измерение температуры жала. Итак, каждые 8ms программа получает данные о текущей температуре, рассчитывает ПИД и определяет новое содержимое OCR1A, выдавая на нагреватель соотв мощность...

А вот и проблемы:

1. Рассмотрим работу P регулятора. I и D выключены. Вроде все должно быть просто: OCR1A = OCR1A + Kp * E, где E = Tu - T; (Tu - уставка, T - текущая температура). Такая формула работает только в том случае, если T находится вблизи уставки. Т. е. задача сделать предварительный нагрев должна рассматриваться как отдельная задача... Тогда почему теория говорит о некоем смещении, которое свойственно P регулятору в установившемся режиме? Лично я его не наблюдаю! Температура у меня четко держится на уровне уставки с небольшими отклонениями на 1 градус максимум. Все соответствует вышеприведенной формуле, если преднагрев уже сделан. Если же не сделан, то имеем очень сильный "перелет" уставки, после чего все устаканивается... Вместе с тем, моя BGA паяльная станция построенная на ПИД контроллере REX100 (нижний подогрев) при выключенных I, D компонентах ведет себя несколько мудро: она предугадывает приближение к уставке, причем как сверху так и снизу и соответствующим образом управляет релейным выходом. Конечно, наверное я так тоже могу сделать, но вот вопрос - где тут заканчивается теория и начинается творчество разработчика? Где долбаное смещение? Как его увидеть? Уже потратил несколько часов, собрал макет, но есть ощущение, что теорию я не понимаю...

2. Попытки использовать интегральную (I) составляющую также ни к чему хорошему не привели. Малейшее ее влияние сильно замедляет систему и реакция на изменения температуры становится вялой. Она как бы не нужна здесь...

3. Чудо под названием D дифференциальная составляющая практически не может работать: с таким малым периодом (8ms) температура не успевает измениться значительно и соотв эта компонента если и влияет то очень слабо... Если увеличить период, то проигрываем в быстрой реакции из-за снижения частоты управления..

Итак, получается что проблема регулятора паяльника тупо вырождается в простой П регулятор с аккуратным преднагревом до уставки... И вот я думаю, прав ли я?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
54 минуты назад, ivainc1789 сказал:

Как ваш регулятор будет отвечать на резкое охлаждение паяльника средой?

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в том, что Вы начинаете заходить на задачу "снизу", а надо - "сверху".

Кроме того, хотя бы немного разобраться с тепловой моделью паяльника, моделью измерителя температуры, а это - динамические объекты, ну и с моделью возмущения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

П отвечает (линейно) за исправление ошибки между уставкой и реальной температурой. А на станции (паяльник) должно отслеживаться еще 

и "быстрота" ухода, т.е. "Д". К примеру Вы паяете 0.1 г - "пике" температуры будет плавным и небольшим (за счет теплоемкости-массы жала).

Если пропаиваете "медяшку" в несколько грамм, то будет резкое "пике" температуры на жале, соотв-но чтобы этот резкий переход скомпенсировать мы должны отличать плавные и небольшие уходы dT уставки от резких, когда надо сразу "нажать на газ".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, ivainc1789 сказал:

OCR1A = OCR1A + Kp * E

Это у вас получился не пропорциональный, а интегрирующий регулятор. У него статическая ошибка действительно нулевая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
37 минут назад, k155la3 сказал:

П отвечает (линейно) за исправление ошибки между уставкой и реальной температурой.

 

+1

Причем разница (ошибка) между уставкой и реальной температурой принципиально будет, ибо коэффициент усиления ограничен, а мы усиливаем ошибку.

Ошибку устраняет включение интегрирующего канала.

Изменено пользователем Strong

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, если я правильно понял вышесказанное применительно к озвученным условиям задачи нужно записать так: OCR1A = Kp * E. И результат при E >= 0 напрямую записывать в OCR1A каждые 8ms, а при E < 0 (перегрев) просто держать OCR1A = 0 (нагреватель полностью выключен)?

Если так, то да, будет некоторый постоянный недолет до уставки (смещение). И тогда все встает на свои места...

Правильно ли я понимаю, что если включить остальные компоненты (I и D), то при E < 0 (перегрев) знак OCRp = Kp * E становится важен ибо теперь OCR1A = OCRp + OCRi + OCRd (с проверкой на границы, конечно)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вам по секрету скажу - не нужен для паяльника ПИД. Релейного регулятора с головой достаточно, как показала практика. Именно его я и реализовал в моей паяльной станции. Поначалу тоже думал о ПИД, но потом понял, что релейный регулятор полностью решает мою задачу и дает перерегулирование в пределах градуса ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
17 hours ago, kovigor said:

Я вам по секрету скажу - не нужен для паяльника ПИД. Релейного регулятора с головой достаточно, как показала практика. Именно его я и реализовал в моей паяльной станции. Поначалу тоже думал о ПИД, но потом понял, что релейный регулятор полностью решает мою задачу и дает перерегулирование в пределах градуса ...

:)  мне кажется что ОН есть, даже если "его нет", он задан "параметрически", без явной математики и вычислений. А у ТС, насколько я понял, есть желание поработать именно с математикой. Хотя для этого более подходит Matlab и прочий софт подобного назначения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уже много-много раз наблюдаю, как люди путаются в этих трех соснах.

В очередной раз... от печки...

C*dT/dt = P  (1); T - температура, t - время, C - теплоемкость, P - мощность. Это приближение для сосредоточенной массы с теплоемкостью.

Пусть мощность P=-k*(T - T0) - D*d(T - T0)/dt - I * Integral ((T - T0)dt (2), где (T - T0) - рассогласование, k - пропорциональный, D - дифференциальный, а I - интегральный коэффициенты.

Продифференцируем (1) с учетом(2).

Получим выражение

C*T" = K*T' - D*T" +I*(T - T0) или (C+D)*T" = -K*T'  +I*(T - T0)

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

C+D  - масса, I -жесткость, а K - вязкое трение.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
22 hours ago, kovigor said:

Я вам по секрету скажу - не нужен для паяльника ПИД. Релейного регулятора с головой достаточно

Я был бы признателен, если бы вы рассказали о вашей реализации. Потому что как показали и мои эксперименты, ПИД для паяльника не то что не нужен - просто я пока считаю, что он не работает как хотелось бы, т. к. Д компонента практически бесполезна у меня или я еще не до конца понял/настроил теорию/практику.

5 hours ago, k155la3 said:

А у ТС, насколько я понял, есть желание поработать именно с математикой.

К сожалению, не могу похвастаться таким желанием. Есть желание оттолкнуться от практики, чтобы понять теоретическую часть в общих чертах.

Практически, как только я выполнил  OCR1A = Kp * E все сразу заработало как предполагалось. И даже удалось настроить И компоненту и понять, что нужно вовремя сбрасывать интегратор.

Но Д компонента пока слишком сложна в настройке: она влияет очень слабо, т. к. температура не способна (ИМХО) за 8ms сколь нибудь значительно измениться. Увеличение Д коэфф не особо помогает. Конечно, я мог бы увеличить период регулирования например до 100ms, но это же понятное дело, за такое время температура может и провалиться значительно... Пока не готов сказать, какие есть тут решения... И это при том, что реакция на эти провалы как раз и наиболее важна....

Возможно, какой нить ON/OFF метод действительно может оказаться... даже эффективнее...

Сейчас на стенде паяльник T12 с Ali работает на Меге8 и сделано все пока с применением флоат переменных, картриджи к нему якобы 75Вт (верится с трудом). Уставка устаканивается довольно быстро и тут еще требуется настройка и есть идеи, но реакция на касание полигона самодельной платы (нет металлизации и внутр слоев) приводит к падению температуры на 4 градуса в течение примерно 3сек  и как только отрываю от платы - идет восстановление до +3 над уставкой в течение примерно тех же 3сек. Такие результаты не могут меня устроить...

3 hours ago, Tanya said:

В очередной раз... от печки...

 Tanya, вы как напишете, у меня сразу начинаются бессонные ночи! ))) Можно вас попросить применить (и по возможности пояснить) написанное к условиям моей конкретной задачи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, ivainc1789 said:

Конечно, я мог бы увеличить период регулирования например до 100ms, но это же понятное дело, за такое время температура может и провалиться значительно... Пока не готов сказать, какие есть тут решения...

Решение тут в лоб. Подобрать оптимальный период измерения, обеспечивающий требуемый уровень точности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, ivainc1789 сказал:

 ПИД для паяльника не то что не нужен - просто я пока считаю, что он не работает как хотелось бы, т. к. Д компонента практически бесполезна у меня или я еще не до конца понял/настроил теорию/практику.

 

На 900-й серии затея сделать "правильный" PID-регулятор окончилась неудачей, насколько я помню (материалы можно поискать на "Радиокоте"). Подозреваю, что и с T12 тоже ничего хорошего не выйдет - термодатчик ведь все равно не на кончике жала...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, трудно быть программистом, работающим не по профессии.
 Когда-то давно столкнулся с очень неглупым парнем, молодым конструктором, которому поручили разработать экономайзер холостого хода. Чтобы двигатель автомобиля на стоянке держать для экономии бензина в режиме "вот-вот заглохну".
 Год  бился он головой об стену, решая, как учили,  системы дифуравнений. А двигатель с громадной электронной нашлепкой  упорно глох. Пока ему в каком-то гараже не объяснили что поздно включать после вычислений бензонасос, когда двигатель уже заглох а бензопровод давно пуст. Можно просто снизить обороты до гарантированного минимума 900 оборотов регулировкой педали газа. И в гаражах умельцы это давно делают гаечным ключом и отверткой.
 Кажется, у средней руки паяльника теплоемкость такова, что можно выбросить из головы 8мс , процессоры и строить это  с реакцией в 10-100 раз медленнее на основе простого релейного регулятора. Может, двуступенчатого.
Вот только с датчиком температуры аккуратнее . Он должен быть быстродействующим и показывать температуру жала а не где-то возле жала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 hours ago, ivainc1789 said:

Я был бы признателен, если бы вы рассказали о вашей реализации.

Не о чем там рассказывать, наверное. Отсчеты берутся 20 раз в секунду. Паяльник холоднее уставки ? Включаем его. Горячее ? Выключаем. Все !!!

Если хотите, могу выслать исходник и проч. Но смотреть там, ИМХО, не на что.

Да, паяльник - Hakko 936 с терморезистором (не с термопарой !) ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти