Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Помогите с проэктом печи нагрева. (Не могу толком понять алгоритм)
Помогите с проэктом печи нагрева.
Klim Дата: Ср, 11.05.2011, 13:25  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Всем добрый день. Сейчас доделываю модуль нагрева печи.
Исходная задача:
1. Вывести печь на режим 200 градусов
2. Поддерживать заданную температуру очень точно ( -+ 1 градус )

Печь наборная, состоит из 6 модулей. Каждый модуль имеет свой датчик температуры и нагревательный элемент. Всем этим управляет PIC16F877A. т.е. 6 ног порта D дергают силовую часть. Я уже порешал все вопросы, в железе все готово, мучаюсь только с моментом поддержания температуры (точность). Понимаю, что надо использовать ПИД регулирование, но никак разобраться с ним не могу. Просьба не пинать в поиск - весь перечитал, но все равно не разобрался. В простейшем варианте пока сделано так (проэкт прилагается). Сразу говорю, это не студенческая работа :). Просто сделали для своего цеха по порошковой покраски печь, а цифровую часть повесили на меня. Может кто-то поможет разобраться с данным вопросом? С меня будет пиво и море благодарности. Интересует только процесс нагрева и поддержания температуры. На индикацию просьба внимание не обращать (она вся оформлена в прерывании). Переменные резисторы имитируют работу термопар (аналоговые входы). Еще раз заранее огромное спасибо.

Прикрепления: Heater.dsn (156.4 Kb) · HEATER.hex (7.4 Kb) · Heater.bas (10.2 Kb)
ЯНДЕКС Дата: 11.05.2011
ADMIN Дата: Ср, 11.05.2011, 18:03  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А какой объем модулей и какая мощность нагревателей?
ivan_fd Дата: Ср, 11.05.2011, 18:08  |                                                                                                                Сообщение # 3
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

А какие датчики температуры? Какие нагревательные элементы стоят, мощность? Эти модули отдельные, то есть получается 6 отдельных печек, или как?
Klim Дата: Ср, 11.05.2011, 18:22  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Датчики температуры стоят в виде термопар. На каждый модуль - своя. Усилитель собран на операционнике. На 0.01 вольта - 1 градус. Это уже собрано и работает. Печь состоит из 6 модулей. Модули собраны вместе. В каждом модуле стоят тены. Мощность 20 киловатт на модуль. Обьем модуля приблизительно 8 кубометра. В каждом модуле стоит вентилятор для циркуляции воздуха. Циркуляция сдела так, чтоб максимально работать только в своем модуле т.е. можно приблизительно предположить, что модули стоят отдельно (чисто для упрощения). Хотя на самом деле у них общий объем.
RVSTAR_ Дата: Ср, 11.05.2011, 21:41  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 28
Репутация: 2   ±
Замечания:   ±
На сайте с 23.04.2009

Статус: Offline

На 8 м3 при нагревателях 20КВт, 200 `C, точность 1 `C - нереально (0,5 %). + к тому же у нагревателей есть теплоемкость
Klim Дата: Чт, 12.05.2011, 08:49  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Мне не нужна точность в каждом модуле. Мне надо, чтоб средняя температура печи держалась -+1 градус в районе термопар. Модуль управления, который мы использовали раньше (покупной) справлялся с этой задачей в этой печи на 100%. Мне поставлена задача - сделать свой модуль управления. Мне нужен алгоритм - дальше подстрою на рабочей печи.

Добавлено (12.05.2011, 08.49.16)
---------------------------------------------
Может поставим вопрос проще: Возьмем все по еденице, т.е. один модуль печи, один блок ТЕНов, один датчик температуры с точностью один градус. При этом воздух перемешивается так, что температура везде одинаковая (в реале оно очень близко к тому). Короче, возьмем идеальные условия. Итак. Дальнейшие действия сразу после измерения температуры?

ivan_fd Дата: Чт, 12.05.2011, 10:16  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

А чем подается на тен 220. Это ж какой ампераж?!!!
Quote (Klim)
Дальнейшие действия сразу после измерения температуры?

Если управлять тиристором, то удобно спомощью алгоритма Брезенхема (метод пропуска полупериодов), ну и конечно ПИД. Хотя я думаю здесь хватит и П или ПИ. О ПИД регуляторах на этом сайте уже есть тема, посмотрите там код.

Klim Дата: Чт, 12.05.2011, 10:35  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Управление идет через оптопару и симмистор. Эта часть уже есть и работает. Управление в силу событий возможно только по ПИД. Вот в этом и вопрос у меня. Как управлять по ПИД одновременно по 6 каналам. Читал я про ПИД все тут на форуме, разобраться толком не смог. Все очень абстрактно. Вот и прошу помощи на пальцах объяснить (писать код за меня не надо, я сам тут справлюсь). Мне нужен алгоритм. Типа - Померяли температуру, еще какое-то действие, и так до самого конца цикла. Просто я не могу понять как можно одновременно управлять сразу 6-ю каналами. В этом вся загвоздка. Кстати, насколько я все прочитал - у многих стоит эта проблема, и полностью ее никто не решил. Вообщем, если кто сможет, пусть обьяснит на пальцах порядок действий. Маломощный сиимистор управляет уже мощным 80-ми амперным симмистором. Я уже выше писал, что эта часть отработа как часы.
Сообщение отредактировал Klim - Чт, 12.05.2011, 10:38
ADMIN Дата: Чт, 12.05.2011, 10:55  |                                                                                                                Сообщение # 9
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Вот здесь теория более или менее расписана понятно. А насчет управления сразу 6-ю каналами у меня когда-то возникала мысль использовать один канал ШИМ, рассчитывая величину импульса по ПИД-закону для каждого канала и потом, как вариант, коммутировать этот выход через реле или что-нибудь другое на каналы. Там получается нужно рассчитать для каждого канала длительность импульса на включение, в зависимости от требуемой мощности. Поскольку модули у тебя одинаковые, расчет нужно делать для всех в одно и то же время, через определенный промежуток, но с учетом времени воздействия на каждый канал, так как к моменту воздействия на последний канал, возможно будет требоваться воздействие на первый. Я не дошел до практики, поэтому помочь не смогу. Есть еще так называемая "сказка" про ПИД. Почитай, может пригодится. Я это к тому, что формула для вычисления ПИД-воздействия подходит далеко не для всех случаев. Ну как-то так. Надеюсь, поможет.
ivan_fd Дата: Чт, 12.05.2011, 11:08  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Смотрите какая мне мысля пришла. Измеряем температуру на всех датчиках, допустим она разная на всех, но не сильно отличается. Суммируем все 6 показаний и делим на 6, получаем среднее значение температуры. Потом по этому значению ПИДом вычисляем выходное значение, и выдаем его на все 6 симисторов.
Может это и не правильный метод, но попробовать можно.

P.S: а что 80 Ампер тянет 20 кВт???

ADMIN Дата: Чт, 12.05.2011, 11:38  |                                                                                                                Сообщение # 11
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Quote (ivan_fd)
Смотрите какая мне мысля пришла. Измеряем температуру на всех датчиках, допустим она разная на всех, но не сильно отличается. Суммируем все 6 показаний и делим на 6, получаем среднее значение температуры. Потом по этому значению ПИДом вычисляем выходное значение, и выдаем его на все 6 симисторов. Может это и не правильный метод, но попробовать можно.

У меня на заводе есть промышленные печи Sweba Dahlen. Они имеют по 4 секции абсолютно одинаковые. Правда, каждая управляется своим контроллером. Так вот, при прочих равных условиях, температура в каждой отличается. Я так думаю, пустые они будут держать, а вот при загрузке, допустим, при разном расположении продукции, они начинают показывать разные температуры. И такое бывает. Если при управлении разными контроллерами температура плавает, то что будет, если подать одно и тоже значение на все? Одна будет нормально, вторая превышать, третья плавать, четвертая занижать. В общем, нужно обязательно вычислять воздействие отдельно для каждой секции. Это однозначно.

ЯНДЕКС Дата: 12.05.2011
Klim Дата: Чт, 12.05.2011, 12:39  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Извиняюсь, 10 киловат. Стоят 2 сиимистора на модуль, в модуле 1 пара кассет с ТЕНами по 5 киловатт каждая. На дисплей я и вывожу среднее значение. Моя цель добиться как можно более точного результата на всех модулях. Они устроены так, что горячий воздух очень мало проникает по соседним модулям. Главная цель вывести среднюю температуру 200 градусов (к примеру). Там диапозон от 160 до 220 под разные краски. Еще раз обьясню:
1. Вывести на режим максимально быстро (не проблема).
2. В течении определенного времени (таймер уже сделан и работает) поддерживать среднюю температуру максимально близко к заданной (лучше точно). Если не удасться, прийдется чуть смахлевать - реже делать замеры. При этом разброс по мудулям должен быть максимально меньшим (+- 5 градусов вполне допустимо). Главное, чтоб контроллер ловил среднее значение точно. (Остановимся на 200 для примера).
3. Регулировка необходима отдельно для каждого модуля. Это не обсуждается, т.к. печь уже стоит на обьекте, ждет только блока управления. При этом старый блок управления работал отлично в течении 5 лет. (Но проблема в том, что он был расчитан максимум на 2 модуля). Задачу мне поставили четко и конкретно - запустить свой модуль управления на 6 каналов. Железо все собрано, прошивки написаны и оттестированы. Осталось только дописать блок поддержания температуры. Пока временно все работает по принципу (Температура меньше уставки - включаем тены, больше - выключаем). Естественно ни а какой стабильности речи быть не может, хотя ТЕНы обдуваются очень сильно, т.е. инерция снижена максимально (даже в полной темноте не подсвечиваются.)
ivan_fd Дата: Чт, 12.05.2011, 14:41  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

В данном случаи:

По очереди: меряем первую термопару, получаем значение температуры, идем в подпрограмму вычисления ПИД, после ставим на выход симистора полученное значение, и так до 6, и снова сначала.
Но это нужно пробовать в железе, потому, что контроллер может и не справится (по времени) с поставленной на него задачей.

Klim Дата: Чт, 12.05.2011, 14:54  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Да я это сам понял, я с ПИД не могу разобраться, ну не могу и все. Если кто-то с этим работал - напишите - берем такие-то данные - умножаем, делим, слагаем и т.д. Мне только это непонятно .
ADMIN Дата: Чт, 12.05.2011, 16:33  |                                                                                                                Сообщение # 15
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Давай рассмотрим для одного канала:
(берем материал с сайта pidcontrol.narod.ru)

Quote

Важно чтобы частота поступления информации о РП была достаточной для обеспечения заданной точности регулирования.

Настраивают ПИД регулятор задавая индивидуальные для каждого из трех компонентов коэффициенты пропорциональности - обычно их обозначают так:

Kp для П, Ki для И, Kd для Д

Теперь можно записать алгоритм ПИД регулятора в псевдокоде, который нужно выполнять с заданной периодичностью - например каждые 20 милиСек - это время обозначим t_step

Предположим, мы используем ШИМ

MAX - максимальное воздействие - 100% (значение 255 для команды HPWM) - то есть постоянный импульс с выхода ШИМ (в Picbasic это выглядит как HPWM 1,255,1000)
MIN - минимальное воздействие - 0% (значение 0) - отсутствие импульса (в Picbasic это выглядит как HPWM 1,0,1000)

err = РП - ТП ' вычислить текущую ошибку - в данном случае это значит вычесть из требуемой температуры текущую - получим разницу (err) между ними
' УВ - управляющее воздействие

if (MIN < УВ < MAX) then 'если УВ не достигло предела, то
integral = integral + error ' то добавить ошибку в сумму ошибок
Endif
'Рассчитаем предварительный результат:

УВ_temp = Kp*err + Ki*integral*t_step + Kd*(err - pre_err)/t_step

'Это сама формула для вычисления ПИД.(но как я уже говорил, вся сложность в том, что она не идеальна для всех случаев, поэтому я и говорил про "сказку")
'Осталось подобрать эти коэффициенты, в чем и заключается сложность.

'Вычисляем непосредственное значение УВ (так как оно может выходить за максимальный или минимальный диапазон после вычислений)

If УВ_temp > MAX then
УВ = MAX
endif

If УВ_temp < MIN then
УВ = MIN
pre_err = err ' текущая ошибка стала "ошибкой предыдущего вычисления" для следующего вычисления

Форум Picbasic.ru » Программирование МК » Proton PicBasic » Помогите с проэктом печи нагрева. (Не могу толком понять алгоритм)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: