Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.abitu.ru/en2002/closed/viewwork.html?work=150
Дата изменения: Fri May 5 15:25:54 2006
Дата индексирования: Tue Oct 2 02:39:31 2012
Кодировка: koi8-r

Поисковые слова: dark nebula

Украина, г.Одесса, Мариинская гимназия.

Секция Информатика \ компьютерное моделирование + Общая физика





Программное управление тепловыми режимами тепловыделяющих объектов










автор:
Скворцов Юрий Дмитриевич
ученик 9кл. Мариинской гимназии
sag@com.od.ua
Научный руководитель:
Буз Василий Николаевич, ведущий научный
сотрудник ОНУ им. И.И.Мечникова













Одесса 2002



Содержание
Введение
3
1. Программное прогнозирование изменения
температуры тепловыделяющего обЪекта 4
Термостабилизация объекта с циклическим изменением
тепловыделения традиционными методами интенсивного охлаждения 4
1.2. Программа для расчета изменения температур 5
1.3. Результаты расчета термостатирования объекта
только за счет интенсивного охлаждения 6
1.4. Использование управляемого отвода тепла 6

2. Программное управление изменением температуры 8
2.1. Обоснование необходимости программного управления 8
2.2. Метод решения проблемы 8
2.3. Алгоритм работы программы контроля
температурного состояния объекта 10
Заключение
13
Приложение 1 14
Приложение 2 16
Приложение 3 24
Приложение 4 30
Список литературы 31
Введение.

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

Цель настоящей работы - исследование процессов отвода тепла от мощных
тепловыделяющих элементов, процессов распределения теплоты в плитах
теплопроводных материалов и управления этими процессами.

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

В этой работе сформулированы принципы высокостабильного
термостатирования объектов с использованием дополнительных устройств и
компьютера, управляющего их работой, и описание этих устройств и ПО.
В этой работе я сам провёл физические расчеты, разработал и создал
программу и аппаратное обеспечение. Из литературы и других источников взяты
общие принципы построения программ и аппаратной части, а также описания
тепловых труб.
1. Программное прогнозирование изменения температуры тепловыделяющего
обьекта.

1.1. Термостабилизация объекта с циклическим изменением тепловыделения
традиционными методами интенсивного охлаждения.

Наиболее простым способом обеспечения постоянства температуры объекта
является повышение интенсивности теплообмена с охлаждающей средой при
поддержании постоянной температуры этой среды. Примерами могут быть
радиаторы различных конструкций, контуры жидкостного охлаждения и т.п.
Оценим возможности такого метода термостабилизации на примере объекта с
циклическим изменением мощности при следующих исходных данных:
- Посадочная поверхность объекта термостатирования 100 мм х 200
мм.
- Точность поддержания температуры [pic]0,5 град.
- Полная теплоемкость объекта термостатирования 300 Дж/К
- Коэффициент теплопередачи через контакт между объектом
термостатирования и термостатирующей плитой 2000 Вт/(м2К)
Цикличность тепловыделения в объекте: 15 секунд
100 Вт,
10 секунд 500 Вт

1
2
3
Рис.1. Схема термостатирования.1 - объект термостатирования,
2 - плита, 3 - испаритель тепловой трубы.
Схема рассматриваемого способа термостатирования представлена на рис.1.
Отвод тепла от объекта тепловыделения 1 обеспечивается с помощью тепловой
трубы 3. Передача тепла от поверхности объекта к тепловой трубе
обеспечивается теплопроводной плитой 2.
Поскольку тепловыделение в объекте изменяется во времени, а термическое
сопротивление между объектом и плитой не равно нулю, температура объекта во
времени будет изменяться в соответствии с уравнением теплового баланса :

C1*?t1 = (N1- k12*S12(t1 - t2))* ? T (1)
Уравнение теплового баланса плиты запишем в виде

C2*?t2 = (k12*S12(t1 - t2) -k23*S23(t2 - t3))*?T (2)

где C - полная теплоемкость, t - температура, ?T - интервал времени, ?t -
изменение температуры за время ?T, N - тепловой поток, k - коэффициент
теплопередачи, S - площадь контакта, индексы 1, 2 и 3 относятся к объекту
термостатирования, плите и тепловой трубе, соответственно. Зная начальные
значения температур, и задавшись шагом по времени ?T с помощью уравнений
(1) и (2) можно рассчитать изменение во времени температур t1 и t2 при
любом заданном законе изменения N1.

1. Программа для расчета изменения температур.

Расчеты проводились с помощью программы. Эта программа выполняет
подстановку последовательных значений параметров в соответствующие функции,
и результаты загружает в элемент управления Chart.

В начале программы следуют несколько объявлений. Объявляется набор CV,
состоящий из имён переменных. Это необходимо для конвертации имён
переменных в числовые значения. Далее это используется в функции calculate.
В качестве индекса массива там используются не целые числа, а имена
переменных. Это делает более понятным физический смысл формул. Имена
переменных совпадают с их физическим значением. Кроме того для имён введены
индексы H и L, которые обозначают периоды пониженного и повышенного
тепловыделения. Далее объявляется 2 идентичных массива. В одном содержатся
начальные значения переменных, во второй записываются значения при
наименьшей амплитуде колебаний t1. Функция calculate производит
предварительную подготовку переменных и выполняет цикл. В цикле сначала
стоит блок условий, отвечающих за переключение режимов работы объекта.
Далее выполняется пересчёт по формулам (1) и (2). Затем находится блок
условий, вычисляющих минимум и максимум t1. Потом данные загружаются в
график. После выхода из цикла происходит выявление самого оптимального
варианта. Затем находится ещё один цикл, выполняющий аналогичные действия
при изменении TUL и TUH. Результаты выполнения записываются во второй
график. На этом графике отображается зависимость амплитуды колебаний от TUL
и TUH. Кроме того в программе есть некоторые вспомогательные функции.
Вертикальную шкалу первого графика можно двигать с помощью двух компонентов
UpDown. В программе организован удобный ввод начальных данных с помощью
компонентов ListBox и Edit. Нажиманием на кнопку "показать данные" в меню
"файл" вызывается панель для наблюдения значений начальных данных. При
наведении курсора на обозначение переменной на панели, в нижней строке на
главном окне появляется подсказка, поясняющая смысл этой переменной. На
этой панели имеется CheckBox, активизация которого приводит к выводу
данных, при которых был достигнут наилучший результат. Для сброса
наилучшего результата имеется кнопка в меню "файл". Там же есть возможность
сохранения графиков в BMP - файл.

Текст программы в calc\U1calc.cpp, U1calc.h, U2calc.cpp,
U2calc.h.,U3calc.cpp,U3calc.h,U4calc.cpp,U4calc.h. см. приложение 2.

2. Результаты расчета термостатирования объекта только за счет интенсивного
охлаждения.

Результаты расчетов по описанной программе представлены на рис.2. В
расчетах принято, что С2 = 500 Дж/К, [pic], [pic]13.5оС.
[pic]
Рис.2. Результаты совместного решения уравнений (1) и (2). Красная линия -
объект термостатирования, синяя линия - плита.

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

3. Использование управляемого отвода тепла.

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

На рис. 3 представлены результаты расчетов по описанной в разделе 1.2
программе для С2 = 200 Дж/К с учетом того, что при уменьшении
тепловыделения в объекте до 100 Вт тепловая проводимость ТТ уменьшается в
десять раз по сравнению с ее проводимостью при N1=500Вт. Амплитуда
колебаний температуры объекта составляет величину порядка 3 градусов, что
также больше предъявляемых требований. Однако, подбирая закон изменения
термического сопротивления ТТ эту амплитуду можно уменьшить. Так, если
изменение термического сопротивления ТТ производить за 2 секунды до
изменения тепловой нагрузки, то можно в рассмотренном случае обеспечить
амплитуду пульсаций температуры порядка 1 градуса (см.рис.4).


[pic]
Рис.3.

[pic]
Рис.4.

Таким образом, требуемое качество термостабилизации можно обеспечить
путем управления работой тепловой трубы. Важной особенностью является то,
что необходимо производить упреждающие изменения термического сопротивления
тепловой трубы - за несколько секунд до того, как произойдет изменение
режима работы объекта. Оптимальные значения времени опережения изменения
работы тепловой трубы, а также характеристики требуемых изменений могут
быть рассчитаны с помощью разработанной программы, представленной в разделе
1.2.




2. Программное управление изменением температуры.
2.1. Обоснование необходимости программного управления.

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

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

2.2. Метод решения проблемы.

Данную проблему можно решить аппаратно: создать устройство, которое
будет в заданные моменты времени действовать на тепловую трубу нужным
образом.
Приблизительная блок - схема такого устройства может выглядеть так (рис.5).
Однако такое устройство будет обладать рядом недостатков:

- оно будет громоздко;
- оно не будет реагировать на изменение температурного режима;
- оно не может быть использовано в других похожих задачах;
- оно становится бесполезно при изменениях электрических параметров
объекта.
Рассмотрим методы борьбы с этими недостатками.

1. Минимизировать габариты и вес устройства можно, если использовать
вместо некоторых узлов устройства узлы, уже имеющиеся в наличии. В
главе 1 говорилось о том, что объект - составная часть сложного
прецизионного устройства, применяющегося в военной или космической
промышленности. Как правило, в таких, или сопутствующих им устройствах
имеется компьютер. Логично было бы использовать его возможности.
2. Реагировать на изменения температурного режима и эффективно влиять на
работу устройства можно, если использовать компьютер и соответствующее
ПО.
3. Использовав компьютер и соответствующее ПО, можно добиться
совместимости устройства с другими объектами.
4. Отслеживать изменение электрических параметров устройства, вычислять,
а затем корректировать работу устройства можно с помощью программы.

[pic]

Из этого можно сделать вывод, что наиболее удобное решение проблемы -
использование компьютера.
Так как решено использовать компьютер, то можно создать и более сложный
метод термостатирования. Определимся с аппаратной частью. Так как от
устройства требуется минимальный вес, то будет логично все вычисления и
преобразования производить программно, а в устройстве оставить только
датчики, исполняющие устройства (регулирующие нагреватели), ЦАП и АЦП. Для
дальнейшей разработки метода необходимо определить количество и назначение
датчиков и исполняющих устройств.

1. Мы решили использовать систему упреждающей реакции на изменение
мощности. Это обуславливает контроль электрических параметров
объекта. Для того, чтобы иметь о них представление необходимо 2 входа
АЦП.
2. Для корректировки работы по тепловым параметрам и равномерности
распределения температуры по плите необходимо 5 датчиков и 5
нагревателей, распределённых по плите в шахматном порядке. Это 5
входов АЦП и 5 выходов ЦАП.
3. Для управления теплопроводностью тепловой трубы необходим 1
нагреватель. Это 1 выход ЦАП.
4. Для контроля состояния тепловой трубы может потребоваться датчик. Это
вход АЦП.

Итого имеем 8 входов АЦП и 6 выходов ЦАП. Так как мы решили использовать
компьютер, то аппаратную часть придётся переработать, но эти особенности
сейчас рассматриваться не будут.

2.3. Алгоритм работы программы контроля температурного состояния объекта.

В модуле (termos\UOut.cpp + UOut.h см. приложение 3) объявляется класс
Outside со следующими Public - компонентами: массив out[8], массив in[8], и
метод Refresh(). Описывать особенности организации этого класса сейчас нет
надобности, так как он содержит элементы, которые становятся понятны лишь
после детального ознакомления с конструкцией аппаратной части. Хотелось бы
описать лишь несколько конструкционных элементов. В конструкторе класса
TForm1 прописано подключение библиотеки io.dll, которая содержит функции In
и Out. Дело в том, что в среде Borland C++ Builder отсутствуют функции
работы с портом, в то время как в MS Visual C++ они имеются. По этому было
решено использовать dll, написанную на MS V C++. Её текст находится в файле
io.cpp. В процедуре Out используется довольно интересный приём. При
передаче результата из dll-и в программу стандартным способом (int Out(int
p)) могут возникать некоторые неполадки, связанные с операционной системой.
Чтобы избежать этого используется объявление процедуры 'void Out(int p,int&
d)'. Эта процедура в качестве второго аргумента получает ссылку на
переменную, в которую необходимо записать возвращаемое значение. Так
удаётся избежать всяческих неприятностей.

Весь вышеописанный блок позволяет в остальной части программы больше
не задумываться о работе с портом. Всё, что необходимо для отправки и
получения данных через порт - это произвести следующие действия:
1. Задать значения массиву out[n], где n - номер выхода ЦАП, а заданное
значение - напряжение на нём.
2. Вызвать метод Refresh().
3. Снять значения с массива in[n], где n - номер входа АЦП, а снятое
значение - напряжение на нём.
Теперь обсудим алгоритм работы основной части программы.
Так как изменение нагрузки происходит циклически, то было бы логично в
течение записывать электрические и тепловые параметры устройства. Для
этого необходимо сначала определить схему включения объекта и АЦП. Наиболее
полное представление об электрических параметрах даёт схема (рис.6).

[pic]
Для определения цикличности программа должна выполнять следующие действия с
некоторым интервалом:
0. T = T + 1;
1. U1 = АЦП.1;
2. U2 = АЦП.2 - АЦП.1; (блок1)
3. I = U / R (R = 1);
4. P = U1 * I;
5. masС[ T ] = P;
6. //перебор элементов массива и проверка на цикличность.
После того, как обнаружена цикличность, необходимо вычислить периоды её
стадий (T1,T2), и выделяемую мощность на этих стадиях.
Теперь необходимо ввести такую величину, как задержка прохождения теплового
импульса от тепловой трубы к объекту (?Tпр). Эту величину можно рассчитать,
как разность между двумя моментами времени:
1. Момент подачи сигнала на управление тепловой трубой.
2. Момент прихода теплового импульса на объект.

Момент прихода импульса на объект можно фиксировать по изменению
электрического сопротивления объекта, но это довольно сложно, и мы
ограничимся измерением показаний одного из пяти термодатчиков на корпусе
объекта. Для проведения процедуры необходимо при постоянной мощности на
объекте подать сигнал на управление тепловой трубы и засечь момент прихода
изменения температуры на термодатчик. При чем необходимо провести 2 таких
измерения (?T1пр,?T2пр) при разных стадиях тепловыделения на объекте.
После вышеуказанных подготовительных действий можно приступать
непосредственно к термостабилизации. Для этого необходимо выполнять
следующие действия:
1. Засечь перепад электрической мощности;
2. По данным пробного цикла определить момент прихода следующего
перепада;
3. За ?T1пр или ?T2пр (в зависимости от стадии тепловыделения) до этого
момента изменить сигнал управления тепловой трубой на ?t;
Параллельно с этими действиями необходимо выполнять (блок 1), и таким
образом корректировать исходные данные. Кроме того необходимо записывать в
mast[ T ] значение температуры на центральном термодатчике. После этого
необходимо изучить пульсации температуры по данным из mast[ ]. Если во
время повышенного тепловыделения температура повышалась более чем на
допустимое значение, то необходимо увеличить ?t. Если же температура,
напротив, падала, то необходимо уменьшить ?t. Если в начале цикла
происходит прыжок температуры, то необходимо увеличить ?Tпр.

Кроме того, необходимо производить равномерное распределение тепла по
плите. Этого можно добиться, корректируя работу пяти нагревателей.
Обозначим данные, снятые с термодатчиков как ti[4], а данные, которые
необходимо отправить на нагреватели - to[4]. Для проведения этой процедуры
необходимо выполнить следующие действия:

1. tср = ti[0] + ti[1] + ti[2] + ti[3] + ti[4]
2. //цикл, в котором to[i] определяется, как (tср - ti[i]). Если это
значение отрицательно, то задать его равным 0.
Теперь составим блок-схему программы. (рис 7)
Все вышеописанные действия выполняет объект класса Tcalc, описанного в
termos\UOut.cpp + UOut.h. Для этого класса определены несколько служебных
переменных, а также методы Prognose() - осуществляет вырабатывание
управляющего сигнала, Correct() - корректирует значения переменных, Init()
- производит подготовительные действия.

[pic]
Заключение.
Создана программа, позволяющая прогнозировать температурные режимы
тепловыделяющих объектов в нестационарных условиях, определяемых
непостоянством тепловыделения в объекте. Расчеты, проведенные с помощью
этой программы, показали, что постоянство температуры термостатирующей
плиты, на которой крепятся объекты тепловыделения, при переменном
тепловыделении не обеспечивает требуемого качества термостатирования
объекта. Из расчетов также следует, что можно существенно повысить качество
термостатирования, если температуру термостабилизирующей плиты не
поддерживать постоянной, а изменять по определенному закону, причем, начало
изменения температуры плиты должно происходить на некоторое время раньше,
чем произойдет изменение тепловыделения объекта.
Устройством, позволяющим легко в широких пределах изменять температуру
плиты путем изменения термического сопротивления между плитой и охлаждающей
средой, может быть контурная тепловая труба. Достоинством системы
терморегулирования на контурных тепловых трубах являются малые затраты
энергии на регулирование (несколько Ватт при передаваемой мощности
несколько сотен Ватт), а также отсутствие движущихся частей, что определяет
высокую надежность системы.
При заданном циклическом тепловыделении объекта необходимый закон
изменения температуры плиты можно было бы предварительно рассчитать с
помощью созданной программы и проверить его эффективность в ходе
предварительных экспериментов. Однако, учитывая индивидуальность некоторых
параметров системы (например, значения контактных термических
сопротивлений), а также возможность изменения их значений со временем, этот
путь признан нецелесообразным. Независимое задание закона изменения
температуры плиты может привести к неуправляемым колебаниям температуры.
Принято решение проводить компьютерное управление температурным режимом
объекта. В ходе такого управления с помощью созданной программы при
заданном законе тепловыделения рассчитывается такой режим регулирования,
который обеспечивает минимальную температурную нестабильность объекта. В
ходе реализации этого регулирования отличия показаний датчиков температуры
от значений, предсказанных программой, являются основанием для
автоматического изменения в программе значений поправочных коэффициентов к
некоторым параметрам системы.
В работе представлено принципиальное описание аппаратного обеспечения,
позволяющего реализовать описанное управление. Создана программа для работы
этого аппаратного обеспечения, позволяющая реализовать взаимосвязь между
объектом и компьютером. В настоящее время проводится монтаж аппаратного
обеспечения. После его завершения предполагается провести отладку системы и
внести необходимые коррективы в программном обеспечении.
По завершении работ предполагается провести испытания при разнообразных
законах изменения тепловой нагрузки. Особое внимание предполагается уделить
способности системы подавлять резонансные температурные колебания.
Приложение 1.


Особенности конструкции тепловых труб. [4]


Тепловая труба представляет собой герметично запаянную с обоих торцов
трубку, внутри которой удален воздух и находится некоторое количество
жидкости. На внутренней поверхность трубки находится пористый фитиль (одно-
или многослойная сетка, волокнистый материал, спеченный порошок металла и
т.п.). Жидкость обычно впитывается пористым фитилем и удерживается внутри
него силами поверхностного натяжения. Если одну часть трубки нагревать, а
другую охлаждать, то в зоне подвода тепла внутри трубки будет происходить
испарение жидкости, а в зоне отвода тепла - конденсация пара. Вследствие
этого в зоне подвода тепла будет наблюдаться заглубление жидкости в
пористую структуру, а в зоне отвода тепла - затопление пористой структуры.
Заглубление жидкости сопровождается искривлением жидкостных менисков в
порах, а значит возникновением разности давлений между паром и жидкостью
[pic], где [pic] - коэффициент поверхностного натяжения, [pic] - радиус
кривизны поверхности жидкости, [pic]- давление. Индексы «П» и «Ж» относятся
к пару и жидкости соответственно. Пониженное давление в жидкости на участке
подвода тепла обеспечивает переток жидкости из зоны конденсации в зону
испарения. При непрерывном подводе и отводе тепла внутри трубы будет
происходить циркуляция - движение пара в центральной части трубки от зоны
подвода тепла к зоне отвода тепла и движение жидкости по пористому фитилю в
обратном направлении. В ходе такой циркуляции происходит перенос тепла
вдоль трубки. Оказывается, что эффективная теплопроводность такой трубки
примерно в десять раз выше, чем у стержня того же диаметра, сделанного из
наиболее теплопроводных материалов (медь, серебро). Способность тепловых
труб хорошо передавать тепло широко используется для охлаждения различных
устройств и, в первую очередь, радиоэлектронной аппаратуры.

Более совершенным устройством, активно разрабатываемым различными
фирмами в течение последних десяти лет является контурная тепловая труба,
схема которой представлена на рис.1П. Главным отличием контурной тепловой
трубы от традиционной тепловой трубы является то, что пористая структура
находится не на всей длине движения жидкости, а только в зоне испарения, а
также то, что паровой канал и жидкостный разделены. В таком устройстве
значительно меньше сопротивление движению жидкости, чем в традиционной
тепловой трубе. Это определяет существенно лучшие характеристики -
современные контурные тепловые трубы могут передавать тепловые потоки в
несколько киловатт на расстояния до десяти метров.

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

[pic]
Рис. 1П. Схема контурной тепловой трубы.
Приложение 2.

Текст программы для прогнозирования изменения температуры тепловыделяющего
объекта.


U1calc.cpp


//--------------------------------------------------------------------------
-
//главная форма
#include
#pragma hdrstop

#include "U1calc.h"
#include "U2calc.h"
#include "U3calc.h"
#include "U4calc.h"
//--------------------------------------------------------------------------
-
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString name[30] = {"C1","C2","N1L","N1H","N2L","N2H","PTL","PTH",
"k12","k23L","k23H","S12","S23","t1","t2","t3","TUL","TUH",
"tmax","tmin","dif","difmin"};
enum CV {C1 = 0,C2,N1L,N1H,N2L,N2H,PTL,PTH,
k12,k23L,k23H,S12,S23,t1,t2,t3,TUL,TUH,tmax,tmin,
dif,difmin,dt1,dt2,Tl,N1,N2,k23,T2};
double EL[35] = {350,200,90,500,0,0,16,12,2000,200,
2000,0.02,0.02,20,20,13.5,2,3,0,0,100,100};
double ELBest[35];
double temp[10];
bool PN;
void calculate();
void calculate()
{
temp[0] = EL[t1];
temp[1] = EL[t2];
PN = 0;
EL[Tl] = 0;
EL[tmax] = -100;
EL[tmin] = 100;
Form1->Series1->Clear();
Form1->Series2->Clear();
Form1->Series3->Clear();
for (double T = 0;T < 500;T += 0.0555)
{
EL[T2] = T - 350;
EL[Tl] += 0.0555;
if (EL[Tl] + EL[TUL]*PN + EL[TUH]*(!PN) > EL[PTL]*PN + EL[PTH]*(!PN))
{
EL[N2] = EL[N2L]*PN + EL[N2H]*(!PN);
EL[k23] = EL[k23L]*PN + EL[k23H]*(!PN);
}
if (EL[Tl] > EL[PTL]*PN + EL[PTH]*(!PN))
{
EL[N1] = EL[N1L]*PN + EL[N1H]*(!PN);
PN = !PN;
EL[Tl] = 0;
}

EL[dt1] =(EL[N1] - EL[k12]*EL[S12]*(EL[t1] - EL[t2]))/EL[C1]*0.0555;
EL[dt2] = (EL[k12]*EL[S12]*(EL[t1] -
EL[t2]) - EL[k23]*EL[S23]*(EL[t2] - EL[t3]) + EL[N2])/EL[C2]*0.0555;
EL[t1] += EL[dt1];
EL[t2] += EL[dt2];

if (EL[T2] == 0)
{
EL[tmax] = EL[t1];
EL[tmin] = EL[t1];
}

if(EL[T2]>0)
{
if (EL[t1]>EL[tmax])
EL[tmax] = EL[t1];
if (EL[t1] EL[tmin] = EL[t1];
}


Form1->Series1->AddXY(EL[T2],EL[t1]);
Form1->Series2->AddXY(EL[T2],EL[t2]);
Form1->Series3->AddXY(EL[T2],EL[N1]/1000+38);
}
EL[t1] = temp[0];
EL[t2] = temp[1];
EL[dif] = EL[tmax] - EL[tmin];
if (EL[tmax]-EL[tmin] < EL[difmin])
{
EL[difmin] = EL[tmax]-EL[tmin];
for (int i = 0;i <= 30;i++)
ELBest[i] = EL[i];
}
//-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-
'-'
temp[2] = EL[TUL];
temp[3] = EL[TUH];
temp[4] = EL[tmax];
temp[5] = EL[tmin];
temp[6] = EL[difmin];
temp[7] = EL[dif];
Form1->dtopt1->Clear();
for(double i=0;i<=10;i+=0.1)
{
EL[TUL]= i;
EL[TUH]= StrToFloat(Form1->Edit3->Text) + i * Form1->RadioButton2->Checked;
temp[0] = EL[t1];
temp[1] = EL[t2];
PN = 0;
EL[Tl] = 0;
EL[tmax] = -100;
EL[tmin] = 100;
for (double T = 0;T < 500;T += 0.0555)
{
EL[T2] = T - 350;
EL[Tl] += 0.0555;
if (EL[Tl] + EL[TUL]*PN + EL[TUH]*(!PN) > EL[PTL]*PN + EL[PTH]*(!PN))
{
EL[N2] = EL[N2L]*PN + EL[N2H]*(!PN);
EL[k23] = EL[k23L]*PN + EL[k23H]*(!PN);
}
if (EL[Tl] > EL[PTL]*PN + EL[PTH]*(!PN))
{
EL[N1] = EL[N1L]*PN + EL[N1H]*(!PN);
PN = !PN;
EL[Tl] = 0;
}

EL[dt1] =(EL[N1] - EL[k12]*EL[S12]*(EL[t1] - EL[t2]))/EL[C1]*0.0555;
EL[dt2] = (EL[k12]*EL[S12]*(EL[t1] -
EL[t2]) - EL[k23]*EL[S23]*(EL[t2] - EL[t3]) + EL[N2])/EL[C2]*0.0555;
EL[t1] += EL[dt1];
EL[t2] += EL[dt2];

if (EL[T2] == 0)
{
EL[tmax] = EL[t1];
EL[tmin] = EL[t1];
}

if(EL[T2]>0)
{
if (EL[t1]>EL[tmax])
EL[tmax] = EL[t1];
if (EL[t1] EL[tmin] = EL[t1];
}
}
EL[t1] = temp[0];
EL[t2] = temp[1];

Form1->dtopt1->AddXY(EL[TUL],EL[tmax]-EL[tmin]);
}
EL[TUL] = temp[2];
EL[TUH] = temp[3];
EL[tmax] = temp[4];
EL[tmin] = temp[5];
EL[difmin] = temp[6];
EL[dif] = temp[7];
//-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-
'-'

}
//--------------------------------------------------------------------------
-
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::CalcClick(TObject *Sender)
{
if((Edit3->Text != "")&&(Edit3->Text != "-"))
if((StrToFloat(Edit3->Text) > -10)&&(StrToFloat(Edit3->Text) < 10))
UpDown1->Position = StrToFloat(Edit3->Text)*10;
calculate();
}
//--------------------------------------------------------------------------
-

void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
Edit1->Text = EL[ComboBox1->ItemIndex];
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if((Edit1->Text != "")&&(Edit1->Text != "-"))
if (ComboBox1->ItemIndex != -1)
EL[ComboBox1->ItemIndex] = StrToFloat(Edit1->Text);
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
if(ComboBox1->ItemIndex != -1)
Edit2->Text = ELBest[ComboBox2->ItemIndex];
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::ClearBest1Click(TObject *Sender)
{
for (int i = 0;i <= 30;i++)
ELBest[i] = 0;
EL[difmin]=100;
ELBest[difmin]=100;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::Savetobmp1Click(TObject *Sender)
{
SaveDialog1->Title = "Сохранить график 1 как";
if(SaveDialog1->Execute())
Chart1->SaveToBitmapFile(SaveDialog1->FileName);
SaveDialog1->Title = "Сохранить график 2 как";
if(SaveDialog1->Execute())
Chart2->SaveToBitmapFile(SaveDialog1->FileName);
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
Application->Terminate();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::About1Click(TObject *Sender)
{
AboutBox->Show();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::Showdatalist1Click(TObject *Sender)
{
Form2->Show();
Timer1->Enabled = true;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (!Form2->CheckBox1->Checked)
for (int i=0;i <=21;i++)
Form2->StringGrid1->Cells[1][i] = EL[i];
else
for (int i=0;i <=21;i++)
Form2->StringGrid1->Cells[1][i] = ELBest[i];
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=0;i<=21;i++)
{
if(i<=17)
ComboBox1->Items->Add(name[i]);
ComboBox2->Items->Add(name[i]);
}
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::lmax1Click(TObject *Sender, TUDBtnType Button)
{
if(lmax1->Position > Chart1->LeftAxis->Minimum)
Chart1->LeftAxis->Maximum = lmax1->Position;
else
lmax1->Position = Chart1->LeftAxis->Minimum;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::lmin1Click(TObject *Sender, TUDBtnType Button)
{
if(lmin1->Position < Chart1->LeftAxis->Maximum)
Chart1->LeftAxis->Minimum = lmin1->Position;
else
lmin1->Position = Chart1->LeftAxis->Maximum;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
{
Edit3->Text = UpDown1->Position * 0.1;
calculate();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N1Click(TObject *Sender)
{
help->Show();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
Form1->Edit4->Text="";
}
//--------------------------------------------------------------------------
-





























U2calc.cpp

//--------------------------------------------------------------------------
-
//панель со значениями переменных
#include
#pragma hdrstop

#include "U2calc.h"
#include "U1calc.h"
//--------------------------------------------------------------------------
-
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
AnsiString name2[30] = {"C1","C2","N1L","N1H","N2L","N2H","PTL","PTH",
"k12","k23L","k23H","S12","S23","t1","t2","t3","TUL","TUH",
"tmax","tmin","dif","difmin"};
AnsiString valhint[30] = {"C1 теплоёмкость диода","C2 теплоёмкость плиты",
"N1L мощность диода пер. L","N1H мощность диода пер. H",
"N2L мощность доп. нагревателя пер. L",
"N2H мощность доп. нагревателя пер. H","PTL длительность периода L",
"PTH длительность периода H","k12 коэффицент т.п. диод-плита",
"k23L коэффицент т.п. плита-окр.среда пер. L",
"k23H коэффицент т.п. плита-окр.среда пер. H","S12 площадь контакта диод-
плита",
"S23 площадь контакта плита-окр.среда","t1 температура диода",
"t2 температура плиты","t3температура окр.среды","TUL время упреждения пер.
L",
"TUH время упреждения пер. H","tmax температура диода макс.",
"tmin температура диода мин.","dif разность tmax и tmin"};
//--------------------------------------------------------------------------
-
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
-
void __fastcall TForm2::FormHide(TObject *Sender)
{
Form1->Timer1->Enabled = false;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm2::FormActivate(TObject *Sender)
{
for (int i=0;i <=20;i++)
StringGrid1->Cells[0][i] = name2[i];
}
//--------------------------------------------------------------------------
-







void __fastcall TForm2::StringGrid1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
Form1->Edit4->Text="";
Form1->Edit4->Text=valhint[(int)Y/21];
StringGrid1->Hint=valhint[(int)Y/21];
}
//--------------------------------------------------------------------------
-

void __fastcall TForm2::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
Form1->Edit4->Text="";
}
//--------------------------------------------------------------------------
-

Приложение 3.


Текст программы для управления температурными режимами.


UOut.cpp
//--------------------------------------------------------------------------
-
#include
#pragma hdrstop

#include "UOut.h"
//--------------------------------------------------------------------------
-
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
typedef void __declspec(dllimport) To(int,int);
To *outp;
typedef void __declspec(dllimport) Ti(int,int&);
Ti *inp;

HINSTANCE dll;
TOutside Outside;
TCalc Calc;
const int pb = 888;
//--------------------------------------------------------------------------
-
void TOutside::Refresh()
{
outp(pb,0);
outp((pb+2),0);
for (int i = 0;i <= 7;i++)
this->PortOut(pb,this->out[i],i);
for (int i = 0; i <= 7;i++)
this->PortIn(pb,this->in[i],i);
outp(pb,0);
outp((pb+2),0);
}
void TOutside::PortOut(int p,int d,int i)
{
outp(p,0);
outp((p+2),0);

outp(p,i);
outp((p+2),4);
outp(p,i);
outp((p+2),0);

outp(p,d);
outp((p+2),1);
outp(p,d);
outp((p+2),0);

outp(p,0);
outp((p+2),0);
}
void TOutside::PortIn(int p,int& d,int i)
{
outp(p,0);
outp((p+2),0);

outp(p,(i+8));
outp((p+2),4);
outp(p,(i+8));
outp((p+2),0);
outp((p+2),2);

bool res[8] ={0,0,0,0,0,0,0,0};
int r = 0;
int di = 0;
for (int i2 = 7;i2 >= 0;i2--)
{
res[i2] = 1;
r = res[0] + res[1]*2 + res[2]*4 + res[3]*8 +
res[4]*16 + res[5]*32 + res[6]*64 + res[7]*128;
outp(p,r);
outp(p,r);
inp((p+1),di);
di -= 7;
if (di)
res[i] = 0;
}
d = res[0] + res[1]*2 + res[2]*4 + res[3]*8 +
res[4]*16 + res[5]*32 + res[6]*64 + res[7]*128;
outp(p,0);
outp((p+2),0);
}
void TCalc::Prognose()
{
if(T-TL-TH > 0)
T = 0;
if(T-TL > 0)
if(T-TL-TprH > 0)
Outside.out[5] = dt;
else
if(T-TprL > 0)
Outside.out[5] = 0;
int tcp = Outside.in[0]+Outside.in[1]+Outside.in[2]+
Outside.in[3]+Outside.in[4];
for(int i=0;i<=4;i++)
if(Outside.in[i] - tcp > 0)
Outside.out[i] = Outside.in[i] - tcp;
}
//--------------------------------------------------------------------------
-
void TCalc::Correct()
{
TprL = StrToFloat(Form1->Edit1->Text);
TprH = StrToFloat(Form1->Edit2->Text);

if(last-(Outside.in[6]-Outside.in[6]) > 10)
{
TH = T - TL;
T = 0;
last=Outside.in[6]-Outside.in[6];
}
if((Outside.in[6]-Outside.in[6])-last > 10)
{
TL = T;
last=Outside.in[6]-Outside.in[6];
}
if(T > TL)
tglH = 0.95 * tglH + 0.05 * Outside.in[4];
else
tglL = 0.95 * tglL + 0.05 * Outside.in[4];

if(tglH - tglL > 5)
dt += 1;
if(tglH - tglL < -5)
dt -= 1;

Form1->Edit3->Text = tglH - tglL;
}
void TCalc::Init()
{
TprL = StrToFloat(Form1->Edit1->Text);
TprH = StrToFloat(Form1->Edit2->Text);
}
//--------------------------------------------------------------------------
-
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
dll = LoadLibrary("io.dll");
if (!dll)
{
ShowMessage(SysErrorMessage(GetLastError()));
ShowMessage("Unable to load the DLL");
}
outp = (To *)GetProcAddress(dll, "Out");
inp = (Ti *)GetProcAddress(dll, "In");
if (!inp)
ShowMessage(SysErrorMessage(GetLastError()));
if (!outp)
ShowMessage(SysErrorMessage(GetLastError()));

}
__fastcall TForm1::~TForm1()
{
FreeLibrary(dll);
}
//--------------------------------------------------------------------------
-

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Outside.Refresh();
Calc.T++;
Calc.Prognose();
Calc.Correct();
}
//--------------------------------------------------------------------------
-

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Calc.Init();
}
//--------------------------------------------------------------------------
-
UOut.h
//--------------------------------------------------------------------------
-

#ifndef UOutH
#define UOutH
//--------------------------------------------------------------------------
-
#include
#include
#include
#include
#include
//--------------------------------------------------------------------------
-
class TForm1 : public TForm
{
__published: // IDE-managed Components
TTimer *Timer1;
TEdit *Edit1;
TEdit *Edit2;
TLabel *Label1;
TLabel *Label2;
TEdit *Edit3;
TLabel *Label3;
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);

private: // User declarations

public: // User declarations
__fastcall TForm1(TComponent* Owner);
__fastcall TForm1::~TForm1();
};

class TOutside {
public:
int in[8];
int out[8];
void Refresh();
private:
void PortIn(int p,int& d,int i);
void PortOut(int p,int d,int i);
};
class TCalc {
public:
int mast[2000];
int TprL;
int TprH;
int dt;
int T;
int TL;
int TH;
int last;
double tglL;
double tglH;
void Prognose();
void Correct();
void Init();
};
//--------------------------------------------------------------------------
-
extern PACKAGE TForm1 *Form1;
//--------------------------------------------------------------------------
-
#endif




io.dll
// компилится в io.dll
// на Microsoft visual c++
#include
extern "C" void __declspec(dllexport) Out(int p,int d);
extern "C" void __declspec(dllexport) In(int p,int& d);
void Out(int p,int d)
{
_outp(p,d);
}
void In(int p,int& d)
{
d = _inp(p);
}
Приложение 4.
Аппаратная часть.
Рассматривать аппаратную часть подробно не имеет смысла, так как конкретная
схема сильно меняется, в зависимости от использованных компонентов. По
этому я привожу лишь краткую блок-схему.
[pic]
Список литературы.

1. Д. Холингвэрт, Д. Баттерфилд, и др. C++Builder: Руководство
разработчика. Вильямс. Москва 2001.
2. Д. Смит. Сопряжение компьютера с внешними устройствами.Мир. Москва 2000.
3. В. Л. Шило. Популярные цифровые микросхемы. Радио и связь. Москва 1987.
4. Майданик Ю.Ф., Ферштатер Ю.Г., Пастухов В.Г. Контурные тепловые трубы:
разработка, исследование, элементы инженерного расчета. Препринт.
Свердловск, УрО АН СССР. 1989
-----------------------
рис.5

линия задержки

датчик

синхронизация

контроль теплопроводности

генератор импульсов переменной скважности

тепловая труба

объект

R 1ом

к АЦП. 1

к АЦП. 2

объект

рис.6

событие TIMER

отслеживание перепада мощности

+

-

изменить tупр на ?t

выполнение (блок 1)
и запись температуры в mast

корректировка распределения тепла с помощью нагревателей

конец TIMER

обмен данными с аппаратной частью

событие FORM_ACTIVATE

выполнение (блок 1)
и измерение ?Tпр

конец
FORM_ACTIVATE

конденсатор

капиллярная структура

теплоноситель

компенсационный объём

пар теплоносителя

подвод тепла

испаритель

подвод тепла к компенсационному объёму (управление)

отвод тепла

рис.7

буфер байта управления

вход выбора

блок компараторов / усилителей

ЦАП / АЦП

к объекту

L
P
T

п
о
р
т

схема управления