8-канальный термометр/СОМ-логгер k-термопар на STM32F050F4

Очередная поделка на 20-ногом таракане.

Усилители термопар (ОУ MCP607):


Ky=101, при питании 3.3В можно измерить примерно до 750℃. Если нужно больше — можно запитать ОУ от 5В и добавить на выход делители 1:2, в софте — скорректировать множитель. Коррекция хол.спая — по внутреннему термодатчику.

Распределение входов контроллера:
  • PA0-7 — входы усилителей;
  • PB1 — опциональный вход внешней опоры 2.5В для повышения точности.

Тактирование — кварц 16М.
Температуры передаются по RS232 в формате CSV, с частотой 2Гц.
Параметры связи: 38400, 8N1.

Софт для снятия лога/построения графика:
Piccy.info - Free Image Hosting

Можно задать как часто писать (chart/log every 1 line), для каждого датчика — сдвиг (Δ,℃) и множитель (×,%), и экспортировать лог в CSV файл (export).

Для пуска софта нужна Java 7.

Благодаря серверной архитектуре для изменений не нужна перекомпиляция, достаточно отредактировать файл static/32f0thermo.html и перезагрузить страницу. Весь GUI и логика — всего 300 строк HTML/JS.

В аттаче — прошивка с исходниками (avr-gcc + Eclipse) и софт.
  • +4
  • 10 ноября 2013, 03:01
  • reptile
  • 2

Комментарии (35)

RSS свернуть / развернуть
Усилители термопар (ОУ MCP607)
Почему именно он?
PB1 — опциональный вход внешней опоры 2.5В для повышения точности.
TL431?

P.S. Перекинь в личный блог, Ди не одобряет просто поделки на некотормо МК в коллективных блогах этого МК. Только статьи, где есть какая-то обучающая ценность.
0
  • avatar
  • Vga
  • 10 ноября 2013, 13:50
Почему именно он?
недорогой, сдвиг в пределах 5℃
TL431?
пойдет. но особого выигрыша по ср.с внутр.опорой не даст
0
недорогой, сдвиг в пределах 5℃
А какие у него есть альтернативы из дешевых и распространенных? И как в этом плане, скажем, MCP6002?
0
у MCP6002 сдвиг до 4.5мВ. В пересчете на термопару это 4.5мВ/42мкВ > 100град.
Без отр.смещения ниже 100 град не измерите.
Вариантов ОУ сотни, главный параметр — минимальный сдвиг и его дрейф.
0
сдвиг в пределах 5℃
Только это не совсем так.
Бюджет погрешностей нарисованной аналоговой части выглядит примерно так:
1. Low Input Offset Voltage: ±150 μV (max.) В пересчете на термоэдс К типа получается +-3,6 градусов.
2. Это смещение забыл умножить на коэффициент усиления.
3. Забыл упомянуть про погрешности R5/R8 и R2/R4.
4. Все это умножить на 2 (поскольку каналов два независимых)

PS. Обычно входы растягивают между питанием и землей чтобы убить двух зайцев сразу.
Первый — вывести рабочую точку ОУ, при висящей термопаре, в серединку.
Второй — четко отсекать момент обрыва/неподключенной термопары.
0
1. у MCP607 до 250uV
2. 250/41.6 ~= 6град. Еще добавляется сдвиг внутр.термодатчика и неточность опоры (если ее нет, используется внутренняя, у которой точность 1..2%). Замерил в кипятке — получилось от 104 до 110град на разных ОУ, то есть укладывается в погрешность.
3. 1%. В принципе для термопар с их точностью достаточно.
4. а это еще зачем?
5. минусовые температуры не нужны.
6. обрыв отсекается пулл-апом на входе ОУ и контроллера.
0
2. Это смещение забыл умножить на коэффициент усиления
Здесь был неправ, поскольку в программе производится обратное преобразование (масштабирование).
0
Весь GUI и логика — всего 300 строк HTML/JS.
и еще 15 мегабайт ява гавна, чтобы эти 300 строк заработали
особенно доставили размеры яваскриптов и цсс
0
может пора винт обновить если не хватает 10Мб?
0
никакого винта не хватит, если учиться по комиксам и видушкам. xD
+1
факт. Если выкинуть лишнее — места будет дофига.
20Г винта хватает.
0
Qt,Wx,GTK тоже тянут по 20..30М библиотек.
0
Так можно юзать нативное апи, тогда и будет повод хвалиться «всего трехстами строками». А так ваше заявление в традициях маркетастов: распиаримся на том, что может, а про остальное умолчим.
+1
«нативное» — это какое? WinAPI?
Я использую Linux.
0
Доценко А.В., Исаков А.Б., Рябов А.Ю. «UNIX X Window Motif основы программирования часть 1». АО «Аналитик». Москва 1995.

Или по вашему Qt, Wx, Gtk вшиты в ось на уровне команд процессора и работать с графикой можно только через них?
0
1.тут структура другая — возможен доступ по сети с другого ПК.
2.непонятно при чем тут Motif, который давно мертв и нигде не используется.
3.непонятно в чем преимущество «нативного» доступа.
0
FLTK, IUP
0
и? что это даст? поможет решить задачу?
0
это все полумертвые проекты.
и еще — попробуйте собрать проект на них под все варианты платформ, под 32 и 64 бита.
0
и еще 15 мегабайт ява гавна, чтобы эти 300 строк заработали
Ну и что?
0
А можно поподробнее, как именно происходит измерение? Ну например зависимость термо-ЭДС от температуры нелинейна, этот факт как то учитывается?
0
нет, пока не вижу смысла. Обычно используется небольшой участок характеристики, на котором линейность достаточная. Основной перегиб — ниже 0.
хотя если нужно, линеаризацию несложно добавить.
0
Ок
0
ЭДС термопары 41.6мкВ/град, усиление Ку=101.
На выходе ОУ 41.6 * 101 = 4.2мВ/град.
t = Uацп / 4.2.
Для компенсации хол.спая прибавляется температура контроллера.
0
зависимость термо-ЭДС от температуры нелинейна, этот факт как то учитывается?
Это о чем вообще? В схеме, приведенной ТС, нелинейности никто и никогда не заметит. :)
Про погрешности аналоговой части см. выше. Добавлю только что, скорее всего, добавится ошибка от синфазной помехи по входу.
А в цифровой части тоже проблем хватает.
1. Из встроенного датчика температуры измеритель, как из г@вна пуля (достаточно прочитать DS).
2. Дополнительно к п.1 непрерывно работающий процик будет саморазогреваться, и весьма нехило.
3. Погрешности внутренней опоры тоже не добавляют точности. Здесь ТС написал, что можно применить внешнее опорное, но на фоне всего остального — мертвому припарки.

По поводу способов компенсации нелинейности можно посмотреть здесь. Таблица взята, по видимому, из ГОСТ Р 8.585—2001.

reptile точность не нужна никакая —
Замерил в кипятке — получилось от 104 до 110град
:)
0
Да, код по ссылке у меня сохранен уже довольно давно, автор этого кода у нас на форуме бывает.
0
точность не нужна никакая
это сдвиг ОУ и внутр.датчика, которые легко устраняются. Главное — точность наклона, которая зависит от соотношения делителя обр.связи — там 1%, вполне достаточно.

на счет нелинейности — скажите как меряют мультиметры без всяких компенсаций.
0
наверно проще корректировать через разницу между измеренной и табличной температурой.
вот массив дельт от 0 до 1000 с шагом 25 (из этого документа):
const s16 tc_corr[] = {0,5,7,5,0,0,3,8,18,20,25,25,20,18,15,5,2,-10,-15,-25,-32,-35,-55,-62,-70,-80,-88,-95,-100,-107,-110,-115,-115,-115,-115,-111,-105,-100,-91,-82,-70};
0
проверить можно тут: jsfiddle.net/fG4Cc/2/
0
непрерывно работающий процик будет саморазогреваться, и весьма нехило
от 5мА? ну-ну…
0
Ну, в SHT21 встроена грелка, емнип, на 0.5мВт — и она заметно влияет на показания датчика. Плюс датчики вроде DS18B20 жрут менее 5мА, и у них тоже есть предупреждение в даташите — при слишком частых преобразованиях (D>10%) датчик саморазогревается.
0
Это же считается легко.
Пусть ток потребления 5 мА, питание 3,3В. В DS находим Thermal resistance junction-ambient (LQFP48 — 7 × 7 mm) 55 °C/W
Перегрев PD max x ΘJA = 5*10-3 * 3,3 * 55 = 0,9075 градусов

Но в конкретной
Очередной поделке на 20-ногом таракане
точность измерения температуры никому неинтересна. :( У ТС кипяток 110 градусов — нормальное значение.
Поэтому, и на этот источник ошибок — забиваем, как и на все остальные. :)
0
У ТС кипяток 110 градусов — нормальное значение
никто не мешает взять zero-drift ОУ и внешний датчик.
0
Давайте сравнивать сравнимое.
3..4$ за этот измеритель и 50..200$ за термопарный термометр — разница огромная, пром.логгеры могут стоить сотни $. В мультиметрах с термопарами нет никакой линеаризации и компенсации по температуре — и как-то меряют. Понятно, можно добавить прецизионный ОУ и внешний датчик — но и цена будет соответствующей.
По сравнительному графику видно перегиб ниже 0 и выше 500: goo.gl/DWrQ3u, в диапазоне 0..250 достаточно аддитивной коррекции.
Перегрев корпуса — тоже аддитивная ошибка, т.к. потребление — величина постоянная.
0
если принять эдс 40.75мкв/К, то в диапазоне 0..350град ошибка меньше 1град
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.