Фильтр по тематике

Пирометр на ПЛИС. Часть 2

Во второй части статьи, посвящённой описанию работы пирометра на базе промышленного инфракрасного датчика температуры, рассматриваются проект ПЛИС, наладка и регулировка устройства, а также рассказывается об осуществлении обмена данными с ПК.

Проект ПЛИС

Проект ПЛИС пирометра написан на алгоритмическом языке Verilog HDL. Он включает в себя следующие модули: модуль верхнего уровня (файл TEMPER_IR_LCD0802.v), модуль ФАПЧ (файл ALT_PLL.v), модуль подавления дребезжания кнопок (файл noise_filter_butt.v), модуль формирования сигналов озвучивания кнопок (файл buzzer_butt.v), модуль обмена данными с датчиком температуры семейства MLX90614 (файл MLX90614_wr_rd.v), модуль расчёта CRC (файл CRC8_D40.v), модуль обмена данными с микросхемой FRAM-памяти FM24LC16 (файл FM24LC16_wr_rd.v), модуль передачи байта данных через UART (файл UART_byte_tx.v), модуль приёма байта данных через UART (файл UART_byte_rx.v), модуль двухступенчатого триггера для формирования положительных импульсов длительностью один период синхросигнала по фронту входного сигнала (файл Trigger_2st_front.v), модуль преобразования чисел из двоичного в двоично-десятичное четырёхразрядное представление (файл binar_BCD_XXXX.v).

Общая структура проекта ПЛИС достаточно полно иллюстрируется структурной схемой устройства [1]. Модуль верхнего уровня включает в себя несколько контроллеров, не выделенных в проекте в отдельные файлы: контроллер ЖКИ, контроллер обработки сигналов кнопок, контроллер формирования звуковых сигналов, контроллер передачи блока данных через UART, контроллер приёма блока данных через UART, контроллер вычислений и сравнения результата с порогом (вычислитель). В состав вычислителя также входит контроллер вычисления значения CRC и его сравнения со значением СRC, принятым из датчика.

Описанный ранее алгоритм вычисления температуры датчика с некоторыми вариациями реализован в вычислителе. Поскольку все математические операции в этом проекте являются целочисленными, то для достижения требуемых точности и разрешающей способности измерителя они осуществляются над исходными значениями температуры TA и TO, предварительно умноженными на 10. Дробные части этих исходных значений, а также дробные части результатов операций над ними при вычислениях отбрасываются. Таким образом, в качестве конечного результата вычислений получается целочисленное значение температуры, представленное в единицах 0,1°C. Это значение в десятичном виде с десятичной запятой перед младшим разрядом отображается на ЖКИ, а также выдаётся через UART. Указанным способом обеспечивается разрешающая способность вычислителя, равная 0,1°C. Такое разрешение является достаточным для обеспечения точности измерений, равной 0,2°C.

Вместо деления на 50 в проекте ПЛИС реализовано умножение на 41943 с последующим делением на 2097152. Пара чисел 41943 и 2097152 подобрана из расчёта 41943/2097152=0,0199999≈0,02=1/50. Это сделано для обеспечения максимальной точности вычислений. Операция умножения над целочисленными сомножителями в проекте ПЛИС даёт целый результат без появления каких-либо ошибок, однако при делении целых чисел в ПЛИС дробная часть частного будет автоматически отброшена, и это приведёт к появлению ошибки округления, которая будет тем значительнее, чем меньше делимое. Вместо этого исходное значение температуры умножается на 41943, а вместо деления на 2097152 используется логический сдвиг вправо на 21 разряд, поскольку 2097152=221. Применённый способ целочисленного деления не даёт никакой ошибки, за исключением пренебрежимо малой ошибки округления числа 0,0199999 до 0,02.

Таким образом, итоговая формула вычисления значения температуры окружающей среды TA ITOG, представленного в единицах 0,1°C, с учётом предварительного умножения на 10 реализована в вычислителе проекта ПЛИС в следующем виде:

Температура объекта TO ITOG вычисляется в проекте ПЛИС по формуле, аналогичной (2), с подстановкой значения TO вместо TA.

Вычисление значений TA ITOG и TO ITOG в проекте ПЛИС осуществляется в контроллере вычислений и сравнения результата с порогом (в вычислителе), структурная схема которого приведена на рисунке 8.

Для обеспечения умножения на 419430 в проекте ПЛИС используется стандартная мегафункция умножителя LPM_MULT из утилиты MegaWizard Plug-In Manager среды Quartus II. Умножитель представляет собой комбинационное устройство, на которое не подаются никакие входные синхросигналы. Разрядность сомножителей выбрана, исходя из их максимальных возможных значений операндов умножителя.

Деление на 2097152, как уже было сказано, реализуется путём логического сдвига вправо с помощью языковой конструкции, представленной в листинге 1.

Для обеспечения вычитания числа 2732 в проекте ПЛИС используется стандартная мегафункция вычитателя LPM_ADD_SUB из утилиты MegaWizard Plug-In Manager среды Quartus II. В качестве вычитаемого в этой мегафункции используется константа – десятичное число 2732. Уменьшаемое и разность в мегафункции вычитателя должны быть представлены в дополнительном коде. Для всегда положительного уменьшаемого, которое исходно представлено в прямом коде, указанное требование не играет роли, поскольку у положительных чисел представление в дополнительном и прямом коде совпадает. Преобразование разности из дополнительного в прямой код может потребоваться только в случае отрицательной разности, поскольку дальнейшие операции над разностью в вычислителе требуют представления данных в прямом коде. Преобразование кода разности с генерацией знака получившегося результата осуществляется с помощью языковой конструкции, представленной в листинге 2.


Далее в вычислителе производится преобразование полученных в прямом коде значений TA ITOG или TO ITOG из двоичного в двоично-десятичное представление с помощью содержащейся в модуле binar_BCD_XXXX.v языковой конструкции, представленной в листинге 3.

Эта полностью комбинационная схема преобразования демонстрирует решение задачи «в лоб», при котором осуществление деления и получение остатка от деления возлагается на компилятор среды разработки и происходит прозрачно для разработчика. Недостаток такого подхода – повышенный расход ресурсов ПЛИС.

Затем в вычислителе производятся преобразование полученного набора байтовых двоично-десятичных значений тысяч, сотен, десятков и единиц °C в ASCII-код, которое заключается в прибавлении к каждому байту десятичного числа 48, добавление в нужное место десятичной запятой и отправка полученного набора байт на индикацию в ЖКИ и канал передачи UART.

Подготовка ASCII-данных для ЖКИ выполняется с помощью языковой конструкции, представленной в листинге 4.

В этой конструкции анализируется результат сравнения значения CRC, поступившего из датчика, и значения CRC, вычисленного в ПЛИС с помощью собственного генератора. Модуль генератора CRC для пятибайтового блока входных данных на языке Verilog HDL, содержащийся в файле CRC8_D40.v, создавался не автором статьи, а с помощью online-генератора кода HDL, доступного в интернете по ссылке [2]. Внешний вид интернет-страницы этого online-генератора с введёнными параметрами описываемого датчика (полином, размер блока данных в битах) показан на рисунке 9. При нажатии кнопки Download на этой странице автоматически создаётся и предлагается к загрузке файл, содержащий код генератора CRC на языке Verilog HDL с заданными параметрами.

Помимо собственно вычислений значения температуры, заданного пользователем порога сравнения, и их передачи в контроллер ЖКИ, в вычислителе производится сравнение текущего вычисленного значения температуры с этим порогом. При превышении порога одноразрядная переменная Porog_Temper в вычислителе принимает значение 1, в противном случае – значение 0. Кроме того, при превышении порога байтовая переменная Porog_Temper_UART принимает значение R, в противном случае – значение S. Значение переменной Porog_Temper используется в дальнейшем в качестве строба для генерации прерывистого звукового сигнала высокого тона, сигнализирующего о превышении порога, а также (после инверсии) – в качестве сигнала управления светодиодом сигнализации превышения порога. Значение переменной Porog_Temper_UART выводится на ЖКИ, а также передаётся через UART во внешнее устройство в составе информационной посылки.

Для сравнения с порогом в вычислителе используется умноженное на 10 значение температуры в единицах 0,1°K, хранящееся в регистре Temper_kelvin_x10.

Для синхронизации вычислителя используется синхросигнал с частотой 10 МГц, поступающий с выхода системы ФАПЧ (PLL). Процессы вычислений над входными данными и преобразований полученных результатов занимают в вычислителе всего несколько тактов этого синхросигнала.

Проект ПЛИС разработан в среде Quartus II бесплатной web-версии 13.0, его конфигурация занимает около 80% ёмкости ПЛИС. Файл с расширением .jic, предназначенный для записи в микросхему конфигурационной памяти ПЛИС, в составе проекта уже содержится. Архив проекта ПЛИС TEMPER_IR_LCD0802.zip доступен в дополнительных материалах к статье на сайте журнала www.soel.ru

Наладка и регулировка пирометра

Правильно собранное устройство в наладке не нуждается и начинает работать сразу же. При включении питания на ЖКИ в течение 2 с отображается начальная заставка – надпись «InfraRed» и номер версии проекта ПЛИС, затем в течение 2 с отображается надпись «Load» с нарастающим заполнением экрана точками, сопровождаемым серией коротких звуковых сигналов. Это имитация начальной загрузки встроенного программного обеспечения (шутка разработчика – ПО в устройстве отсутствует). Затем пирометр переходит в состояние текущих измерений в последнем заданном перед выключением режиме. Однако при первом включении пирометра микросхема памяти FRAM DD4 FM24LC16B в области хранения значения порога ещё чиста, поэтому на ЖКИ будет отображаться нечитаемое значение порога сравнения температуры. Необходимо с помощью нескольких нажатий на кнопки «++», «--», «+», «-» добиться перехода текущего значения порога через верхнюю или нижнюю границы, после чего текущее значение порога станет отображаться корректно. То же самое относится и к значению режима устройства, задаваемому кнопкой MODE. Задав с помощью кнопок управления требуемые корректные значения порога и режима, необходимо выключить питание устройства и через несколько секунд включить его снова для контроля правильности сохранения этих значений в FRAM. При повторном включении последние заданные значения порога и режима в устройстве должны сохраниться. Если этого не происходит, необходимо проверить правильность подключения к плате Core EP2C5 микросхемы FRAM DD4. Значение состояния удержания в FRAM не сохраняется, по умолчанию после включения питания устройство всегда переходит в состояние текущих измерений.

Нажимать кнопку SB7 «Сброс» для запуска пирометра не требуется – она является технологической.

Регулировку пирометра следует начинать с контроля и, при необходимости, с задания выходного напряжения +4,2 В стабилизатора DA4 путём подбора сопротивлений резисторов R28, R29. Затем следует перейти к заданию контрастности ЖКИ HG1 путём подстройки резистора R15 и заданию яркости подсветки ЖКИ путём подбора сопротивления резистора R14. После этого необходимо задать желаемую громкость звука излучателя BF1 путём подбора сопротивления резистора R16. Правильность подключения кнопок управления SB1…SB6 и их исправность можно определить по наличию короткого звукового сигнала с частотой 500 Гц, генерируемого при нажатии на каждую из них. Ток через лазерный диод HL6 ограничивается резистором R13, смонтированным на корпусе диода.

В случае если по условиям эксплуатации пирометра с помощью него предполагается измерять температуру небольших объектов, необходимо произвести юстировку оптических осей температурного датчика и лазерного маркера. В авторском варианте устройства лазерный маркер на несущем кронштейне при юстировке остаётся неподвижным, а положение температурного датчика подстраивается под него с помощью металлических шайб, подкладываемых под элементы его крепления (см. рис. 4 [1]). Для проведения юстировки удобно использовать какой-либо точечный объект, имеющий температуру, резко отличающуюся от температуры окружающей среды, например жало паяльника. 

Обмен данными с ПК

Для обеспечения обмена данными между пирометром и ПК через интерфейс USB можно использовать любую из распространённых программ эмуляции простого терминала, например Terminal, CnCTerm, ModemSE, Extem, X-CTU и др., поддерживающих обмен ПК с внешними устройствами через COM-порт. В данном случае обмен физически производится через порт USB ПК, но программно для обеспечения этого обмена в ПК создаётся виртуальный COM-порт, который и следует указать в настройках терминальной программы. Создание виртуального COM-порта в ОС Windows будет произведено автоматически в ходе инсталляции драйвера микросхемы PL2303, который можно загрузить по ссылке [3].

На рисунке 10 показано окно терминальной программы Terminal v1.9b, отображающее поступающие из пирометра данные. В состав выдаваемой устройством посылки данных входят знак и значение температуры в °C; признак превышения (символ R) или непревышения (символ S) этой температурой текущего значения порога; текущий режим устройства (символы A, M или N); состояние удержания (символ H) при его наличии. Для управления пирометром с ПК используются команды, перечисленные в таблице.

Все символы в командах латинские. Заметим, что каждая команда должна передаваться в пирометр без каких-либо дополнительных символов, например возврата каретки или перевода строки, в конце. При получении корректной команды устройство выдаёт короткий звуковой сигнал с частотой 500 Гц. Параметры обмена через виртуальный COM-порт:

  • скорость 9600 бит/с;
  • 8 бит в байте;
  • контроль чётности отсутствует.

При переключении режимов устройства кнопкой MODE в первый момент (несколько сотен мс) после этого значение измеренной температуры на ЖКИ может заменяться прочерками. Так проявляется работа модуля расчёта CRC из состава проекта ПЛИС, который блокирует поступление на индикацию и в канал передачи недостоверных, с его точки зрения, данных.

Несколько слов о практическом применении пирометра. Изготовленное в авторском варианте устройство используется для бесконтактного измерения температуры электрорадиоэлементов. При наладке и ремонте электронных устройств, состоящих, например, из большого количества микросхем, их повышенная или пониженная относительно нормы температура часто позволяет судить об их исправности. При этом норма для каждой конкретной микросхемы может быть определена путём измерения её температуры в исправном устройстве и занесения показаний в так называемую карту тепловых режимов. Измерение температуры корпусов микросхем производится на расстоянии 2–3 см.

Кроме того, возможно применение устройства и для других бытовых и промышленных целей, например бесконтактного измерения температуры агрегатов, жидкостей, смесей, растворов и т. п. в строительстве, химии, физике, кулинарии и других отраслях. 

Литература

  1. Редькин П. Пирометр на ПЛИС. Часть 1. Современная электроника. 2019. № 7.
  2. https://www.easics.be/webtools/crctool
  3. https://www.waveshare.com/wiki/File:PL2303_Windows_Driver.7z


Комментарии
Рекомендуем
Электронные датчики и радары  в системе беспроводной связи ОТА, LOP и E-peas электроника

Электронные датчики и радары в системе беспроводной связи ОТА, LOP и E-peas

В будущем разработчиков РЭА ожидает эра «одноразовых» устройств: «установил и забыл» – надёжные, устойчивые к внешним воздействиям среды, но не предназначенные для ремонта. Одна из важных решаемых задач – сочетание сбора энергии из среды, её преобразование в электрическую и применение датчиков и микроконтроллеров с крайне низким энергопотреблением. В сочетании с технологиями E-peas (Electronic portable energy autonomous systems – автономные портативные электронные системы), LOP (с низким энергопотреблением) и решениями NXP возникают перспективы датчиков положения, давления и измерения сопутствующих величин от OEM-производителей. С аппаратными настройками и масштабируемостью производительности РЭА в формате процессоров S32R с исключением ошибок в передаче данных аналогового и смешанного сигнала беспроводным способом на небольшие расстояния. В статье представлены примеры системных решений для организации и управления питания датчиков РЭА, задействованных в беспроводной передаче данных, сетевых технологиях и транспортной технике с беспроводной сетью ОТА (Over-the-air – по воздуху).
15.04.2024 СЭ №4/2024 588 0

ООО «ПРОСОФТ» 7724020910 2SDnjdbfYK3
ООО «ПРОСОФТ» 7724020910 2SDnjdbfYK3