|
|
  |
Как сделать вычисление значения температуры по градуировочной таблице термопары? |
|
|
|
Feb 27 2009, 19:21
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Tanya @ Feb 27 2009, 21:44)  Модель печки - много-много RC-цепочек. А если много-много - это бесконечность, то производная будет нулевая. И задержка тем больше, чем больше теплоёмкость и меньше теплопроводность. Конечно это не чистая задержка. Но можно всё это представить как чистую задержку + одну RC цепочку. И это будет гораздо лучше, чем одна (или в лучшем случае несколько) RC цепочка без задержки, как представляют печку сейчас. А насчёт того, что тепло распостраняется со скоростью звука я конечно согласен, но вот к практике это отношения не имеет. Вот запах - он тоже теоретически со скоростью звука движется. А на практике?
|
|
|
|
|
Feb 27 2009, 19:54
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(galjoen @ Feb 27 2009, 22:21)  А если много-много - это бесконечность, то производная будет нулевая. И задержка тем больше, чем больше теплоёмкость и меньше теплопроводность. Конечно это не чистая задержка. Но можно всё это представить как чистую задержку + одну RC цепочку. И это будет гораздо лучше, чем одна (или в лучшем случае несколько) RC цепочка без задержки, как представляют печку сейчас. А насчёт того, что тепло распостраняется со скоростью звука я конечно согласен, но вот к практике это отношения не имеет. Вот запах - он тоже теоретически со скоростью звука движется. А на практике? Учтите, что при дроблении цепочек нужно дробить и R и C. И производная не будет нулевая... в некотором смысле... А про тепло и запах - Вы абсолютно правы - уравнения диффузии и теплопроводности едины и неотличимы. Только запах, в принципе, несколько быстрее, кажется.
|
|
|
|
|
Feb 27 2009, 20:11
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Tanya @ Feb 27 2009, 22:54)  Учтите, что при дроблении цепочек нужно дробить и R и C. И производная не будет нулевая... в некотором смысле... Неопределённость типа бесконечность делить на бесконечность. Но если посчитать предел, то там вроде всётаки ноль получается. Хотя спорить не буду, т.к. очень хорошо забыл всё это и вспоминать желания нет. Тем более, что к практике это отношения не имеет.
|
|
|
|
|
Feb 28 2009, 12:41
|

Группа: Участник
Сообщений: 7
Регистрация: 8-11-08
Из: Киев
Пользователь №: 41 471

|
По поводу регуляторов (для информации): http://my.elvisti.com/shov/tune1.htmlА температуру из напряжения термопары я обычно по полиному считал. Мне кажется так проще. Главное ЭДС холодного спая не забывать прибавлять.
|
|
|
|
|
Feb 28 2009, 14:29
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Tanya @ Feb 28 2009, 16:32)  ... И создает иллюзии. ... +1 На мой взгляд это самое плохое в данном приложении ПИД регулятора. На самом-то деле для печки он плохо подходит. А его используют и ещё гордятся - у меня ПИД...
|
|
|
|
|
Mar 3 2009, 05:09
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Цитата(galjoen @ Feb 28 2009, 19:29)  +1 На мой взгляд это самое плохое в данном приложении ПИД регулятора. На самом-то деле для печки он плохо подходит. А его используют и ещё гордятся - у меня ПИД... а какой ПИД алгоритм тогда лучше использовать?
--------------------
Разработчик
|
|
|
|
|
Mar 3 2009, 10:21
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Цитата(Tanya @ Mar 3 2009, 15:01)  ПИД - не алгоритм, а закон управления. Может быть реализован аналоговым способом, а может жить в контроллере. А может и там, и там. ну если он живет в контроллере (а у меня так) то это уже алгоритм, привожу его ниже: Код float themp; //входная температура, регулируемый параметр, размерность - градусы long thempSet; //уставка температуры, размерность - градусы float errThemp[3]; //массив ошибок регулятора
#define zoneProp 1 //зона пропорциональности, размерность - градусы #define tauInt 4 //постоянная интегрирования, размерность - секунды #define tauDiff 1 //постоянная дифференцирования, размерность - секунды #define tauQuant 0.05 //период квантования (реальный!!! период запуска функции регулятора), размерность - секунды #define tauDiffFilter 5 //как бы кол-во усредняемых отсчётов Д-составляющей, //не стоит увлекаться и делать это число слишком большим. #define tauOutFilter 5 //как бы кол-во усредняемых отсчётов полного выходного сигнала, аналогично.
float OutPID; //выходное значение ПИД регулятора float KoeffNormOut; //нормализовочный коэффициент float Differential=0; float Integral; float tmpReal;
//******************************************************************************** *************** // ПИД алгоритм //******************************************************************************** *************** errThemp[2] = errThemp[1]; errThemp[1] = errThemp[0]; //******************************************************************* // Нормированная к отношению MaxOut/zoneProp ошибка регулирования для прямого регулятора. // т.е. увеличивается температура - увеличивается выходной сигнал. // режим - охлаждение нагревателя, обогрев. errThemp[0] = (themp - thempSet) * KoeffNormOut; // ошибка для обратного регулятора. // режим - нагрев охладителя, охлаждение. // errThemp[0] = (thempSet - themp) * KoeffNormOut; // вычисление и простейшая фильтрация Д-составляющей с предварительным усреднением по двум отсчётам Differential += (((errThemp[0] - errThemp[2]) * tauDiff * 0.5) - Differential) / tauDiffFilter;
// без предварительного усреднения // Differential += (((errThemp[0] - errThemp[1]) * tauDiff) - Differential) / tauDiffFilter; // вычисление И-составляющей методом трапеций с предварительным усреднением по двум отсчётам Integral += (((errThemp[0] + 2*errThemp[1] + errThemp[2]) * tauQuant * 0.25) / tauInt);
// без предварительного усреднения // Integral += (((errThemp[0] + errThemp[1]) * tauQuant * 0.5) / tauInt); // Ограничитель И-составляющей if(Integral > (float)MaxOut) Integral = (float)MaxOut; else if(Integral < (float)MinOut) Integral = (float)MinOut; // Полный сигнал tmpReal = errThemp[0] + Integral + Differential / tauQuant; // Ограничитель полного входного сигнала if(tmpReal > (float)MaxOut) tmpReal = (float)MaxOut; else if(tmpReal < (float)MinOut) tmpReal = (float)MinOut; OutPID += (tmpReal - OutPID) / tauOutFilter; // фильтрация полного выходного сигнала //******************************************************************************** *************** // Конец ПИД алгоритма //******************************************************************************** ***************
--------------------
Разработчик
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|