РадиоКот :: О подключении дискретных шкальных газоразрядных индикаторов на примере BT термометра.
Например TDA7294

РадиоКот >Статьи >

Теги статьи: Добавить тег

О подключении дискретных шкальных газоразрядных индикаторов на примере BT термометра.

Автор: uldemir
Опубликовано 29.10.2021
Создано при помощи КотоРед.

В далёкие-далёкие времена, когда еще не были придуманы светодиоды и жидкокристаллические индикаторы, одними из имевшихся в использовании были газоразрядные индикаторы разных типов. Сейчас, мне хотелось бы обратить взор на шкальные газоразрядные индикаторы.

Здесь будет описано подключение и управление шкальным индикатором BG12201 (просто потому что он у меня есть), производства Burrough. Он имеет две шкалы по 201 элементу. Но, те же самые принципы, можно использовать и для подключения любых других подобных индикаторов и с меньшим числом шкал и элементов, в том числе отечественного производства, таких как ИН-33, ИН-34 и аналогичных.

Газоразрядные приборы построены так, чтобы использовать особенности возникновения тлеющего разряда в газе. Главная особенность - некоторое различие между напряжением зажигания и напряжением горения. Т.е. если взять две одинаковые неоновые лампочки и подключить к источнику тока (Источник питания с резистором. Чем сопротивление резистора больше - тем ближе к идеальному источнику тока мы будем! Впрочем, это рассматривает ТОЭ) сначала одну, а затем параллельно вторую - загорится и будет гореть только одна лампочка, та, что была подключена первой. Потому как первая лампочка загоревшись, ограничит напряжение на выходе источника тока напряжением горения, которого недостаточно, для зажигания не горящей, лампочки. Ну что ж, перейдём к шкальному индикатору?

На рисунке приведена схематическая конструкция шкального индикатора, который может разом отображать две шкалы. Есть индикаторы и с одной шкалой - их конструкция похожая, только на один анод у них меньше. Принцип отображения - динамический: светящийся элемент с частотой около 70 Гц пробегает от начала шкалы до заданного места, в зависимости от того, сколько элементов шкалы должно светиться. На этой картинке трудно разглядеть, поэтому приведу еще более схематичное изображение, как у этой лампы соединены катоды.

Как видите, вне зависимости от числа элементов шкалы, индикатор имеет всего 4 вывода для катодов отображения. Причем, катоды могут быть расположены как в линию, так и по дуге или по кругу. Также есть индикаторы у которых катоды сгруппированы не по 3, а по 5 катодов - их принцип действия аналогичен. В начальный момент времени, при наличии напряжения на аноде, на катод сброса (обозначен буквой R или RESET) подаётся низкий потенциал, в результате чего разряд зажигается на самом нижнем - нулевом катоде. Выбора нет - между анодом и катодом сброса была самая большая разность потенциалов и, разумеется, разряд возник именно в этом месте. По прошествии некоторого времени, низкий потенциал снимается с катода сброса и подаётся на первый катод. Тут можно заметить, что к этому выводу подключен не только первый катод, но и четвёртый, седьмой итд. И тут снова, кто первый загорится - тот и будет гореть. А загорится тот, у которого условия ионизации газа будут лучше. А лучше будет у того, у кого рядом только что был газ ионизирован, т.е. в данной ситуации наивыгоднейшие условия будут именно у катода 1. Аналогично, спустя еще некоторое время, обычно 70мкс, низкий потенциал снимается с первого катода и подаётся на второй. И снова, активизируются и второй, и пятый, и восьмой, и еще куча катодов, но разряд переходит на ближайший. Так же происходит перемещение со второго на третий. Чтобы с третьего элемента разряд перешел на четвёртый, после третьего катода, надо снова активизировать первый. Ну а так как четвертый катод к третьему ближе, чем первый или седьмой (не говоря обо всех остальных), разряд и перескочит именно на четвертый. Таким образом перебирая катоды 1-2-3-1-2-3-1-2-3, разряд будет перемещаться до самого конца шкалы, пока присутствует напряжение на аноде. Если на каком-то из анодов будет снято напряжение - следующие элементы шкалы светиться не будут. И, конечно же, нельзя надеяться на то, что если спустя несколько тактов снова подать напряжение на анод, сканирование продолжится с нужного места. Увы, разряд может теперь зажечься в совершенно в любом месте, поэтому анодное напряжение можно вернуть только в следующем цикле. После того как сканирование дойдёт до конца шкалы, чтобы начать следующий цикл, необходимо снова подать низкий потенциал на катод сброса (а высокий подать на анод) и разряд должен будет зажечься в начале шкалы. Для облегчениия этой задачи применяются две вспомогательные вещи. Во-первых, длительность импульса для катода сброса обычно делают в два раза больше, чем для всех остальных катодов - 140 мкс, а во-вторых, обратите внимание на первой картинке на катод и анод "keep alive". В этом месте постоянно должен присутствовать разряд, который и создаёт начальную ионизацию, которая облегчает (и ускоряет) возникновение разряда в начале шкалы.

Этот принцип переноса разряда используется в различных газоразрядных приборах - от декатронов, до алфавитно-цифровых дисплеев с самосканированием (например, ГИПС-16). Когда-то для управления такими индикаторами использовались схемы на транзисторах и логических микросхемах. И хотя в нынешние времена балом правят микроконтроллеры, "ногодрыгом" формировать сигналы управления будет не изящно. Последние тенденции таковы, что в микроконтроллеры помимо простых портов ввода-вывода встраивают довольно разнообразную периферию и, даже, немного программируемой логики, в результате чего появился новый тип микроконтроллеров: SoC - система на кристалле. В такой SoC, для формирования этой "трёхфазной" последовательности перебирающей катоды, как нельзя лучше, подходит использование таймеров, которых в современных микроконтроллерах имеется в достаточном количестве и которые, к тому же, обеспечены и 2-3-4 регистрами захвата и сравнения.

На первом графике представлены требуемые эпюры управляющих катодными ключами сигналов C0-C3. Приведены только первые два цикла таймера, остальные повторяют второй цикл много раз. У практически всех таймеров, имеющих регистры сравнения, их можно запрограммировать на формирование ШИМ сигнала. Для своей конструкции я выбрал таймер с 3 каналами захвата/сравнения и сформировал сигналы приведённые на втором графике (СС0-СС2). Можно видеть, что CC0 совпадает с сигналом C0 (катод сброса), а СС2 c С3. Для получения сигналов для катодов 1 и 2 необходимо применить несложную логическую схему. Можно заметить, что сигнал катода 1 (C1) активируется когда CC0 и СС1 оба имеют низкий логический уровень. Т.е. это соответствует одному элементу ИЛИ-НЕ. Аналогично, сигнал катода C2 является такой же функцией от CC2 и инверсии CC1.

Собственно, этот кусок схемы выполнен внутри микроконтроллера используя PRS (об этом чуть позже). 

Теперь следует подумать об управлении анодами. Ну тут явно видно - ШИМ в чистом виде: импульс должен начаться при активизации катода сброса и прерваться по достижении заданного количества светящихся элементов. Поэтому нет ничего разумнее, как снова воспользоваться услугами еще одного таймера с регистром сравнения.

В этом месте, пожалуй, стоит определиться с микроконтроллером. Для создания любительских BT устройств разумно использовать модули, содержащие микроконтроллер со всей необходимой обвязкой для приёма и передачи радиосигнала. Некоторое время я пытался постичь силабовские (Silicon Labs) микроконтроллеры и, вникнув в их возможности, появилась затея сделать сиё устройство. Так что основой устройства будет модуль BGM220PC22WGA2 и мы будем пользоваться возможностями, что предоставляет этот микроконтроллер.

Так вот, про таймер управляющий анодными ключами. Он должен считать импульсы, которые генерит таймер катодных ключей и сбрасываться, когда активируется катод сброса. Ничего себе задачка? Но оказывается, микроконтроллер EFR32BG22, установленный на модуле, имеет все возможности решить эту задачу. Помимо самих таймеров, надо будет также воспользоваться системой PRS (Peripheral Reflex System). Эта система позволяет соединить многие периферийные устройства микроконтроллера между собой во всевозможных комбинациях. Но и сам таймер так же имеет некоторые особенности. Одна из особенностей состоит в том, что нулевой и первый каналы захвата могут быть использованы особым образом: нулевой канал как сигнал сброса счетчиков, а первый, как вход счетных импульсов от внешних источников. И оба могут использваться как вход для квадратурного энкодера, но в данной конструкции это не используется. Причем входом может являться как сигнал на выводе микроконтроллера, так и сигнал на шине PRS. Вот как выглядит прохождение сигналов сброса и счета через таймер:

Правда из-за особенностей формирования ШИМ таймерами, прямо сигналом выборки катода сброса сбрасывать счетчик не получается. Дело в том (как написано в даташите), что для того чтобы при загрузке в регистр сравнения нуля получался импульс нулевой длины (т.е. отсутствовал), импульс ШИМ формируется при переходе счетчика из состояния 0 в 1, а сбрасывается после достижения числа записанного в регистр сравнения. Т.е. получается так, что при активировании катода сброса у нас не будет анодного напряжения. Поэтому, надо бы еще одним регистром сравнения сформировать импульс, который и сбросит счетчик, и даст счетный импульс, чтобы во время активности катода сброса счетчики уже находились в состоянии 1.

Так как у выбранного микроконтроллера все таймеры имеют по 3 регистра захвата/сравнения, стоит проблема где взять четвёртый. Оказывается, в этом МК можно связать несколько таймеров таким образом, что при запуске одного, синхронно будет запущен и другой (или другие). Таким образом сцепив TIMER1 и TIMER3, получим еще 3 регистра сравнения. И один из них формирует очень короткий импульс, который на временной диаграмме подписан как T3. На диаграмме импульс нарисован довольно длинным, но на самом деле он очень короткий.

При помощи PRS на вход CC0 таймера управляющего анодами подаётся сигнал с выхода CC0 ведущего таймера (TIMER3). Таким образом, когда ведущие таймеры активируют катод сброса, счетчик анодного драйвера по фронту импульса сбрасывается. А считать он будет спады импульсов приходящие на вход СС1. На вход СС1 мы подадим все импульсы, генерируемые таймерами управляющими катодами и сигналом сброса. Тут есть еще один момент. Выход регистра сравнения на вывод выдаёт ШИМ сигнал, а на PRS он может выдавать как ШИМ, так и единичный импульс в момент, когда произошло совпадение в регистре сравнения. Таким образом, канал CC0 таймера 3, который выдаёт сброс анодным счетчикам, сконфигурирован на формирование ШИМ импульса (чтобы по фронту делался сброс, а по спаду - счет), а остальные каналы - единичного импульса. И когда все эти сигналы  объединены по ИЛИ получается сигнал приведенный на 3 графике (называется PRS). Да, PRS позволяет не только провести сигнал от одного устройства до другого, но и выполнить над ними несложные логические операции. Таким образом, по фронту имульса сброса от TIMER3CC0 анодные счетчики сбросятся, а по спаду они уже посчитают первый импульс и перейдут в состояние 1. И это состояние будет на протяжении всего времени пока активен катод сброса. Далее все остальные импульсы заставят счетчики считать дальше. Так как во втором и в последующих циклах катод сброса не должен активироваться, в соответствующий регистр CC0 первого таймера записывается 0. Сигнал ШИМ формироваться не будет, но на шину PRS импульс будет послан, чтобы счетчик изменил своё состояние.

Канал CC2 счетчика управляющего анодами, используется для формирования сигнала ШИМ, который и будет управлять напряжением на аноде. Как уже упоминалось, четвёртого канала сравнения у таймеров нет, поэтому для управления еще одним анодом (второй шкалы), придётся применить еще один таймер. Засинхронизировать, так как это было сделано с предыдущими таймерами, возможности нет - можно засинхронизировать только одну группу таймеров. Но это и не нужно, так как эти таймеры будут засинхронизированы сигналом сброса получаемом от ведущих таймеров, поэтому надобности в их синхронном запуске нет. Для управления анодами использованы TIMER2 для левой шкалы и TIMER4 для правой.

Почему для управления катодными ключами выбран TIMER1, а для управления анодными ключами TIMER2 и 4? Принципиальной разницы нет - таймеры, как правило, равноправны. Такое назначение связано с возможностью вывода сигналов в разные порты из соображений удобства разводки платы. Например, таймер 3 нельзя вывести в порты A и B, но можно в C и D, а таймеры 2 и 4 - наоборот. Поэтому, при необходимости их можно поменять местами.

Выше была приведена схема, как из трёх ШИМ сигналов получить сигналы для ключей четырёх катодов. Можно было бы применить внешнюю схему, но так как еще оставались свободные каналы на шине PRS, то решено было воспользоваться этим вариантом. Но, мы только что сделали так, что выходы таймера 1 на шину PRS выдают не ШИМ сигнал, а единичные импульсы. Зато, ШИМ сигнал мы можем взять с выводов, куда они выводятся (C1 выводится в порт PB2) и уже оттуда завести в PRS, провести необходимые действия и вывести результат уже на другие выводы.

Таким образом, участие процессора в формировании этих сигналов минимальное - примерно раз в 210мкс загрузить следующую порцию значений для регистров сравнения и период счетчика для формирования сигналов управления катодами и иногда, по мере надобности, в регистры сравнения анодных счетчиков сколько элементов шкалы засвечивать. Можно было бы и эту операцию сделать "аппаратно" - через ПДП, но я не вижу, как изящно это сделать. Так как решение "в лоб", запрячь 6 каналов прямого доступа мне изящным не кажется.

Теперь стоит перейти к принципиальной схеме. Схема по своей сути несложная и состоит из источника высоковольтного питания DA2, анодных транзисторных ключей VT5-VT8, катодных ключей VT1-VT4 и управляющего микроконтроллера DD1. Микросхема DA1 обеспечивает питанием микроконтроллер напряжением 3.3в. Само устройство питается от 5в через разъём микро-USB X2. Источник высокого напряжения должен выдавать анодное напряжение 250в и два напряжения смещения: 100в для неактивных анодов и 72в для неактивных катодов, которые формируются на резистивном делителе R10-R11. Напряжения смещения необходимо подавать на неактивные электроды лампы во избежание накапливания наведенного от других электродов напряжения и возникновения нежелательно разряда, который может сбить вышеописанную красивую последовательность перетекания разряда с одного электрода на другой. Это обеспечивают ключи. Катодное напряжение смещения через резисторы R12, R13, R16, R18 подаётся на катоды лампы, пока транзисторы VT1-VT4 закрыты. Тот транзистор, который открыт, подаёт на свой катод низкий потенциал. Анодное напряжение смещения 100в подаётся через диоды VD7, VD8. Когда же открываются анодные транзисторы VT6, VT8, на аноды подаётся 250в, а эти диоды оказываются обратносмещенными и запираются. 

Что-то я увлёкся индикатором, но совсем не написал, а что же это устройство должно делать? Так вот это устройство показывает температуру. А температуру устройство узнаёт от другого устройства, которое может находиться неподалёку, например, за окном, и передавать этому устройству температуру посредством блютус. Сиё устройство использует для отображения температуры шкальный индикатор с двумя шкалами BG12201 и посему может подключаться к двум устройствам являющимися датчиками температуры. Конечно, конфигурация поддерживает возможность отображать на обоих шкалах данные с одного датчика или на одной (или обоих) шкалах отображать "локальную" температуру - температуру кристалла микроконтроллера. Но так как схема немного греется, она согревает внутренности устройства и кристалл микроконтроллера в том числе. Поэтому эти "локальные" показания можно рассматривать как контроль нагрева устройства, но не как температуру воздуха в помещении.

Для того, чтобы указать, на которой шкале от какого датчика показывать температуру необходимо в EEPROM, которая эмулируется во флеш-памяти микроконтроллера, прописать блютус адреса сенсоров. Эта информация считывается из EEPROM только один раз по включении устройства. Чтобы получить к ней доступ, необходимо устройство перевести в режим конфигурации. Для этого во время включения, необходимо удерживать нажатой кнопку S1 (спустя несколько секунд можно отпустить). Тогда устройство становится видным как блютус устройство под названием "Bargraph thermometer". К нему можно подключиться программой для конфигурирования. Увы, специально для этой цели аппликацию делать нет никакого смысла (ну, может, потом...), так как эту операцию не нужно проводить каждый день. Поэтому, чтобы произвести изменения, можно воспользоваться любой программой для теста BT устройств. Например, EFR Connect или CySmart. Также в этом режиме есть возможность смены фирмвари через OTA программой EFR Connect. Как это делается описано в [1].

Для указания адресов устройств, надо выполнить соединение с программой и открыть сервис с UUID c3766409-8778-63d8-3cbb-dcf0e0c36022 (Device Configuration) в котором будут две характеристики: первая для левой шкалы, вторая для правой. Для указания адреса сенсора, надо записать строку шестнадцатеричных чисел в следующем формате:

  • 4 байта - время, после которого считать, что датчик недоступен (в мс)
  • 6 байт   - BT адрес

Все числа представляются в формате "little endian", т.е. младший байт сначала. Если задать таймаут 25 секунд, после которого считаем, что сенсор исчез, если за это время не получили ни одного пакета, то надо записать число "25000", что в шестнадцатеричном виде будет "61A8". Поэтому записать нужно будет как 0xA8 0x61 0x00 0x00. Блютус адрес можно подсмотреть в EFR Connect и если там он отображается как 84:2E:14:31:F0:8D, то записываем, снова начиная с младшего байта: 0x8D 0xF0 0x31 0x14 0x2E 0x84.

 

Если BT адрес для левой и правой шкалы указан одинаковый, то датчик с этим адресом будет отображаться на обоих шкалах, но значение таймаута будет использоваться от левой шкалы, а от правой - игнорироваться. Если BT адрес будет состоять из одних нулей - соответствующая шкала будут отображать "локальную" температуру. В этом случае параметр таймаута вообще не используется.

После отсоединения от устройства, повторно соединиться, скажем, для проверки, будет возможно только после перезапуска устройства снова удерживая нажатой кнопку. Это сделано из соображений безопасности, чтобы никто посторонний, кто не может иметь физически доступ к устройству, не мог изменить его настройки или залить другую прошивку. Сохранённые настройки, также, будут в силе только после перезапуска. Если при записи строка будет короче, то изменятся только переданные байты - остальные останутся неизменными. Если строка будет длиннее 10 байт - вы сами будете виноваты, если что-то пойдёт не так.

Программа, записываемая в микроконтроллер, составлена в среде Simplicity Studio v5 и доступна в виде исходника. В свежеприобретённый модуль необходимо загрузить бутлоадер bootloader-storage-internal-single-352k.hex и саму программу bargraph_thermo.hex. Если есть проблема с програмированием этих модулей (для программирования необходим Segger J-Link), то эту конструкцию можно выполнить используя Explorer Kit BRD4314A, который содержит на одной плате и модуль, и программатор (с отладчиком) и два ряда контактов под стандартный разъём с шагом 2.54 мм. Правда, проект нужно будет пересобрать указав в качестве целевого микроконтроллера BGM220PC22HNA (отличаются типом генератора на 32кГц и объёмом памяти) и создать, скомпилировать и загрузить соответствующий бутлоадер.

В схеме можно применять и другие компоненты помимо указанных на схеме. Диоды VD1 и VD2 должны быть типа ultra fast с временем восстановления не хуже 70нс и VD1 выдерживающий обратное напряжение не ниже 400в, а VD2 может быть попроще - 150в. Диоды VD3-VD8 могут быть обычные выпрямительные или маломощные диоды, выдерживающие обратное напряжение 200в для VD7-VD8 и 100в остальные. Трансформатор намотан на магнитопроводе EFD20. Сердечник из материала N87 с зазором 0.25мм. Первичная обмотка состоит из 17 витков в 3 провода диаметром 0.25мм, вторичная из 214 витков проводом 0.12мм с отводом от 63 витка. Микросхема LM2577 должна быть с индексом -ADJ, но возможно применение и с другими индексами, указывающими напряжение стабилизации этой микросхемы. В этом случае, резистор R5 не устанавливается, а номиналы резисторов R3-R4 должны быть пересчитаны, чтобы соответствовать примененной микросхеме.

В схеме можно пробовать применить и другой источник высокого напряжения. Если примененный источник не имеет возможности генерировать напряжения смещения, то напряжение смещения 72в можно брать с резистивного делителя образованного R10-R11 и одного из резисторов R12-R13,R16,R18 (в каждый момент времени подключен один из них). Но в этом случае диоды VD3-VD6 и транзисторы VT1-VT4 должны быть расчитаны на обратное напряжение не ниже 300в. Потому как при запуске, если высокое напряжение появится раньше, чем микроконтоллер откроет один из катодных ключей,на этом "делителе" могут быть все 250в. Но этот вариант не проверялся - пробуйте на свой страх и риск. В случае если используется приведенная схема, то резисторы R10-R11 не устанавливаются.

Так же, в схеме можно применить и другие шкальные индикаторы. Главное, чтобы они были с 3 группами катодов. Если применять индикаторы только с одной шкалой, то можно индикатор подключить только к одному каналу и второй канал не использовать. Но можно включить два таких индикатора - каждый на свой канал. Для этого катоды соединяются параллельно, а аноды - каждый к своему каналу. Вот для примера схема включения двух индикаторов ИН-34:

Конечно, так как у индикаторов ИН-33, ИН-34 число элементов отображения почти в два раза меньше, необходимо внести в программу некоторые изменения, так как цена одного деления будет один градус (а не пол градуса, как для BG12201). Такие минимальные изменения задаются в файле configuration.h. Так же из-за немного иных параметров лампы необходимо изменить анодное напряжение на 230в и пересчитать трансформатор и делитель напряжений смещения, чтобы они соответствовали указанным в справочном листке на индикатор.

Если же применять индикаторы с 5 группами катодов, то данную схему (и программу) придётся немного переработать, но вам придётся это сделать самостоятельно.

Конструкция сенсоров в данной статье не рассматривается, так как это достойно отдельной статьи, в которой необходимо найти решение как эти сенсоры запитывать, чтобы не нужно было зимой в лютый мороз залазить на столб, где вы разместили сенсор, для замены внезапно скончавшихся элементов питания. Пока же, могу сообщить, что данная конструкция расчитана на работу с сенсорами, которые передают non-connectable advertisement содержащий в поле Manufacturer Specific Data шестнадцатибитное число со знаком означающее температуру в сотых долях градусах цельсия. Для примера приложен небольшой проект для платы Thunderboard Sense BRD4184A. Вот как должен выглядеть сенсор в аппликации EFR Connect:

В поле Data видна температура: 0x0a3f -> 2623 -> 26.23ºC.

Впрочем, в программе остался и "старый вариант", который я реализовал первым, но он для сенсора энергетически не выгоден. Если сенсор предоставляет Environmental Sensing сервис  (UUID 0x181a) с характеристикой Temperature (UUID 0x2a6e), то это устройство так же сможет к нему подключиться и с заданным интервалом запрашивать температуру и показывать. Опять же, в качестве образца можно использовать демо-платы от Silicon Labs типа Thunderboard Sense со стоковой прошивкой. Если там другая прошивка, то в Simplicity Studio можно в эту плату загрузить демо под названием "Bluetooth - SoC Thunderboard Sense".

Печатная плата не приводится, так как форма и расположение деталей зависит от примененного индикатора, деталей и конструкции корпуса. Поэтому не хочется навязывать своё решение и ограничивать Вашу фантазию. Следует только учесть расположение модуля на печатной плате, так как плата выполняет роль части BT антенны. Требования по расположению модуля на плате можно найти в приложенном даташите.

Литература:

  1. Разработка Bluetooth приложений на модулях фирмы Silicon Labs. Часть I.
  2. BGM220P Wireless Gecko Bluetooth Module Data Sheet

Файлы:
Проект сенсора для платы Thunderboard BRD4184A
Проект шкального термометра
Файлы прошивкм шкального термометра
BGM220P Wireless Gecko Bluetooth Module Data Sheet


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

10 4 4