Немного предыстории. Датчик температуры воздуха, подключенный к моему (самодельному) дождемеру, начал барахлить. Краткосрочное решение: починить его (сделано). Долгосрочная цель: улучшить (читайте дальше).
Этот датчик представляет собой стандартный NTC (с отрицательным температурным коэффициентом) термистор компании Vishay: сопротивление 10 кОм при 25 °C и коэффициент β, равный 3977. В сочетании с нагрузочным резистором он формирует входной сигнал микроконтроллера PIC (МК), который считывает результирующее напряжение (8 бит) для передачи по радиоканалу на базу для обработки и отображения. На Рисунке 1 показана совершенно обычная схема, а также ее реакция на температуру.
![]() |
|
Рисунок 1. | Базовая схема на основе термистора и ее расчетная характеристика. |
Значение сопротивления нагрузки 15699 Ом может показаться странным, но это сопротивление термистора при температуре 15 °C – средней точке требуемого диапазона измерений от –9 до +40 °C. Примерно каждые 30 секунд PIC возбуждает его на время, достаточное для стабилизации показаний.
На графике показан расчетный отклик вместе с прямой линией, проходящей через две фактические точки калибровки:0 °C (таяние колотого льда) и 30 °C (сравнение с заведомо правильным термометром). Этот отклик был рассчитан с использованием расширенных уравнений Стейнхарта-Харта, а не экспоненциальной аппроксимации, которая менее точна. Уравнение Стейнхарта и Харта модифицирует экспоненциальную кривую для NTC-термисторов точно так же, как уравнение Каллендера-Ван Дузена (Callender-Van Dusen, CVD) корректирует прямую линию для платиновых резистивных датчиков температуры (PRTD),
Соответствующая статья в Википедии [1], конечно, информативна. Тем не менее, краткое и полезное руководство по уравнениям Стейнхарта-Харта со всеми необходимыми константами можно найти на странице 4 соответствующего технического описания термистора Vishay. Любопытно, что в их таблицах зависимости сопротивления от температуры указаны усеченные, а не округленные значения, поэтому, согласно этим таблицам, сопротивление R6 нашего устройства должно составлять 15698 Ом, а не 15699.Значение, рассчитанное по уравнению Стейнхарта-Харта, дает 15698.76639545805…, плюс-минус несколько пикоом.
Обратите внимание, что график на Рисунке 1 перевернут! Это сделано намеренно, чтобы с ростом температуры кривая поднималась выше, хотя на самом деле напряжение падает. Думаю, так более интуитивно понятно; вы можете с этим не согласиться.
Подгонка PRTD под NTC-термистор
Прямая линия, полученная из уравнения Стейнхарта-Харта для 0 и 30 °C, является ключом к этой идее. Заставив PRTD формировать сигнал соответствующий этой линии, мы избежим каких-либо существенных изменений в программе обработки, особенно в точках калибровки, а также получим гораздо более широкий диапазон с большей точностью, чем позволяет NTC-термистор. Поскольку напряжение, вырабатываемое терморезистором, является логометрическим, PRTD должен выдавать уровень, пропорциональный напряжению питания.
Для этого мы усиливаем напряжение, вырабатываемое PRTD, компенсируем отклонение CVD от линейности и добавляем смещение. Простейшая схема, которая может все это сделать, показана на Рисунке 2а.
Такая простота приводит к сложностям, поскольку практически каждый компонент на Рисунке 2a взаимодействует со всеми остальными. Это достаточно сложно для проектирования даже с идеальными (моделируемыми) компонентами, а окончательная калибровка может потребовать многочасового итерационного процесса. Буферизация напряжения смещения, показанная на Рисунке 2б, помогает, но этот дополнительный операционный усилитель можно использовать с большей пользой.
Практическая схема
Если мы разделим схему на две части, жизнь станет проще. На Рисунке 3 показано, как это сделать.
![]() |
|
Рисунок 3. | Окончательная рабочая схема. Усиление и смещение теперь разделены, что значительно упрощает калибровку. |
Процессор включает транзистор Q1 для подачи питания. (Вывод GPIO, ранее имевший активный высокий уровень и питавший термистор, теперь должен иметь активный низкий уровень для управления затвором Q1, и с этим было связанно единственное потребовавшееся изменение программного кода). MOSFET FDC604 имеет низкое сопротивление открытого канала, составляющее несколько десятков миллиом, поэтому на нем падает напряжение лишь порядка 100 мкВ, что незначительно, даже если источником опорного напряжения измерительного АЦП служит шина Vdd. (Смещения в самом микроконтроллере, вероятно, будут больше). Поскольку схема включается всего на одну миллисекунду каждые полминуты или около того, саморазогревом PRTD можно пренебречь. Потребление тока составило около 3 мА при напряжении питания 5 В и 2 мА при 3.3 В.
Ток резистора R1 проходит через RTD, создавая на нем напряжение, которое усиливается усилителем A1a, коэффициент усиления которого регулируется подстроечным резистором R5. Через резистор R6 подается обратная связь на RTD и R1, компенсируя как CVD, так и изменения напряжения на RTD при изменении его сопротивления. Сопротивление резистора R6 довольно критично: хотя для наших целей вполне подходит 33 кОм, но 31.95 кОм – 33 кОм параллельно с 1 МОм – практически идеально, с теоретически прогнозируемой погрешностью значительно меньше 1 миллиградуса в диапазоне 100 °C, поэтому мы будем использовать его. Очевидно, что для 8-битной дискретизации выходного сигнала это нелепое излишество, но если один дополнительный резистор может устранить один источник ошибок, на это стоит пойти.
A1b теперь дополнительно усиливает сигнал (и инвертирует его) и добавляет регулируемое смещение. Выходной сигнал усилителя, выраженный в долях напряжения питания, теперь прямо пропорционален температуре PRTD. Обратите внимание, что коэффициент усиления этого каскада установлен заранее: сопротивления резисторов R7 и R8 следует выбрать таким образом, чтобы их соотношение было как можно ближе к 3.9, хотя их абсолютные значения не являются критичными. Результат показан на Рисунке 4.
Моделирование и построение графиков
Простая программа (Python плюс библиотека Pygame) для построения графика характеристик схемы в разных масштабах позволила легко увидеть влияние изменения как сопротивления R6, так и коэффициента усиления A1a, с наклоном кривой ошибки (ошибка усиления) и изгибом (ошибка компенсации).
Моделирование первой секции потребовало итераций, начинающихся с (условного) единичного напряжения, подаваемого на резистор R1, и напряжения порядка 0.7 на резисторе R6. Расчет напряжения на PRTD и его усиление давали выходной сигнал каскада, готовый для использования в качестве нового значения напряжения на R6. (Повторение до тех пор, пока последовательные результаты не совпадут в восьми значащих цифрах, потребовало не более десяти итераций). Секция, представленная усилителем A1b, была тривиальной: взять выходной сигнал A1a и умножить на 3.9, вычитая смещение.
Для перепроверки я ввел полученные значения в LTspice и получил практически такие же результаты. Незначительные различия, вероятно, объясняются тем, что даже моделируемые каскады усиления операционного усилителя имеют конечные характеристики, в отличие от знаков умножения.
Программа также сгенерировала Таблицу 1, которая может оказаться полезной. В ней показаны сопротивления PRTD при различных температурах (центрированные относительно 15 °C) вместе с выходным напряжением, отнесенным к Vdd и приведенным в виде его доли. Это выходное напряжение также отображается масштабированным на шкалу от 0 до 255, как в десятичном, так и в шестнадцатеричном виде.
Таблица 1. | Сопротивление PRTD и выходные данные схемы, показанной на Рисунке 3, рассчитанные в зависимости от температуры и центрированные относительно 15 °C. Выходные данные представлены в виде десятичных чисел, как необработанных, так и округленных, а также в виде шестнадцатеричных (hex) дробей. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Длинные числа, сгенерированные программой, были округлены до более разумных значений, которые все равно намеренно были оставлены более точными, чем можно получить от большинства испытательных приборов. Слишком много цифр может оказаться полезным, слишком мало – никогда.
Компенсация длинных проводов
В нынешнем виде схема не позволяет реализовать настоящую 3- или 4-проводную компенсацию сопротивления длинных выводов RTD, что не требуется при сопротивлении NTC-термистора в несколько кОм. Однако использование 4-проводного подключения Кельвина, при котором линии питания и измерения разделены, должно работать хорошо и уменьшать влияние кабеля, как показано на Рисунке 5. Поскольку RTD и схема находятся на расстоянии менее метра друг от друга, я использовал акустический кабель. (ТКС меди близок к ТКС PRTD).
На Рисунке 5 также показано, как можно повысить точность, подключив опорные входы АЦП к шинам питания схемы, хотя это решение представляет лишь академический интерес и предназначено для грубых измерений. Это также позволило бы компенсировать падение напряжения на транзисторе Q1, если это важно. Тогда Q1 можно было бы вообще исключить, питая схему напрямую от выхода МК с активным высоким уровнем. Это привело бы к падению напряжения на шине питания, что не имело бы значения, если бы оно возвращалось на вывод REF+.
Эта схема оптимизирована для центральной температуры 25 °C, поскольку именно для этой температуры приведены характеристики большинства термисторов при сопротивлении нагрузки, равном сопротивлению термистора при 25 °C. В отличие от версии с центральной температурой 15° на Рисунке 3, я ее не собирал и не испытывал, но считаю ее чистой от ошибок. Ее графики, включая кривую погрешности, очень близки к графикам на Рисунке 4, но сдвинуты на 10 °C.
Ошибки, как теоретические, так и практические
Входное напряжение смещения операционных усилителей изменяется с температурой и является потенциальным источником ошибок. Указанное для MCP6002 значение составляет ±2 мкВ/°C (тип.), что является хорошим, но не незначительным показателем. Нагрев схемы примерно на 40 °C (с резистором 100 Ом вместо PRTD) привел к смещению выходного напряжения менее чем на 0.05°, что приемлемо и соответствует расчетам. (Старый фен входит в комплект моего рабочего места). Здесь и схема, и PRTD будут находиться вне помещения, а значит, при примерно одинаковой температуре.
Так как же это работает на самом деле? Теперь схема собрана и откалибрована точно так же, как на Рисунке 3, но еще не установлена, что позволяет проводить испытания с помощью имитатора PRTD, собранного из резисторов (как постоянных, так и переменных), а также переключателей, чтобы сопротивление можно было подключить либо к схеме, либо к (хорошо откалиброванному) измерительному прибору для точной регулировки. Проверка при моделируемых температурах от –10 до +50 °C показала погрешности в диапазоне от нуля при –10 °C до –0.22 °C при +50 °C, независимо от напряжения питания – 3.3 В или 5 В. Это можно было бы улучшить с помощью дополнительных манипуляций (я подозреваю, что соотношение R7/8 немного не совпадает; доступные резисторы имели бесполезные разбросы), но погрешности меньше 8-битного разрешения МК (примерно 0.351 градуса на отсчет или 2.85 отсчета на градус), так что схема справится со своей задачей, и справится хорошо.
Хотя этот подход не заменяет «правильную» схему использования PRTD, он отлично подходит в качестве замены термистору, обеспечивая более широкий диапазон измерений с гораздо лучшей линейностью и без дополнительной обработки. Надеюсь, у настоящих экспертов в этой области с ним не возникнет особых проблем. Кстати, слово «эксперт» этимологически происходит от «то, чему ты научился на собственном горьком опыте: сделал это, прошел через это». Никогда не доверяйте диванным экспертам, если только вы не покупаете удобный диван.