|
Как сделать вычисление значения температуры по градуировочной таблице термопары? |
|
|
|
 |
Ответов
|
Feb 26 2009, 11:07
|

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

|
хух! в общем все! получился ПИД регулятор - температуру теперь нормально кажет - с десятыми теперь хочу попробывать какой-нибудь алгоритм авто-настройки ПИД коэффициентов... может есть у кого, поделитесь пожалуйста? Вот схемка:
Сообщение отредактировал Ivan Kuznetzov - Feb 26 2009, 11:08
Эскизы прикрепленных изображений
--------------------
Разработчик
|
|
|
|
|
Feb 26 2009, 12:39
|

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

|
Цитата(Tanya @ Feb 26 2009, 16:45)  Десятые "кажет" - это кажимость. Надо увеличить разрядность вычислений и применить усреднение - будет во много раз лучше. Вы это очень зря поставили такой операционник. Его смещение нуля (2 мв) соответствует 50 градусам. Температурный дрейф не нормирован. Навевает. Схема, простите меня, не выдерживает никакой критики... Входы при нуле, выход... Нет слов. Нарисована, однако, отлично. Это тестовый операционник - в идеале поставлю какую-нибудь "инструменталку" может посоветуете что-нибудь? или схемку подкинете какую-нибудь? а вот насчет усреднения - это интересно! как это сделать?
--------------------
Разработчик
|
|
|
|
|
Feb 26 2009, 14:34
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(Ivan Kuznetzov @ Feb 26 2009, 15:39)  Это тестовый операционник - в идеале поставлю какую-нибудь "инструменталку" может посоветуете что-нибудь? или схемку подкинете какую-нибудь?
а вот насчет усреднения - это интересно! как это сделать? Усреднение - это известная мания программистов. Делается, естественно, программно. Очень интересное, полезное, увлекательное и плодотворное занятие для ума. Можно придумать бесконечное число способов усреднения, а потом бесконечно долго выбирать наилучший. Учтите - для такой сложной математики С слабоват. Только ассемблер. И для тестов не используйте этот Ваш операционник... Возьмите сдвоенный ОУ типа OP07 OP(A)X27 и типовую схему для термопар из даташита на OPA4277 op07 или еще откуда-нибудь. Сами не изобретайте велосипедов. Это только совет. Или аутозеро какое-нибудь. И не придумывайте автонастраивающийся ПИД. Уже придумано. И вредно. И Вам, и ни в чем не повинным пользователям такого продукта. Прикрутите три потенциометра к свободным входам АЦП - будете задавать коэффициенты. Это тоже только советы.
|
|
|
|
|
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; // фильтрация полного выходного сигнала //******************************************************************************** *************** // Конец ПИД алгоритма //******************************************************************************** ***************
--------------------
Разработчик
|
|
|
|
|
Mar 3 2009, 11:21
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Tanya @ Mar 3 2009, 13:39)  Я бы (почти) все в целых. Частоту выборки (вычислений) привязала бы к сетевой. Тогда сетевая наводка убирается - ослабляется. А константы надо подбирать экспериментально. Непонятно, что потом - как и чем управляет этот ПИД. Согласен, что лучше привязаться к сети, но можно хотя бы кратно 10 милисекундам выборку сделать. 2 Ivan Kuznetzov А вообще чтобы печкой эффективно управлять, по моему мнению, нужно скользящие средние считать на подводимую мощность и на температуру. Время, за которое эти скользящие средние считаются, примерно равно удвоенной задержке вносимой печкой д.б. Эту задержку определить можно как время через которое, после включения нагревателя на 100%, температура реально подниматься начнёт. Я в своё время т.о. решил задачу о том сколько тепла в объект уходило. Т.е. вычитал из всего тепла, тепло ушедшее на нагрев самого нагревателя и в окружающую среду. Даже более того, т.о. можно узнать кое-что о нагреваемом объекте. Его теплоёмкость и теплопроводность. Но это всё оффтоп. По теме. Регулировать то температуру по такой схеме значительно сложнее (программно), чем это делает стандартный ПИД. Хотя качество регулирования конечно лучше получается. А м.б. у вас интерес из-за усложнения уже пропал? Если нет - задавайте вопросы.
|
|
|
|
|
Mar 3 2009, 11:52
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Tanya @ Mar 3 2009, 14:35)  Сложнее... проще... Это относительно. Надо учитывать "мгновенную" электрическую мощность, подавая ее в контур обратной связи. Тогда управление становится "натуральным" - по мощности... или интегралу мощности - энергии. Точность, естественно, увеличивается. А если еще внешнюю температуру учитывать... Конечно "натуральное" управление лучше. Установившаяся температура превышает тем-ру окружающей среды пропорционально подведённой мощности. Только вот есть закавыка. Чтобы динамику сделать - приходится печку дифференциальными уравнениями описываить. И решать их в реалтайме. Вот об этом усложнении я говорил.
|
|
|
|
|
Mar 7 2009, 16:25
|

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

|
Цитата(Tanya @ Mar 3 2009, 17:06)  Ну... Вы усложняете. Пид работает (должен) только в стационарном или квазистационарном режиме (когда задатчик медленно меняется). Иначе - это управление "по модели", о чем Вы и пишите. А если дверцу открывать и содержимое менять... Так это другая задача. Можно еще несколько усложнить (но улучшить) - несколько датчиков - у нагревателя и в центре печи... Управление по "модели" я тоже хочу реализовать, а именно: регулятор будет иметь связь с кампой по USB, в кампе будет прога на ЛабВью в которой пользователь чертит график требуемой температуры (ну или набор значений SETPOINT) - а ПИД регулятор будет работать по этому графику... Цитата(Tanya @ Mar 3 2009, 15:39)  Я бы (почти) все в целых. Частоту выборки (вычислений) привязала бы к сетевой. Тогда сетевая наводка убирается - ослабляется. А константы надо подбирать экспериментально. Непонятно, что потом - как и чем управляет этот ПИД. Для настройки П И Д и других констант у меня предусмотрена отдельная менюшка, в которой каждый коэффициент в процессе работы можно натыкать кнопочками, а затем сохранить в EEPROM
--------------------
Разработчик
|
|
|
|
Сообщений в этой теме
Ivan Kuznetzov Как сделать вычисление значения температуры по градуировочной таблице термопары? Feb 25 2009, 10:37 Petka Цитата(Ivan Kuznetzov @ Feb 25 2009, 13:3... Feb 25 2009, 10:57 Tanya Цитата(Ivan Kuznetzov @ Feb 25 2009, 13:3... Feb 25 2009, 11:15 MrYuran Цитата(Tanya @ Feb 25 2009, 14:15) Только... Feb 25 2009, 11:18 _Pasha Цитата(Ivan Kuznetzov @ Feb 25 2009, 14:3... Feb 25 2009, 11:22 xemul Начните лучше с требуемых точностных характеристик... Feb 25 2009, 11:27 Goodefine Как вариант:
Задаем массив, разбив участки зависи... Feb 25 2009, 12:26 _Pasha Цитата(Goodefine @ Feb 25 2009, 16:26) Ра... Feb 25 2009, 12:30 Ivan Kuznetzov Цитата(Goodefine @ Feb 25 2009, 17:26) Ка... Feb 25 2009, 12:34 Goodefine ЦитатаКуда удобнее расстояние делать в 1 попугай А... Feb 25 2009, 12:35 Ivan Kuznetzov Цитата(Goodefine @ Feb 25 2009, 17:35) За... Feb 25 2009, 12:46  _Pasha Цитата(Ivan Kuznetzov @ Feb 25 2009, 16:4... Feb 25 2009, 12:53   Ivan Kuznetzov Цитата(_Pasha @ Feb 25 2009, 17:53) И зач... Feb 25 2009, 13:12    _Pasha Цитата(Ivan Kuznetzov @ Feb 25 2009, 17:1... Feb 25 2009, 13:30 Goodefine Зачем здесь флоат не понятно. Видно (из табл), что... Feb 25 2009, 13:06 Goodefine Если по Вашему (с флоат), то проще примерно так:
К... Feb 25 2009, 14:02 demiurg_spb Ну Вы маньяки. Нужна всего одна целочисленная табл... Feb 25 2009, 22:17  Ivan Kuznetzov Цитата(demiurg_spb @ Feb 26 2009, 03:17) ... Feb 26 2009, 04:59   demiurg_spb Цитата(Ivan Kuznetzov @ Feb 26 2009, 07:5... Feb 26 2009, 06:11 AlexU Цитата(Ivan Kuznetzov @ Feb 25 2009, 13:3... Feb 26 2009, 06:34 Сергей К По поводу компенсации: я вот думаю, можно ли сразу... Feb 26 2009, 06:37 Ivan Kuznetzov Goodefine
По Вашему примеру все работает хорошо -... Feb 26 2009, 06:44 Goodefine Цитата...но десятых долей нету почему-то...
Возмож... Feb 26 2009, 07:30 Ivan Kuznetzov Goodefine
Отлично все заработало! Спасибо... Feb 26 2009, 08:19  Tanya Цитата(Ivan Kuznetzov @ Feb 26 2009, 11:1... Feb 26 2009, 08:51   xemul Цитата(Tanya @ Feb 26 2009, 11:51) По Ваш... Feb 26 2009, 09:27    Ivan Kuznetzov Цитата(xemul @ Feb 26 2009, 14:27) Зачем ... Feb 26 2009, 09:33     xemul Цитата(Ivan Kuznetzov @ Feb 26 2009, 12:3... Feb 26 2009, 09:58 Goodefine Цитата...диапазон 1300 градусов...
...АЦП (градуир... Feb 26 2009, 10:56 xemul Цитата(Goodefine @ Feb 26 2009, 13:56) Сп... Feb 26 2009, 11:13    haker_fox Цитата(Tanya @ Feb 26 2009, 22:34) Прикру... Feb 26 2009, 15:26     Tanya Цитата(haker_fox @ Feb 26 2009, 18:26) Ой... Feb 26 2009, 19:18      Designer56 Цитата(Tanya @ Feb 27 2009, 00:18) И полу... Feb 26 2009, 19:25       Tanya Цитата(Designer56 @ Feb 26 2009, 22:25) О... Feb 26 2009, 19:40        galjoen Цитата(Tanya @ Feb 26 2009, 22:40) А для ... Feb 27 2009, 18:14         Tanya Цитата(galjoen @ Feb 27 2009, 21:14) Печк... Feb 27 2009, 18:44          galjoen Цитата(Tanya @ Feb 27 2009, 21:44) Модель... Feb 27 2009, 19:21           Tanya Цитата(galjoen @ Feb 27 2009, 22:21) А ес... Feb 27 2009, 19:54            galjoen Цитата(Tanya @ Feb 27 2009, 22:54) Учтите... Feb 27 2009, 20:11             Tanya Цитата(galjoen @ Feb 27 2009, 23:11) Тем ... Feb 27 2009, 20:14          Oldring Цитата(Tanya @ Feb 27 2009, 22:44) Нет у ... Apr 21 2009, 10:01                 galjoen Цитата(Tanya @ Mar 3 2009, 15:06) Ну... В... Mar 3 2009, 12:22                  Tanya Цитата(Ivan Kuznetzov @ Mar 7 2009, 19:25... Mar 7 2009, 16:42                  galjoen Цитата(Ivan Kuznetzov @ Mar 7 2009, 19:25... Mar 7 2009, 16:44                akken Цитата(galjoen @ Mar 3 2009, 14:52) Конеч... Apr 17 2009, 18:25                 galjoen Цитата(akken @ Apr 17 2009, 22:25) Читал,... Apr 21 2009, 16:32                  Oldring Цитата(galjoen @ Apr 21 2009, 20:32) Т.к.... Apr 21 2009, 16:38                   galjoen Цитата(Oldring @ Apr 21 2009, 20:38) Може... Apr 21 2009, 21:10                    Oldring Цитата(galjoen @ Apr 22 2009, 01:10) Как ... Apr 21 2009, 21:25                    akken Цитата(galjoen @ Apr 22 2009, 00:10) Как ... Apr 22 2009, 08:50                     Oldring Цитата(akken @ Apr 22 2009, 12:50) При за... Apr 22 2009, 09:40                      akken Цитата(Oldring @ Apr 22 2009, 12:40) Про ... Apr 22 2009, 10:44                       Oldring Цитата(akken @ Apr 22 2009, 14:39) Вот эт... Apr 22 2009, 10:51                        akken Цитата(Oldring @ Apr 22 2009, 13:51) Удив... Apr 22 2009, 11:46                         Oldring Цитата(akken @ Apr 22 2009, 15:46) Нельзя... Apr 22 2009, 11:56                          akken [quote name='Oldring' date='Apr 22 200... Apr 22 2009, 12:12                           Oldring Цитата(akken @ Apr 22 2009, 16:12) Через ... Apr 22 2009, 12:18                            akken Цитата(Oldring @ Apr 22 2009, 15:18) Два ... Apr 22 2009, 13:06                           galjoen Цитата(akken @ Apr 22 2009, 16:12) Началь... Apr 22 2009, 13:22                          Tanya Цитата(Oldring @ Apr 22 2009, 15:56) Не д... Apr 22 2009, 12:39                           Oldring Цитата(Tanya @ Apr 22 2009, 16:39) Какой ... Apr 22 2009, 12:44                            Tanya Цитата(Oldring @ Apr 22 2009, 16:44) Три ... Apr 22 2009, 12:56                             Oldring Цитата(Tanya @ Apr 22 2009, 16:56) Стенок... Apr 22 2009, 13:12                       Tanya Цитата(akken @ Apr 22 2009, 14:44) регуля... Apr 22 2009, 10:53                        Oldring Цитата(Tanya @ Apr 22 2009, 14:53) до мик... Apr 22 2009, 10:57                         Tanya Цитата(Oldring @ Apr 22 2009, 14:57) Вот ... Apr 22 2009, 12:34                          Oldring Цитата(Tanya @ Apr 22 2009, 16:34) Темпер... Apr 22 2009, 12:37                     Tanya Цитата(akken @ Apr 22 2009, 12:50) Особен... Apr 22 2009, 09:43                      Oldring Цитата(Tanya @ Apr 22 2009, 13:43) А печк... Apr 22 2009, 09:45 xemul "Они не ведают, что творят."
На всякий с... Feb 26 2009, 12:07 rx3apf Цитата(xemul @ Feb 26 2009, 15:07) ... Feb 26 2009, 15:04 Designer56 Для быстрых можно проинтегрировать, при нужде...По... Feb 26 2009, 19:48 Ivan Kuznetzov с конденсатором С2 на схеме ошибка- в реали стоит ... Feb 27 2009, 12:47 Tanya Цитата(Ivan Kuznetzov @ Feb 27 2009, 15:4... Feb 27 2009, 16:52 Designer56 Кроме того, датчик температуры в печке (очень зави... Feb 27 2009, 18:58 an_ga По поводу регуляторов (для информации): http://my.... Feb 28 2009, 12:41 ведущий_специалист а как насчет такой микросхемы как DS75? В связке с... Mar 7 2009, 17:28 Ivan Kuznetzov Цитата(ведущий_специалист @ Mar 7 2009, 22... Mar 8 2009, 18:11 ведущий_специалист ds75 нужна для компенсации по температуре в месте ... Mar 9 2009, 08:23 noise2009 А нет ли исходников на ассемблере с градуровочными... Apr 15 2009, 12:30 Ivan Kuznetzov ну вот и все - проект почти закончил, состыковал с... Apr 21 2009, 09:18 Tanya Цитата(Ivan Kuznetzov @ Apr 21 2009, 13:1... Apr 21 2009, 09:36
2 страниц
1 2 >
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|