Алгоритм управления нагревом

blackout

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

blackout

Первая идея - написать что-то вроде: dt = c1*A + c2*t, A - мощность, t - температура. Потом по первым данным найти c1 и c2 и дальше нагревать используя этот закон.
Но понятно, что dt = c1*A + c2*t слишком примитивный закон.

nitrix

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

blackout

время, при заданной разнице температур среды и термостата, в начале которого нагреватель перещелкивается на один градус в плюс
Проблема в том, что это время не константа и зависит от температуры. Как минимум потому, что теплопередача осуществляется как за счет теплопроводности. так и за счет излучения, которое сильно влияет при больших температурах.
Можно делать вообще A1 = A0*dt1/dt0, где A - мощность, t - температура, 1, 0 - следующая. предыдущая. Но тогда из-за запаздывания реакции термометра на нагреватель может начаться колебательный процесс, когда мы сначал перегреваем, потом недогреваем.
Кроме того никаких других термометров нет и вообще техническая сторона вопроса не интересует, только общий алгоритм.

nitrix

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

blackout

Во-первых нагреваемый предмет может быть сильно разным, так что сатистика по одному ничего не скажет про другой.
Во-вторых, пусть мы меняем мощность раз в 10 секунд. Допустим, что из-за инерции на производную температуры значительно влияет мощность за последнюю минуту. Тогда нам надо набрать статистику по 7-ми парметрам - текущей температуре и 6-ти предыдущим мощностям. Понятно, что это слишком много.

nitrix

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

blackout

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

nitrix

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

blackout

О каком законе речь? Он учитывает теплопередачу излучением?

blackout

То есть фактически это закон dt = c1*A + c2*t, о котором я уже писал. Он не учитывает 1) излучения 2) инерции.

nitrix

Инерция будет влиять только на начало и на конец процесса, как мне видится. Ну и при температурах порядка сотни градусов излучение можно не учитывать особо, конвекция много важнее.

blackout

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

nitrix

Оу, я думал, что у тебя при низких температурах происходит все. Тогда без автоподстройки в этой задаче ловить нечего в плане постоянной производной, вряд ли получится экспериментально или аналитически подобрать зависимость.

blackout

Ну я как-бы и хотел написать закон в общем виде с неизвестными коэффициентами, а потом найти коэффициенты по первым данным. Однако какой именно вид должен иметь закон совершенно не ясно.

nitrix

ну будет стефан-больцман для излучения плюс экспонента для теплопередачи, в итоге три коэффициента - два в экспоненте и один у t^4, найти малореально

blackout

Ну найти их не проблема. Нагреваем некотрое время, подстваляем в уравнение мощность и температуру, получаем уравнения на коэффициенты.
Другое дело, что реально получится закон навроде dt = F(t, A0, A1, A2 ... An где A0, A1, A2 ... An - мощности за n предыдущи периодов времени. И эта F имеет совершенно неясный вид.

nitrix

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

antcatt77

на практике похожие задачи решаются через pid-регулятор
http://ru.wikipedia.org/wiki/PID
может и тебе подойдет.

blackout

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

antcatt77

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

blackout

должны быть не констатные, а вида k(t)
Возможно.
эксперименты ставить можно? т.е. взять данное тело - и погонять его какое-то время - замеряя как на нем меняется температура?

Можно, но в конце концов должно работать для сравнительно любого тела.

antcatt77

Можно, но в конце концов должно работать для сравнительно любого тела.
т.е. на этом любом теле нельзя будет провести предварительно эксперимент?

blackout

Нет, единственный эксперимент конкретно на нем это история текущего сеанса нагрева.

antcatt77

Нет, единственный эксперимент конкретно на нем это история текущего сеанса нагрева.
тогда задача в целом не имеет решения - если речь идет именно о любом теле.
потому что таким телом может быть, например, металлический стакан с водой - который над нагреть от 20 до 200.
и ты никоим образом не сможешь заранее догадаться:
во-первых - что в точке кипения воды надо резко увеличивать мощность (может же быть не вода, а что-то другое)
во-вторых - насколько долго нужно увеличивать мощность (воды может быть разное кол-во)
в-третьих - что после того, как вода выкипела надо резко мощность снижать, т.к. общая теплоемкость резко упала
ps
если на вид тела есть какие-то ограничения, то можно что-то и попридумывать.

blackout

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

antcatt77

тогда проще. т.к. можно считать что функции у тебя гладкие.
тогда строй набор моделей "расширяющихся" по кол-ву зависимых переменных.
и на основе экспериментов смотри зависимости.
имеется ввиду следующее:
в первом приближении: у тебя физ. модель простая:
греем,
термометр реагирует с какой-то инерцией
тело остывает.
поверх этого можно построить расширяющиеся мат. модели
1а. инерция - константа
1б. остывание - константа
2а. инерция - зависит от температуры
2б. остывание - зависит от температуры
3а. инерция - зависит от мощности
3б. остывание - зависит от мощности
4а. инерция - зависит от мощности и температуры
4б. остывание - зависит от мощности и температуры
5а. инерция - зависит от суммарной мощности на интервале и температуры
5б. остывание - зависит от суммарной мощности на интервале и температуры
и т.д.
соответственно, на основе экспериментов прикидываешь зависимости, в табличном виде - их записываешь.
а потом скармливаешь pid-регулятору.

antcatt77

на первый взгляд:
у тебя остывание должно зависит от температуры
а инерционность - должна быть константой

blackout

Инерция зависит от температуры, так как при большой температуре излучение сильное, а при маленькой слабое, в то время как теплопередача одинаковая.
И вообще эта инерция слишком расплывчатое понятие. Пока мне больше всего нравится идея с dt = F(t, A0, A1, A2 ... An). F скорее всего многочлен или приближается многочленом, причем без перекрестных произведений, и все Ai в первой степени.
Оставить комментарий
Имя или ник:
Комментарий: