Парадоксально, но факт: у термочувствительного кварцевого резонатора РКТ-206 зарубежных аналогов можно считать, что не существует (даже буквы в наименовании кириллические). Западными (точнее восточными, так как речь идет про Seiko-Epson), как их модно стало называть, «партнерами» выпускались аналогичные термочувствительные кварцы, даже с похожим названием HTS-206. Но сейчас, как можете сами убедиться
по этой ссылке, их выпуск прекращен «из-за уменьшения объема продаж». Изобилие, представленное на картинке (встреченной в английской Википедии), давно уже сошло на нет. Вроде бы кто-то из европейцев все еще выпускает термокварцы на частоты около 5 МГц, но на данный момент мне их разыскать не удалось.
В статье мы попробуем сначала разобраться, в чем достоинства и недостатки кварцевых датчиков температуры сравнительно с другими способами, а затем предпримем попытку построить датчик на основе термочувствительного кварца. Это все еще может быть практически целесообразным занятием, так как РКТ-206 легко приобрести и это не слишком дорого. По результатам сами можете прикинуть, насколько это целесообразно. Статья получилась неожиданно объемная, но без досконального копания в мелочах тему рассмотреть не получается.
Блеск и нищета термокварцев
Попробуем для начала понять причину снижения спроса. Лет тридцать-сорок назад термочувствительные кварцевые резонаторы в качестве прецизионных датчиков температуры вполне были востребованы, по крайней мере в научных и производственных целях (о чем и свидетельствует иллюстрация в начале), а потом как-то стали забываться.
Как описывается
в этой статье, термочувствительные кварцы в качестве температурного датчика обладают следующими неоспоримыми достоинствами:
- достаточно большой диапазон рабочих температур (для обычных РКТ-206 от –55 до +100 °С; для РКТ-206А от –55 до +180 °С; для РКТ-206Б от –55 до +260 °С; имеются и с расширенным температурным диапазоном под названием РКТВ-206);
- высокая долговременная стабильность и воспроизводимость, сравнимая с образцовыми платиновыми датчиками. Термокварцы «не любят» только перегрева: при температурах, близких к верхнему пределу работоспособности, показания могут дрейфовать примерно на 0,08 °C в первый год и не более 0,16 °C за десять лет (данные из паспорта РКТ-206, а не из указанной статьи);
- по этим причинам с помощью термочувствительных кварцев можно получать супервысокие разрешения и точности при измерениях. Авторы указанной статьи говорят, что в лабораторных условиях достигались разрешения 0,0005…0,0003 °С, что находится за пределами практически любых других методов, кроме, наверное, специальных приемов из арсенала экспериментальной физики. Конечно, на практике такое разрешение и не требуется, но надо учесть, что обычные для прецизионных датчиков разрешения 0,01-0,03°С здесь достигаются «малой кровью». Так как датчик выдает сразу цифровой сигнал в виде частоты, то для него не нужны громоздкие и сложные в проектировании и настройке аналоговые схемы, а методы точного измерения частоты импульсов хорошо известны и отработаны до мелочей.
Но есть, конечно, и недостатки:
- во-первых, относительно невысокая крутизна характеристики. Мы привыкли, что металлические датчики сопротивления (медь, платина) имеют крутизну порядка 0,3-0,4 процента на градус (считая от номинального сопротивления при 20 °C); полупроводниковые еще больше (например, LМ37 около 0,66 процентов на градус, считая на весь диапазон в 150°), термисторы вообще на порядок выше, порядка единиц процентов на градус. А крутизна РКТ-206 всего-навсего около 50-60 ppm (миллионных долей!) на градус, считая от номинальной частоты 33 кГц, или в абсолютных значениях около 1,8 Гц/°. Этот недостаток компенсируется высокой стабильностью, о которой речь шла выше, но все равно приходится иметь дело с большими числами и тщательно продумывать арифметику при обработке.
- во-вторых, крутизна характеристики у термокварца отрицательная: с повышением температуры частота падает. Кроме того, для точных измерений в достаточном диапазоне температур требуется представление зависимости температура-частота в виде полинома 2-й, а еще лучше, как говорит описание, 3-й степени. Это не проблемы для современной обработки на контроллерах, но в свое время приходилось изгаляться.
- в-третьих, и в главных (что собственно, и обусловило падение популярности кварцевых датчиков) — технология не позволяет производить идентичные экземпляры, «из коробки» настроенные на строго определенную характеристику. В этом их отличие в худшую сторону от медных/платиновых термометров: понятно, что вытянуть проволоку строго определенного диаметра из металла нужных кондиций при современных методах производства не бог весь какая задача. А вот с кварцевым кристаллом, учитывая необходимые метрологические характеристики, точная подгонка на стадии производства становится непреодолимой проблемой.
Иными словами, все кварцевые температурные датчики требуют индивидуальной калибровки, качество которой и определяет их уровень. Причем, учитывая целевые характеристики, калибровки очень точной и тщательной. А это крайне дорогое занятие: оценить можете по тому факту, что платиновый термометр сопротивления (ПТС) сам по себе можно приобрести за 1-3 тыс. рублей, а для эталонного ПТС с гарантированными паспортными характеристиками к этой цене добавляется один-два нуля справа, в зависимости от класса. И популярность кварцевых термодатчиков держалась за счет простоты получения показаний до тех пор, пока не появились относительно недорогие АЦП с высокой абсолютной точностью «прямо из коробки». С тех пор
применить готовый платиновый термометр оказывается все же проще и дешевле, чем возиться с индивидуальной калибровкой термокварцев.
Как измерить частоту?
РКТ-206 есть просто переделанный обычный «часовой» кварц РК-206, с частотами в диапазоне 32,000…36,000 кГц. Что означает указанный диапазон частот? Пройдя
по этой ссылке, вы обнаружите, что в данном случае в продаже имеется восемь разновидностей РКТ-206, с различными номинальными частотами (их может быть и больше). Я приобрел с самой высокой из имеющихся там частотой 33,300 кГц, просто потому, что их было самое большое количество в наличии.
Для каждой такой отобранной разновидности в принципе имеется в пару опорный кварц под названием РКОВ-206. То есть имеются две возможности. Более простая: сооружаем генератор на основе РКТ-206 и непосредственно измеряем его частоту; опорным служит кварцевый резонатор контроллера. Вторая: сооружаем два генератора на двух кварцах — термочувствительным и опорным — и вычитаем один из другого, сразу получая разностную частоту (не проблема соорудить все на одном двухзатворном транзисторе).
Первый вариант не только проще (в том числе из-за отсутствия необходимости подбора опорного кварца — в продаже они на каждом углу не валяются), но и точнее: если вы заглянете в упоминавшуюся
статью, то на рис. 2 обнаружите, что у опорного РКОВ-206 своя температурная зависимость — куполообразная, аналогично любому часовому кварцу. Величина зависимости близка к нулю около комнатной температуры, и быстро увеличивается по абсолютной величине в обе стороны (причем имеет отрицательный знак — в этом причина того, что любительские часовые модули всегда отстают, а не спешат). В худшем случае (на краях диапазона) уход опорного кварца более чем на порядок меньше, чем у измерительного (в соответствии с графиками из статьи: 300 ppm против 5000 на диапазон 100°). Но это очень много (около 7%), а значит, еще больше искривит общую зависимость температура-частота, причем в непросчитываемой заранее степени.
Мне могут возразить, что от переноса опорного генератора в другое место ничего не изменится, но будут неправы, так как для тактирования котроллера мы можем приобрести куда более стабильный кварцевый резонатор в корпусе типа полноразмерного HC-49U, с оговоренным уходом во всем диапазоне температур, и тем самым снизить отклонение еще на порядок. Например, если в характеристиках указана величина 30 ppm /-40~85 °C (что означает гарантированный уход не более 0,24 ppm на каждый градус), это уже будет гораздо меньше крутизны термокварца (около 50-60 ppm/°C, напомним) и на показаниях скажется в гораздо меньшей степени.
Генератор
Таким образом, мы в первую очередь должны изобрести генератор с нашим термокварцем в качестве частотозадающего элемента. Только кажется, что это простая задача: нам надо, во-первых, соблюсти указанное в
описании требование, согласно которому мощность на резонаторе не должна превышать 1 мкВт, во-вторых, получить как можно более низкое общее потребление схемы (не более долей миллиампера) в расчете на возможность установки в датчик с автономным питанием.
Задача оказалась неожиданно муторной. Есть множество вариантов готовых схем, но для них, как правило, не указаны нужные параметры. Методики теоретических расчетов большей частью пригодны только для простейших случаев типа схемы Пирса на биполярных транзисторах. Кроме того, испытания для всех схем, упомянутых далее, показали не очень большую, но заметную для наших целей зависимость выходной частоты от напряжения питания и номиналов компонентов схемы. Для схем на КМОП-инверторах то, что емкость одного из конденсаторов влияет на частоту, вообще штатная особенность, которую используют при необходимости точной регулировки (см. далее). Потому во всех случаях рекомендуется производить калибровку на готовом датчике с конкретным значением напряжения питания и с конкретными компонентами.
Разумеется, все отладочные работы, включая программирование контроллеров, целесообразно производить при подключении вместо РКТ-206 термостабильного «часового» кварца, выдающего гарантированную частоту 32768 Гц. Если у вас результат будет отличаться более, чем в последнем знаке, значит, что-то сделали не так.
Для начала пришлось изобретать способ измерения реальной выделяющейся мощности на кварце. Самое простое — померить переменное напряжение на кварце и пересчитать в мощность при известном (приведенном в описании) его динамическом сопротивлении. Как описано
в этой статье, задача, оказывается, представляет серьезную проблему даже для профессионалов: обычные измерительные приборы просто затыкают генерацию при подключении их параллельно резонатору.
Как измерить мощность на кварце>>
Я остановился на изготовлении
измерительного дифференциального усилителя с высокоомными входами, с выхода которого сигнал снимался обычным осциллографом. Если будете повторять, учтите, что ОУ в данном случае
не обязательно должен быть супер-пупер прецизионным, но
обязательно с достаточным быстродействием: с полосой единичного усиления не менее 1 МГц или скоростью нарастания не менее 0,5-1 В/мкс (годятся, например, распространенные LM258/358). Коэффициент усиления устанавливался равным 10, что обеспечивается всего двумя номиналами резисторов, отличающихся ровно вдвое: R3 = R2 = 2R1 = R5=R7 = 2R4 = 2R6 (обозначения см. по приведенной ссылке). Подойдут, например, пары 10 и 20 кОм, 15 и 30 кОм и т.д. (меньше 10 кОм брать не рекомендуется, чтобы зазря не нагружать выходы ОУ, но и больше 50-100 кОм тоже не надо). Не забудьте, что питание усилителя здесь обязано быть двухполярным относительно общего провода (± 5В, например, генератор при этом подключается между +5В и общим проводом), иначе можете не уложиться в диапазон по входу (и даже rail-to-rail не поможет).
Классическая схема
Далее началась песня акына с испытанием разнообразных вариантов схем генератора. Пробовалась стандартная схема на КМОП-инверторе в четырех вариантах: традиционный CD4011 и быстродействующий 74HC00 (оба — обычный элемент «И-НЕ»), а также аналогичные элементы «И-НЕ» с триггерами Шмитта CD4093 и 74HC132. Следует отметить в скобках, что для
обычных релаксационных КМОП-генераторов во всех случаях вместо стандартных элементов лучше брать элементы с триггерами Шмитта — схемы получаются стабильнее (как от изменения питания, так и от температуры) и заметно меньше потребляют — триггеры Шмитта гораздо быстрее «проскакивают» состояние с протеканием сквозного тока.
Наилучшие результаты, как по стабильности, так и по потреблению, показал генератор на основе CD4093 (см. рисунок ниже). Его потребление не превышает 40 мкА при питании 5 В и около 10 мкА при питании 3,3 вольта. Среди его аналогов схема на основе 74HC132 несколько стабильнее, но, как и ожидалось, потребляет заметно больше (у серии 74HC потребление с частотой растет гораздо быстрее традиционного КМОП серии 4000B), а обычные инверторы «И-НЕ» (CD4011, 74HC00) не только больше потребляют за счет сквозного тока, но и ведут себя гораздо нестабильнее при «часовых» частотах. При испытании вариантов учтите, что у 74HC132 и CD4093 разводки выводов различаются.
Частоту в этих схемах можно слегка подрегулировать изменением емкости C2. Естественно, этим можно заниматься только до проведения калибровки. Идеальным выбором для типа конденсаторов C1 и C2 будет
слюдяной (у них наименьшая температурная зависимость и наивысшая стабильность во времени), но смысл такой выбор имеет, конечно, только для супер-прецизионных схем с надлежащим качеством калибровки.
Схема имеет выход с «открытым стоком» на транзисторе VT1, что во-первых, позволяет ее подключать достаточно длинным шлейфом (1-2 метра) без риска исказить сигнал помехами; во-вторых, не заботиться о совпадении напряжений питания генератора и приемной части. Не пренебрегайте резистором R3, способствующим более полному закрыванию транзистора. Не забудьте подключить входы незадействованных элементов DD1.3 и DD1.4 к фиксированному потенциалу (см. схему), иначе получите лишнее потребление по питанию за счет хаотического переключения входов, оставленных «висеть в воздухе».
Измерение переменного напряжения на кварце во всех вариантах показало довольно причудливую его форму, однако двойной размах амплитуды не превышал в целом 0,2 В, т. е. действующее значение менее 0,1 В. Так как динамическое сопротивление резонатора равно 75 кОм, то мощность оценивается, как U
2/R = 0,01/75000 ≈ 0,13 мкВт, что не превышает допустимого паспортного значения 1 мкВт.
Как показали испытания, обе схемы на основе CD4093 и 74HC132 при низкой температуре (около нуля и ниже) ведут себя нестабильно: при включении питания могут «спрыгивать» с частоты, особенно при пониженном питании (3,3 В). В большинстве случаев помогает «передергивание» питания: выключите схему на 0,5-1 сек и включите снова. Вероятно, виноват недостаточный коэффициент усиления КМОП-инвертора, который еще больше падает при снижении температуры. Впрочем, однажды заведенная схема продолжает правильно работать при снижении температуры и/или питания, но не держать же ее включенной все время?
Схема на основе ОУ
Лучшие результаты показало применение операционного усилителя. ОУ для этой схемы нужен, во-первых, малопотребляющий; во-вторых, «умеющий» работать при низком напряжении однополярного питания, и с частотой единичного усиления не менее 1 МГц (как и в случае с измерительным усилителем ранее). Желателен также достаточно мощный выход (не менее нескольких миллиампер), во избежание заваливания фронтов на входной емкости затвора выходного ключа. Таких ОУ выпускается довольно много, указанные на схеме TPMCP6002 (с напряжением питания до 5,5 В и потреблением 55 мкA) или MCP6002 (с напряжением питания до 6 В и потреблением 100 мкA) не единственно возможные. Следует предостеречь от использования в этой схеме рядовых ОУ (типа LM258/358) — эксперименты показали, что в этом случае частота достаточно сильно зависит от напряжения питания, а также от емкости подключенных к кварцу конденсаторов.
Существуют разные схемы кварцевых генераторов на основе ОУ, в данном случае наилучшие результаты показал вариант, который, как видите, представляет собой версию КМОП-генератора, приспособленную под ОУ (см. рисунок выше). При применении сдвоенного ОУ MCP6002 схема потребляет примерно 100 мкА при питании 3,3 В. Измерение напряжения на кварцевом резонаторе в этой схеме показывает форму, близкую к треугольной с двойным размахом, равным примерно 0,3 В. Действующее значение треугольного напряжения равно амплитудному (половине двойного размаха), деленному на √3, т. е. 0,15/1,73 = 0,087 В. Итого мощность, выделяющуюся на кварцевом резонаторе, можно оценить, как U
2/R = (0,087)
2/75000 = 0,0075/75000 = 0,1 мкВт, что не превышает допустимого значения.
Проверочно-калибровочная схема
Проверочно-калибровочную схему мы собираем в расчете на то, чтобы поучиться работать с термочувствительным кварцем и провести предварительную калибровку. Поэтому здесь мы не будем заботиться об экономии энергопотребления, и в частности, задействуем для дистанционной передачи хорошо себя зарекомендовавшие, но довольно много потребляющие приемопередатчики HC-12.
Cхема показана на рисунке ниже. Я использовал ATtiny2313, возможностей которого достаточно для наших надобностей. Вывод 9 контроллера (порт PD5, счетный вход T1 таймера 1) подключается к выходу генератора. Данные отсылаются через обычный UART, к выводам RxD (выв. 2) и TxD (выв. 3) которого в процессе отладки можно подключить адаптер USB-UART и принимать данные через USB. На схеме выводы UART подключены к приемопередатчику HC-12, что позволяет принимать данные дистанционно, но потребует отдельного приемника с таким же приемопередатчиком (см. далее).
Сразу напомним, что к обоим HC-12 (приемному и передающему) желательно припаять антенны. Если их нет в комплекте, то подойдет отрезок изолированной проволоки длиной 17 см (многопроволочный гибкий провод нежелателен!). Также напоминаем на всякий случай, что при сборке схемы выводы UART соединяются перекрестно: RxD контроллера с TxD приемопередатчика (или адаптера) и наоборот. Вообще-то в данном случае со стороны контроллера можно подключить только линию TxD, так как схема только посылает данные, но на схеме изображено универсальное подключение.
Предварительные расчеты для проверочно-калибровочной схемы
Изготовители РКТ-206 полностью передрали старое руководство Seiko-Epson, в том числе почему-то приводят в нем ориентировочные коэффициенты уравнения зависимости частоты от температуры, а не наоборот, как это необходимо при построении датчиков (где частота — независимая переменная, а вычисленная температура — ее функция). Поэтому единственное заключение, которое мы можем сделать навскидку по данным описания: то, что крутизна характеристики, равная первому коэффициенту (A1), отрицательна (частота с повышением температуры падает) и составляет примерно -1,8 Гц/°C или около -54 ppm в расчете на частоту 33 кГц. Но нас еще интересует насколько значимы второй и остальные коэффициенты, т. е. насколько в нашем рабочем диапазоне температур требует учета факт, что зависимость отклоняется от прямой линии.
Поэтому мы в проверочно-калибровочной схеме должны постараться определить частоту с надлежащей точностью. Исходя из приведенной выше теоретической крутизны менее 2 Гц/°C, при измерении частоты с точностью 0,1 Гц мы получим разрешение порядка 0,05 °C, т.е. сможем фиксировать температуру с точностью до десятых градуса. При измерении частоты с таким разрешением прямым методом (подсчетом импульсов в течение известного интервала времени) необходим точный временной интервал длительностью 10 секунд.
Чтобы не возиться с подгонкой временного интервала, я приобрел точный (±10 ppm) кварц в полноразмерном корпусе HC-49U с частотой ровно 2
21 = 2097152 Гц. Это позволит сформировать точный период в 10 секунд с помощью 8-разрядного таймера (Timer0 в AVR-контроллерах): если запустить его с входной частотой в 1/1024 от тактовой, получим частоту счета 2048 Гц, и прерывания переполнения каждые 256 импульсов такой частоты будут происходить ровно 8 раз в секунду. Отсчитав 80 таких прерываний, получим интервал ровно в 10 секунд. Причем частота 2,097152 МГц достаточно высокая, чтобы не лезть в нюансы с подсчетом потерянных тактов в моменты начала и окончания счетного периода. (Потери между отдельными прерываниями не будет потому, что запущенный таймер считает независимо от выполнения программы, а мы его останавливать не будем).
А сам предмет счета, т.е. импульсы с кварцевого генератора, мы будем накапливать в 16-разрядном таймере (Timer1), и считывать результат со счетных регистров этого таймера в момент окончания счетного интервала. Так как значение частоты, выраженное в десятых долях герца, получается трехбайтовым (333000 = 0x0514C8), и 16-разрядный таймер успеет переполниться не один раз, то старший байт (число переполнений) будет фиксироваться в отдельном прерывании переполнения Timer1. При общей отладке можно временно поменять число прерываний, равное 80, на число 8, тогда отсчеты будут проходить раз в секунду и на выходе получится точное значение частоты в герцах, без десятых долей (и без старшего байта).
Заметим в скобках, что вообще-то подгонка под точные секунды необязательна, здесь это делается только для удобства исследования поведения термокварца, главное — получить в результате не менее 6 десятичных знаков.
Более того, из-за небольшой крутизны характеристики кварцевого резонатора (на весь диапазон температур частота около 33,3 кГц меняется менее, чем на 400 Гц) ясно, что старший байт никогда меняться не будет, и, вообще говоря, мы можем даже не заводить прерывание переполнения Timer1, просто приплюсовав потом число 0x050000. Но у нас нет уверенности, что в следующий раз достанется кварц с именно превышением «часовой» частоты — экземпляр с номинальной частотой, например, 32,7038 (показанный в
том же каталоге), будет иметь другое значение в старшем разряде, причем в зависимости от температуры оно может быть равным 4 или 5.
Проверочно-калибровочная программа передатчика
Программа написана на чистом ассемблере: так легче учитывать все нюансы подготовки таймеров, и точно рассчитать тайминги программы, избегая задержек при обмене с глобальными/локальными переменными в SRAM, и при этом не опасаясь подвохов со стороны компилятора, так и норовящего, подобно российскому правительству, все подряд «оптимизировать». Единственное неудобство — невозможность оперировать непосредственно многобайтовыми числами, но мы с этим справимся в программе обработки на приемнике.
Текст программы под названием
Freq_Tim0-1-2097MHz.asm можно извлечь из архива по адресу, который вы найдете в конце статьи. В начале программы (после метки
RESET
) первым делом устанавливаются на выход нужные порты PB0 и PB1. К PB0 подключается сигнальный светодиод. Если взять суперяркий (1000 мКд и выше), то для засветки хватит сопротивления 20 кОм, причем при питании 3,3 В лучше выбрать зеленый или красный, а не синий. Порт PB1 предназначен для других надобностей, в проверочно-калибровочной схеме мы его не используем.
Затем предварительно разрешаются нужные прерывания и очищается все, что возможно: счетные регистры и предделитель таймеров, рабочие регистры хранения результатов и вспомогательные регистры для сигнализации состояний. После настраивается UART на скорость 9600 (нам он нужен только на передачу, но настраиваем полностью). Наконец, настраиваем и включаем оба таймера и окончательно разрешаем прерывания.
В прерывании переполнения Timer0 идет отсчет 10-секундного интервала. Когда счетчик прерываний станет равным 80, в первую очередь останавливаем Timer1 и считываем состояние его счетных регистров, затем очищаем все регистры таймера а также счетчик переполнений и запускаем Timer1 снова. За время одного периода измеряемой частоты (~30 мкс) все эти команды при тактовой частоте ~ 2 МГц успевают выполниться с большим запасом, потому мы ничего не потеряем, сразу начав отсчет заново, со следующего периода. В конце переключаем светодиод для сигнализации начала нового отсчета.
Далее в спокойной обстановке в главном цикле программы отсылаем по UART полученные данные: сначала сигнатуру данного датчика (символы ‘K’, ‘D’, ‘1’) — если этого не делать, то при одновременной работе нескольких датчиков с приемопередатчиками HC-12 данные могут перемешаться с другими. Затем отсылаем три байта данных, начиная с младшего, и, наконец символ ‘;’, означающий конец передачи. Для передачи используем асинхронную процедуру по метке
out_com
: прерывания ей могут в принципе помешать, если они меняют значение рабочего регистра temp, но все семь байт успевают отправиться задолго до возникновения следующего прерывания (отсылка 7 байт со скоростью 9600 занимает около 7 мс, а прерывания следуют с периодом 125 мс). Если вам для какой-либо надобности потребуется отсылка по UART такая, что есть опасность пересечься с прерыванием, портящим
temp
, то просто используйте для отсылки отдельный рабочий регистр вместо
temp
.
Для проверки можно подключить генератор с «часовым» кварцем: должны посылаться три числа, близкие в сумме к числу 327680 с точностью до предпоследнего десятичного разряда (например, 0x04, 0xFF, 0xF7 — соответствует 327671). Дребезг при стабильном кварце допускается только в последнем разряде: например, число F7 может меняться от F6 до F8, не более того).
Проверочно-калибровочная программа приемника
Приемник соорудим на обычном Arduino Uno (или Nano, безразлично). Чтобы не пересекаться со штатным UART, который здесь занят под загрузчик и подключен к преобразователю USB-UART, и не повредить тем самым преобразователь, контроллер или приемопередачик, в программе используется программный UART на выводах Arduino D3 (RxD) и D4 (TxD), к которым подключен такой же приемопередатчик HC-12 (не забудьте антенну!).
Заметим в скобках, что в этом случае удобно применить отечественный вариант Arduino под названием
Iskra Nano Pro. Он основан на контроллере ATmega328PB, имеющим два аппаратных UART-интерфейса, т.е. не требует софтового аналога.
Ardiuno-программу под названием
Test_priemnik_rkt_avr можно скачать в составе того же архива по адресу в конце статьи. Приняв последовательность из семи байт (последний равен ‘;’ = 0x3B = 59), сначала убеждаемся, что сигнатура соответствует требуемому датчику (первые три символа ‘KD1’ = 0x4B, 0x44, 0x31 = 113, 104, 61), затем преобразуем следующие три в число типа
long
и пропускаем его через осреднение по методу скользящего среднего. Это нужно для того, чтобы отсеять возможные выбросы при работе с термокварцем (с проверочным «часовым» никаких выбросов, естественно, быть не должно). Полное осреднение производится по пяти измерениям, но в начале выводятся и промежуточные результаты по меньшему количеству, чтобы в процессе отладки не ждать целую минуту.
Результаты выводим через штатный UART наружу. Полученное значение можно наблюдать с помощью обычного Монитора порта, в котором оно будет выводиться заново каждые 10 секунд.
Калибровочное уравнение
Калибровку вынуждено проводим наколеночным способом: плату со схемой генератора размещаем рядом с лабораторным ртутным термометром в разных условиях (если на улице, то обязательно на теневой стороне дома; если в комнате — вдали от нагревательных приборов и сквозняков) и записываем пары показаний. Здесь важно охватить доступный диапазон как можно равномернее. Я проводил в начале марта, температура на улице не опускалась ниже -5° ночью, днем поднималась до 13-14°, внутри комнаты оказывалась от 21 до 26 градусов. Лучше, если в процессе снятия показаний будут повторы при близких температурах.
Показания записываем в текстовую таблицу с двумя столбцами, слева — измеренная частота (независимая переменная), справа — соответствующая ей температура (функция). Для значений частоты, которые у нас выражены в десятых долях герца, ставим запятую перед последним разрядом, чтобы перевести в обычные герцы с десятыми. Файл в формате чистого текста загружаем в мою программу RegrStat (скачивается по адресу к конце статьи) и быстро проверяем полиномы первой, второй и третьей степени. В самом правом столбце результирующей таблицы (см. скриншот ниже) показано отклонение расчетного значения от измеренного для каждой точки отдельно. Если там наблюдаются значительные выбросы, то можно вручную проредить исходную таблицу, удалив явные ошибки.
По данным, приведенным на скриншоте, общее среднеквадратическое отклонение (СКО) для полинома первой степени получилось равным 0,209391, для второй 0,210673, для третьей 0,215212. Т. е. с повышением степени полинома СКО только растет, что позволяет сделать заключение о достаточности линейного приближения в данном диапазоне температур (от -5 до 24 °C). По моим результатам можно записать, что калибровочная характеристика выглядит, как t (°C) = A0 + A1∙ f (Гц) = 18294,07 – 0,5482640∙f. При этом ошибка в среднем составит ±2СКО ≈ ±0,42 °C. Коэффициенты уравнения взяты из программы (см. скриншот) с округлением до 7 значащих цифр (с запасом относительно измерения частоты нашим методом, которое выдает 6 знаков).
Крутизна характеристики в градусах на герц равна коэффициенту A1 = -0,5482640. Обратная величина в герцах на градус равна -1,823939, что на удивление близко к величине средней крутизны, приведенной в
описании и равной -1,811.
Делаем вывод, что нелинейность кварца сказывается только в более широком диапазоне температур. Если посмотрите на график (рис. 2. в уже упоминавшейся
статье), то увидите, что на коротком отрезке 0–25° он действительно представляет практически прямую линию, и учитывая несовершенство нашей калибровки и малое число значений в середине диапазона, нелинейность мы поймать просто не смогли.
Окончательная программа приемника
Программа приемника
Data_priemnik_rkt_avr, размещенная в том же архиве, ничем не отличается от проверочно-калибровочной, за исключением добавления расчета температуры по полученному калибровочному уравнению и ее вывода через UART с одним знаком после запятой. В формуле расчета не забудьте поделить значение частоты на 10, чтобы фигурировала величина в герцах.
Разумеется, это только заготовка приемной части: можно вывести результат, например, на экран дисплея, или посылать его по Wi-Fi куда-нибудь на сервер. Но делать это целесообразно уже с готовым автономным датчиком, конструкцию которого стоит обсуждать после принятия основного решения: имеет ли вообще какой-то смысл вся эта возня с термочувствительным кварцем.
Архив с программами по этой
ссылке.
Программа обработки результатов RegrStat
здесь.