Jump to content

    

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

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

Предположим, нужно сделать простой регулятор для паяльника. Берем 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) температура не успевает измениться значительно и соотв эта компонента если и влияет то очень слабо... Если увеличить период, то проигрываем в быстрой реакции из-за снижения частоты управления..

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

 

 

Share this post


Link to post
Share on other sites
54 минуты назад, ivainc1789 сказал:

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

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

 

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

Share this post


Link to post
Share on other sites
1 час назад, ivainc1789 сказал:

OCR1A = OCR1A + Kp * E

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

Share this post


Link to post
Share on other sites
37 минут назад, k155la3 сказал:

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

 

+1

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

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

Edited by Strong

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
17 hours ago, kovigor said:

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

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

Share this post


Link to post
Share on other sites

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

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

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 - вязкое трение.

 

Share this post


Link to post
Share on other sites
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, вы как напишете, у меня сразу начинаются бессонные ночи! ))) Можно вас попросить применить (и по возможности пояснить) написанное к условиям моей конкретной задачи?

Share this post


Link to post
Share on other sites
1 hour ago, ivainc1789 said:

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

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

Share this post


Link to post
Share on other sites
1 час назад, ivainc1789 сказал:

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
2 hours ago, ivainc1789 said:

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

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now