|
|
  |
Измерение температуры с помощью термопары |
|
|
|
Feb 17 2016, 04:06
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Я вот чего никак понять не могу: как калибровать схему с датчиком холодного спая такой точности? Вот у меня прибор, наружу которого выходят только две клеммы для подключения термопары и один последовательный интерфейс для связи. Где то внутри прибора, рядом к клеммой расположен датчик холодного спая. Если делать, как говорит Tanya, то последовательность действий при измерении следующая: 1) Измеряю температуру холодного спая 2) По характеристике из ГОСТа вычисляю ЭДС, которая соответствует этой температуре 3) Измеряю ЭДС на термопаре 4) Вычитаю из ЭДС термопары ЭДС вычисленной в пункте 2 5) Вычисляю из полученной разницы температуру термопары.
Если погрешность датчика температуры холодного спая плюс минус 2 градуса, то обнаруживается занятная ситуация: - Пусть, например, температура на термопаре 100 градусов цельсия, термоэдс по градуировочной таблице для этой температуре 0,647 мВ; - Температура ХС 10 градусов, что по градуировочной таблице соотвествует 0,054 мB, а значит суммарное ЭДС будет равно 0,701 мВ; - Если у датчика ХС погрешность 2 градуса, то он может показать температуру, например, 12 градусов, что соотвествует 0,065 мВ; - Если я буду производить вычисления опираясь на показания 12 градусов ХС, то ЭДС термопары у меня получится 0,701 мВ - 0,065 мВ = 0,636 мВ, что соответствует температуре 98,4 градуса вместо реальных 100 градусов.
Как же калибровать такой прибор, если датчик холодного спая у него внутри, а я могу только на вход измерения ЭДС подключать эталоны??? Практически везде пишут, что для измерения температуры ХС не нужен датчик большой точности, мол его погрешность не вносит существенных искажений. Я не понимаю, как так?
|
|
|
|
|
Feb 17 2016, 04:59
|
self made
   
Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795

|
Цитата(yanvasiij @ Feb 16 2016, 23:06)  - Пусть, например, температура на термопаре 100 градусов цельсия, термоэдс по градуировочной таблице для этой температуре 0,647 мВ; - Температура ХС 10 градусов, что по градуировочной таблице соотвествует 0,054 мB, а значит суммарное ЭДС будет равно 0,701 Вроде они вычитаться должны. В чем проблема-то? Подключаете ваши эталоны, и программа запоминает напряжение и температуру эталона при двух или более температурах. Дальше строите кривую или прямую по ним.
|
|
|
|
|
Feb 17 2016, 05:02
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Цитата(ar__systems @ Feb 17 2016, 09:59)  Вроде они вычитаться должны. В чем проблема-то? Подключаете ваши эталоны, и программа запоминает напряжение и температуру эталона при или более температурах. Дальше строите кривую или прямую по ним. Да, виноват, нужно вычитать. Проблема в том, что получается мне нужно подключать эталон при разных температурах холодного спая, так что ли?
|
|
|
|
|
Feb 17 2016, 05:15
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Цитата(ar__systems @ Feb 17 2016, 10:09)  Ну можно и при одной. Тогда только корректируется постоянная погрешность (offset) а span принимаете расчетный. А, если датчик температуры ХС нелинейный?
|
|
|
|
|
Feb 17 2016, 07:00
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Цитата(Tanya @ Feb 17 2016, 11:19)  Не путайте себя и нас. Что из чего нужно вычитать? Еще раз по алгоритму: 1) Измеряю температуру холодного спая 2) По характеристике из ГОСТа вычисляю ЭДС, которая соответствует этой температуре 3) Измеряю ЭДС на термопаре 4) Прибавляю к ЭДС термопары ЭДС вычисленной в пункте 2 <<<<<<<<<<<<<< Вот тут была ошибка 5) Вычисляю из полученной разницы температуру термопары. И как следствие в рассужедениях: Была так: Цитата - Пусть, например, температура на термопаре 100 градусов цельсия, термоэдс по градуировочной таблице для этой температуре 0,647 мВ; - Температура ХС 10 градусов, что по градуировочной таблице соотвествует 0,054 мB, а значит суммарное ЭДС будет равно 0,701 мВ; - Если у датчика ХС погрешность 2 градуса, то он может показать температуру, например, 12 градусов, что соотвествует 0,065 мВ; - Если я буду производить вычисления опираясь на показания 12 градусов ХС, то ЭДС термопары у меня получится 0,701 мВ - 0,065 мВ = 0,636 мВ, что соответствует температуре 98,4 градуса вместо реальных 100 градусов. А верно: Если погрешность датчика температуры холодного спая плюс минус 2 градуса, то обнаруживается занятная ситуация: - Пусть, например, температура на термопаре 100 градусов цельсия, термоэдс по градуировочной таблице для этой температуре 0,647 мВ; - Температура ХС 10 градусов, что по градуировочной таблице соотвествует 0,054 мB, а значит суммарное ЭДС будет равно 0,593 мВ; <<<<<<< Ошибка была тут, я прибавил, а нужно было вычесть - Если у датчика ХС погрешность 2 градуса, то он может показать температуру, например, 12 градусов, что соотвествует 0,065 мВ; - Если я буду производить вычисления опираясь на показания 12 градусов ХС, то ЭДС термопары у меня получится 0,593 мВ + 0,065 мВ = 0,658 мВ, что соответствует температуре 111,8 градуса вместо реальных 100 градусов. <<<<< Ошибка была здесь нужно было прибавить а вычел
|
|
|
|
|
Feb 17 2016, 07:43
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
вставлю 5 копеек, как делаем в системах с сотнями термопар: 1. От термопары измеряется напряжение. Да, схема похожая. 2. Терморезисторы измеряются отдельными АЦП, измеряется сопротивление. Количество каналов измерения сильно ниже чем количество термопар (например, 16 RTD + 48 TC). В последних версиях вообще попросили сделать отдельные групповые платы для измерения милливольтов(например, термопары) и для измерения сопротивления (например, термосопротивления). 3. все это обрабатывается и контролируется в центре. Плата сбора- это просто сбор первичных данных, собственного мнения не имеет. 4. Калибровка термопарных контроллеров - нет, только проверка по двум точкам при производстве. 5. Калибровка RTD- да, есть, на производстве по двум точкам.
Такая система сложилась исторически, под нее есть и персонал и регламент и службы соответствующие. Если строится все с нуля- то можно наверное и контроллеру отдать функцию перевода в температуру, но подумайте и про эксплуатацию- там должны быть готовы к такому распределению функций между участниками процесса.
|
|
|
|
|
Feb 17 2016, 08:26
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Цитата(Tanya @ Feb 17 2016, 12:29)  Опять Вы путаете. Попробуйте без чисел... Используйте алгебру вместо арифметики. Я вот безо всяких вычислений скажу, что температурная ошибка будет равна ошибке в температуре холодного спая, умноженной на отношение производных ЭДС по температуре при комнатной и измеряемой температурах. При малых ошибках, естественно. Для линейной зависимости ЭДС от температуры ошибка будет равна ошибке определения температуры холодного спая. Что-то я не пойму где ошибка то?
|
|
|
|
|
Feb 17 2016, 08:28
|

Практикующий маг
     
Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576

|
Цитата(yanvasiij @ Feb 17 2016, 11:00)  ... то ЭДС термопары у меня получится 0,593 мВ + 0,065 мВ = 0,658 мВ, что соответствует температуре 111,8 градуса вместо реальных 100 градусов. 0,658 мВ соответствует 101,5. Примерно. А не 111.
|
|
|
|
|
Mar 10 2016, 13:34
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Спрошу в продолжении темы. Вообщем реализовал я вышеописанный алгоритм измерения. Вот только недавно у меня в руках оказалась реальная термопара и вот я пытаюсь добиться адекватных показаний от нее. Пока ничего толкового не выходит. Наблюдения следующие: - Термоэдс измеряется точно, я подавал эталонное напряжение и оно совпадало с тем, что выдавал мой микроконтроллер (проверил несколькими приборами) - Температура холодного спая тоже определяется точно (проверял датчиком PT100) - Термопара тип K куплена вот тут - Сама термопара и плата находятся в одном помещении при одной и той же температуре, но показания получаются следующие: ---- Температура в помещении и соотвественно холодного спая 28.5 С ---- Измеренное термоэдс -0.182997 мВ ---- Вычисленное значение температуры термопары 23.89Код вычисления температуры и термоэдс ( ВОТ ТУТ С ПОДСВЕТКОЙ СИНТАКСИСА): CODE /** * @brief Градуировочные значения для термопары типа K от -270 до 1370 с шагом 10. * Всего 153 точки */ static const float calibrationTable[] = { -6.458, -6.441, -6.404, -6.344, -6.262, -6.158, -6.035, -5.891, -5.73, -5.55, -5.354, -5.141, -4.913, -4.669, -4.411, -4.138, -3.852, -3.554, -3.243, -2.92, -2.587, -2.243, -1.889, -1.527, -1.156, -0.778, -0.392, 0.0, 0.397, 0.798, 1.203, 1.612, 2.023, 2.436, 2.851, 3.267, 3.682, 4.096, 4.509, 4.92, 5.328, 5.735, 6.138, 6.54, 6.941, 7.34, 7.739, 8.138, 8.539, 8.94, 9.343, 9.747, 10.153, 10.561, 10.971, 11.382, 11.795, 12.209, 12.624, 13.04, 13.457, 13.874, 14.293, 14.713, 15.133, 15.554, 15.975, 16.397, 16.82, 17.243, 17.667, 18.091, 18.516, 18.941, 19.366, 19.792, 20.218, 20.644, 21.071, 21.497, 21.924, 22.35, 22.776, 23.203, 23.629, 24.055, 24.48, 24.905, 25.33, 25.755, 26.179, 26.602, 27.025, 27.447, 27.869, 28.289, 28.71, 29.129, 29.548, 29.965, 30.382, 30.798, 31.213, 31.628, 32.041, 32.453, 32.865, 33.275, 33.685, 34.093, 34.501, 34.908, 35.313, 35.718, 36.121, 36.524, 36.925, 37.326, 37.725, 38.124, 38.522, 38.918, 39.314, 39.708, 40.101, 40.494, 40.885, 41.276, 41.665, 42.053, 42.44, 42.826, 43.211, 43.595, 43.978, 44.359, 44.74, 45.119, 45.497, 45.873, 46.249, 46.623, 46.995, 47.367, 47.737, 48.105, 48.473, 48.838, 49.202, 49.565, 49.926, 50.286, 50.644, 51.0, 51.355, 51.708, 52.06, 52.41, 52.759, 53.106, 53.451, 53.795, 54.138, 54.479, 54.819 };
float TermocoupleKProcessor::calcTemperature (float eds) { int t = MIN_T, i, dt = DT; if (eds > calibrationTable[i = 0]) while (MAX_T >= t) { if (eds < calibrationTable[++i]) return t + (eds - calibrationTable[i-1]) * dt / (calibrationTable[i] - calibrationTable[i-1]); t += dt; }; return t; }
float TermocoupleKProcessor::calcEds (float t) { float eds = calibrationTable[CALIBRATION_TABLE_LEN - 1]; float dEds, t0 = MIN_T; int i = 0;
if ( t > t0 ) { while ( calibrationTable[CALIBRATION_TABLE_LEN-1] >= eds ) { i++; if ( t < (t0 + DT) ) { dEds = calibrationTable[i] - calibrationTable[i-1]; eds = calibrationTable[i-1] + ((t - t0) * dEds / DT); return eds; } t0 += DT; } eds = calibrationTable[CALIBRATION_TABLE_LEN-1]; } return eds; }
Место, где это используется ( C подсветкой синтаксиса): CODE /* Измеряю температуру холодного спая */ ... //Измерения температуры холодного спая обычным термодатчиком опускаю ... data->coldJuncT = calcColdJuncTemperature(rtd); /* Вычисляю ЭДС холодного спая в МИЛЛИВОЛЬТАХ! */ data->cjEds = calcEds (data->coldJuncT);
/* Измеряю ЭДС термопары */ ... //Опускаю измерения термоэдс ... data->tEds = data->tEds * 1000; //перевожу в милливольты! /* Вычисляю значение температры */ data->temperature = calcTemperature(data->tEds + data->cjEds); conversationIsReady = 1; /**< @brief Считывание завершено */
Почему может быть такая большая погрешность? Что я упустил, подскажите пожалуйста?
|
|
|
|
|
Mar 12 2016, 11:49
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Цитата(Lagman @ Mar 11 2016, 16:32)  Если нет разности температуры между Г.С. и Х.С. то ТЭДС должна быть равна 0 (по вашим измерениям -0.182997 мВ) Чтобы получить истинную температуру надо просто прибавить(вычесть) температуру холодного спая. (тут вроде все правильно) Похоже ошибка в схемотехнике, не точно измеряется ТЭДС термопары. (т.к. 28,5 - 23,89 = 4,61 это примерно и есть те самые пересчетные в мВ -0.182997 мВ т.е. программа отрабатывает правильно) Спасибо за подсказку! Действительно я совсем об это не подумал. Начал проверять и выяснил, что напряжение появлялось, как оказалось, из-за того, что сама плата слегка греется, нагревая тем самым Х.С., создавая разницу между Г.С. и Х.С. А когда я калибровал датчик холодного спая, то не поднес эталонный датчик вплотную к разъему. В результате датчик температуры ХС врал на 4-5 градусов. Это точно вносило погрешность в измерения. Но вот беда: все равно результаты идут неверные. При комнаной температуре показания казались корректными (совпадали с эталоном). Но стоило мне бросить термопару в стакан с кипятком, как стало ясно что показания неверные - 130 градусов на кипящей воде. Чем выше температура тем больше разница между эталоном и моими измерения с термопарой. Например: - Показания эталонного прибора - 35 C - Моя программа показала 41,72 - Термоэдс при этом была 0.481197 мВ - Температура холодного спая 30.04 Проверил градуировочную характеристку, зашитую в контроллер, - точно совпадает с ГОСТом. Что это может быть?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|