Уже и не вспомнить, когда впервые увидел газоразрядные индикаторы, но был очарован с первого же взгляда. Они завораживающе прекрасны! Да, есть некоторые особенности — например, абсурдно высокое постоянное напряжение.

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

Обнаружились и сайты, и YouTube-каналы, которые хорошо рассказывали об особенностях работы газоразрядных индикаторов, объясняли схемотехнику для управления ими. Доступность такой информации стала решающей при разработке собственной конструкции. Вот эти ресурсы: EEVBLOG, Fran Blanche, Dalibor Farny, и Threeneuron.

Изучив эту пусть непрактичную, но зато прекрасную технологию, невозможно было не загореться желанием собрать собственные часы.

Используйте навигацию, если не хотите читать весь текст

Файлы и материалы

Предисловие

После изучения часов, которые собирали и выкладывали в сеть другие радиолюбители, стали понятны требования к первой версии проекта.

  1. Логикой часов должен управлять простой микроконтроллер — PIC16, PIC18 и подобные, — а не избыточное решение вроде одноплатника Raspberry Pi.

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

  3. Часы будут 6‑разрядными, в 12‑часовом формате — Ч1 Ч0 : М1 М0 : С1 С0.

  4. Под каждым газоразрядным индикатором разместится небольшой RGB-светодиод для дополнительной подсветки. Красный, зеленый и синий каналы каждого светодиода будут управляться тремя кнопочными переключателями с фиксацией — так получатся смешанные цвета.

  5. Установка времени — с помощью поворотного энкодера. Нажатие переводит систему в режим настройки. Вращение — устанавливает часы. Следующее нажатие — минуты, еще одно — секунды. Последнее вернет часы в обычный режим работы.

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

  7. Вся схема питается от готового низковольтного AC/DC‑адаптера.

  8. Газоразрядные индикаторы — IN‑12А.

В будущих версиях проекта хотелось бы добавить еще несколько возможностей.

  1. Микросхему часов реального времени (RTC) для более точного хода и небольшой батарейный резерв на случай отключения питания. (Проблема старых часов на микроволновке).

  2. Модуль Wi-Fi или GPS для автоматической синхронизации времени, чтобы не настраивать его вручную.

  3. ШИМ-управление для RGB-светодиодов, чтобы регулировалась яркость и палитра цветов получалась шире.

  4. Самовосстанавливающийся предохранитель (PTC) для защиты от перегрузки по току на случай неисправности.

  5. Линейный газоразрядный индикатор IN‑9 в качестве секундной шкалы для 4‑разрядных часов. К слову, работа уже началась и выглядит многообещающе.

  6. Независимые разъемы для индикаторов, а также небольшие платы-адаптеры для разных их типов. Подключались бы они к основной плате через простой штыревой разъем. Тогда индикаторы разных моделей будут легко меняться. Адаптер для IN‑12А уже готов.

30+ бесплатных курсов на IT-темы в Академии Selectel

Для начинающих и опытных специалистов.

Изучить →

Высоковольтный источник питания

Купленным газоразрядным индикаторам для работы требуется постоянное напряжение около 170 В.

Я нашел работы Threeneuron (Michael Moorrees) — они показались качественными и хорошо документированными. И подход его понравился. Высоковольтный источник требовал на входе всего 12 В постоянного тока и выдавал на выходе регулируемое напряжение от 45 до 190 В — идеально. Вместо того чтобы покупать один из готовых наборов (кажется, он тогда их еще продавал), я решил скопировать его схемотехнику и реализовать ее самостоятельно.

Для разработки всех схем и печатных плат использовался EAGLE.

Однако моя задача потребовала нескольких изменений.

  1. Пришлось добавить 5‑вольтовый стабилизатор напряжения для питания микроконтроллера, управляющего логикой на плате индикаторов. Выбранный стабилизатор берет имеющиеся 12 В и выдает ровные 5 В на выходные штыревые разъемы.

  2. Выход «Pulse» убрал, так как более высокое напряжение не требовалось, а количество контактов в разъеме хотелось сократить.

  3. Вместо подключения внешнего потенциометра для Rx, я установил подстроечный резистор на 50 кОм прямо на плату источника питания. А почему бы и нет?

  4. Для удобства подключения добавил на выходной разъем чередующиеся контакты земли.

  5. Схема довольно проста, поэтому развел дорожки только на нижнем слое платы. Вот почему на одном из следующих фото паяльная маска только с одной стороны.

Проектирование логической схемы

Выбор отдельных цифр на газоразрядных индикаторах — задача довольно простая. Анод через токоограничивающий резистор подключается к высокому напряжению +170 В. Затем любой из 10 катодных выводов замыкается на землю (GND), чтобы зажечь соответствующую цифру. В какой‑то момент времени должна светиться только одна из них.

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

Хотя газоразрядным индикаторам нужно высокое напряжение, общий потребляемый ток невелик и не создает проблем.

Проблема возникает с высоким напряжением и «выключением» цифр. Подключить или коммутировать отдельные катоды на землю — тривиальная задача для простого микроконтроллера. Но поднять напряжение на катоде достаточно высокое для «выключения» цифр он не может. Напряжение значительно превышает то, с которым способен работать микроконтроллер.

Одно из решений — управлять с микроконтроллера MOSFET-ключами, подключенными к каждому катоду. Но тогда схема будет загромождена огромным количеством транзисторов. Логичное решение — использовать сдвиговые регистры. Микроконтроллер управляет сдвиговыми регистрами, а те уже взаимодействуют с высоковольтными индикаторами. Регистры выступают посредником из-за большой разницы напряжений.

Однако это должны быть «высоковольтные» сдвиговые регистры, способные удерживать на своих выходах максимально высокое напряжение, чтобы предотвратить зажигание индикаторов. Я скопировал логическую схему из личного проекта Дэйва Джонса, в которой используется 8‑битный силовой логический сдвиговый регистр TPIC6595 от Texas Instruments. Выходные каскады (стоки) имеют напряжение ограничения 45 В, что достаточно для эффективного гашения цифр индикатора.

Для управления коммутацией цифр индикатора используется 8‑битная логика. Каждый отдельный битовый выход (DRAIN#) подключается к одной цифре индикатора. Поскольку у каждой микросхемы сдвигового регистра всего восемь выходов, а нужны 6‑разрядные часы в формате Ч1 Ч0 : М1 М0 : С1 С0, требуется соединить несколько регистров последовательно. Выводы SER IN и SER OUT регистра как раз и позволяют такое объединение, так что можно расширить логику с 8 бит до 16, 24, 32 и так далее.

Для 12-часового формата полное представление любого допустимого времени требует 44 бит. В формате Ч1 Ч0 : М1 М0 : С1 С0 разряды Ч0, М0 и С0 могут отображать все 10 цифр от 0 до 9. Разряды М1 и С1 — только 6 цифр от 0 до 5. Разряд Ч1 — только 2 цифры, 0 или 1. Итого: 3×10+2×6+2=44. График ниже объясняет это нагляднее.

Хотя для 12‑часового цикла нужно всего 44 бита, в финальной схеме я предусмотрел еще одно битовое соединение на случай, если кто‑то захочет переделать их в 24-часовые (45 бит).

Выводы SER IN и SER OUT соединяются последовательно для передачи 44 бит, а вот выводы RCK (импульс защелкивания) и SRCK (тактовый сигнал сдвигового регистра) должны быть общими для всех микросхем регистров. Здесь в игру вступает микроконтроллер — он служит источником 44‑битных данных, тактового сигнала для регистров и импульса защелкивания.

Я выбрал небольшой 14‑выводной микроконтроллер PIC16F15325 от Microchip. Выбор пал на этот PIC благодаря:

  • компактному корпусу;

  • наличию последовательных интерфейсов, выводов для внешних прерываний и функции PPS (Peripheral Pin Select), которая дает гибкость в назначении функций выводам.

Большой 40‑выводной PIC был бы избыточным, осталось бы много незадействованных ножек. В итоге в финальной схеме неиспользованным оказался всего один вывод.

К PIC подключена стандартная обвязка: кнопка сброса (MCLR), разъем для программатора PICkit 3 и внешний кварцевый резонатор для тактирования внутреннего генератора. Я выбрал резонатор на 12,288 МГц, поскольку его частоту легко поделить до точных секундных импульсов — тактовой частоты моих часов.

Ссылка на исходный файл C — вверху страницы. Как мне кажется, он неплохо прокомментирован. Все подробности — там. В коде для PIC время хранится в виде прошедших секунд в десятичном формате: 43 200 секунд — это 12 часов. Каждую секунду срабатывает прерывание, после чего происходят два шага.

  1. Количество секунд преобразуется в шесть целочисленных переменных — для Ч1 Ч0 : М1 М0 : С1 С0.

  2. Отдельные цифры времени преобразуются в 44‑битное сообщение для отправки в сдвиговые регистры. 44 бита отправляются 8‑битными порциями, начиная с Ч1 и заканчивая С0.

// ШАГ 1
// Разбиваем переменную myTime (общее число секунд) на часы, минуты, секунды,
// а затем каждую из них — на отдельные цифры
if (myTime >= 43200) // 12 часов — это 43 200 секунд
    myTime = 0;      // сбрасываем счетчик часов

// Кодирование ЧЧ:ММ:СС (12-часовой формат, без AM/PM)
// Ч1 Ч0 : М1 М0 : С1 С0
secs = myTime % 60;
s1 = secs / 10;
s0 = secs % 10;

mins = (myTime / 60) % 60;
m1 = mins / 10;
m0 = mins % 10;

hours = myTime / 3600;
if (hours == 0) // особый случай
    hours = 12;

h1 = hours / 10;
h0 = hours % 10;
// ШАГ 2
// Кодируем/форматируем переменные выше в «необычный» двоичный вид для сдвиговых регистров
// Для каждого отдельного двоичного числа только один бит может быть в состоянии HIGH (1)
// 44-битный двоичный формат для сдвиговых регистров (Ч1Ч0:М1М0:С1С0):
// (старший бит) XX XXXXXXXXXX XXXXXX XXXXXXXXXX XXXXXX XXXXXXXXXX (младший бит)

// Необходимо отправлять 8-битными порциями
// Нужно последовательно выдвинуть это 44-битное число, по 8 бит за раз
// Отправка начинается со стороны старшего бита (часы)

// кодируем и отправляем данные последовательно
// (но еще не отображаем; это происходит в обработчике прерывания таймера,
// который вызывает latchoutData() и подает импульс на вывод RCK)

// 0-й бит shiftReg подключен к цифре «0» индикатора, и так далее по логике...
bin_hour1 = (unsigned int)pow(2,h1);
bin_hour0 = (unsigned int)pow(2,h0);
bin_min1  = (unsigned int)pow(2,m1);
bin_min0  = (unsigned int)pow(2,m0);
bin_sec1  = (unsigned int)pow(2,s1);
bin_sec0  = (unsigned int)pow(2,s0);

// для надежности, возможно, стоит обернуть этот код с отключением всех прерываний
SSP1BUF = 0b00001111 & (((bin_hour1<<2)&0b1100) | ((bin_hour0>>8)&0b11));
while(SSP1STATbits.BF == 0);
SSP1BUF = bin_hour0;
while(SSP1STATbits.BF == 0);
SSP1BUF = ((bin_min1<<2)&0b11111100) | ((bin_min0>>8)&0b11);
while(SSP1STATbits.BF == 0);
SSP1BUF = bin_min0;
while(SSP1STATbits.BF == 0);
SSP1BUF = ((bin_sec1<<2)&0b11111100) | ((bin_sec0>>8)&0b11);
while(SSP1STATbits.BF == 0);
SSP1BUF = bin_sec0;
while(SSP1STATbits.BF == 0);

RGB-светодиоды, переключатели и поворотный энкодер

Все электронные компоненты и детали, описанные здесь и использованные в проекте, перечислены в списке материалов вверху страницы. Указаны конкретные артикулы и ссылки на Mouser/Amazon.

Я установил шесть SMD RGB-светодиодов Cree CLY6D-FKC-CK1N1D1BB7D3D3 под каждым индикатором для добавления цвета. Так красиво! Поскольку каждый индикатор находится в стеклянной колбе, свет от светодиодов проходит сквозь нее очень хорошо.

Каждый светодиод содержит три независимых кристалла — красный, зеленый и синий. Управляются они кнопочными переключателями с фиксацией. В будущем, возможно, они будут координироваться микроконтроллером с возможностью ШИМ-регулировки яркости.

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

Для управления свечением газоразрядных индикаторов добавился более крупный кнопочный переключатель с фиксацией. Он управляет не всем питанием схемы (12 В), а только напряжением 170 В, подаваемым на аноды индикаторов. Логическая часть схемы при этом остается под напряжением и продолжает отсчет времени — отключаются только сами индикаторы. Светодиодное кольцо кнопки, показанное на схеме ниже, я не задействовал.

Для ручной установки и корректировки времени используется поворотный энкодер (Bourns PEC11R-4015F-S0024) со съемной ручкой, взятой из набора с потенциометром. Энкодер имеет две функции: кнопка без фиксации и непрерывное вращение в обоих направлениях. Нажатие на кнопку энкодера отправляет внешнее прерывание на микроконтроллер PIC, позволяя пользователю вручную установить точное время в несколько шагов:

  1. Часы работают в обычном режиме свободного хода.

  2. Нажимаем кнопку энкодера, чтобы войти в режим настройки, вращением энкодера устанавливаются часы.

  3. Снова нажимаем на кнопку — вращением устанавливаются минуты.

  4. Очередное нажатие — вращением устанавливаются секунды.

  5. Последнее нажатие — возврат в режим свободного хода.

На схеме ниже показана цепь подавления дребезга контактов кнопки и энкодера, состоящая из конденсаторов и подтягивающих/стягивающих резисторов. Она значительно повысила точность срабатывания.

Прототипирование и макетирование

Сначала я собрал на макетной плате схему высоковольтного источника, и она отлично заработала. И на этом этапе я получил свою единственную «травму»!

Наблюдение на осциллографе показало небольшую пульсацию на выходе высокого напряжения — ничего серьезного, всего несколько вольт. Это мелочь на фоне +170 В, но почему-то захотелось сгладить ее высоковольтным конденсатором. Да, он немного ослабил пульсацию, но полностью ее не убрал.

Я решил отказаться от этой затеи и убрать конденсатор, забыв — болван! — что он полностью заряжен до +170 В. Коснулся рукой — и тряхнуло прилично.

Внимание!

Всегда помните, что конденсаторы нужно разряжать через резистор среднего номинала!

Схему и печатную плату нарисовал в EAGLE. Заказ сделал на JLCPCB. Спаял, когда пришли все детали. Плата заработала так же хорошо, как и макет. Готовую плату высоковольтного источника использовал для прототипирования и макетирования основной схемы часов.

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

Соединение сдвиговых регистров, PIC, кнопок и энкодера оказалось довольно простым. Сложность заключалась в программировании PIC и правильном преобразовании «цифрового времени» в 44‑битные двоичные данные для сдвиговых регистров.

Для написания и отладки кода я не использовал газоразрядные индикаторы. Вместо них взял обычные светодиоды для имитации цифр и в итоге отладил код на C для корректной работы со сдвиговыми регистрами.

Принципиальная схема

EAGLE пригодился для создания схемы и пользовательских компонентов, которых не было в библиотеках. Ссылки на сами файлы SCH — вверху страницы. На схеме можно заметить, что добавились два других газоразрядных индикатора в качестве разделителей между разрядами — это неоновые лампочки IN‑3.

Печатная плата

Печатная платы тоже создавались в EAGLE. Ссылки на сами файлы PCB — также вверху страницы. Основная плата часов — двухслойная (верхний и нижний слои с полигонами земли) со скругленными углами (почему бы и нет).

Физические платы заказал в Китае на JLCPCB. У них низкие цены и высокое качество для простых домашних DIY-проектов. Доставка тоже очень быстрая. Настоятельно их рекомендую. Я выбрал красную паяльную маску и не заметил свою опечатку «Enocder», пока платы не приехали.

Корпус, финальные фото и мысли

Пайка всех компонентов не заняла много времени. Самым сложным было вручную припаять мелкие SMD RGB‑светодиоды. Несколько штук процедуру не пережили. Я не стал встраивать индикаторы прямо в плату. Вместо этого припаял отдельные панельки и разъемы Nixie, что позволит в будущем легко менять неисправные индикаторы. Для всех проводных соединений между двумя платами и внешними компонентами использовал винтовые клеммы. Все микросхемы также установил в DIP-панельки, а не впаивал напрямую.

Вся схема питается от обычного сетевого AC/DC‑адаптера с выходом 12 В постоянного тока. Я специально купил адаптер с максимальным током 2 А, предварительно измерив потребление собранной схемы. К схеме он подключается через разъем питания типа «мама» с выводами.

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

Плата высоковольтного источника установлена позади основной — у задней стенки коробки и скрыта от глаз. Основная плата часов также крепится к задней стенке, но на гораздо более длинных стойках, чтобы поднять ее над платой источника питания.

Подводя итог, скажу, что я в полном восторге от этого проекта! Он стал отличным способом отвлечься от аспирантуры и помог углубить знания в различных областях. Я даже использовал этот проект в семестрах, когда преподавал электронику в Техасском университете в Арлингтоне (подробнее об этом — на моей странице «Преподавание»).

Работу над часами я закончил в марте 2018 года, и по сей день (декабрь 2020) они работают отлично. Хотя точность секундного интервала неидеальна и со временем накапливается погрешность, вручную подводить их приходится примерно раз в полгода. Надеюсь повысить точность в следующей версии, добавив микросхему часов реального времени.

Спасибо за внимание! А теперь — самые сочные фотографии готового изделия.

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