Давненько я не делился своими девайсами с общественностью, все как-то времени не было. А тут как раз карантин, две недели незапланированного отдыха и понеслось. Началось все с наведения порядка в закромах и «встрече» с коробкой различных индикаторных ламп, среди которых была вот такая красавица
Звать ее ИВ-18 и является она многоразрядным, люминесцентным семисегментным индикатором. По всем признакам зверек был живее всех живых, к тому же даже не паяный. Что и подтвердилось последующей проверкой. Сразу возникло желание применить данный индикатор. Тем более с таким типом индикаторов я еще не работал. Применить, так применить. Будут из него часы! Что ж, приступим. Для начала немного теории
Управление люминесцентным индикатором мало чем отличается от управления обычным, светодиодным семисегментником. Тот же общий анод, он же сетка, и те же 7 катодов, каждый из которых — сегмент цифры. Разница лишь в том, что требуется подать питание на накал, иначе «кина не будет». Ну и эмиссия электронов идет между катодом и накалом, а сетка как раз таки препятствует свечению. Т.е. для того, чтобы зажечь сегмент требуется подать высокий уровень и на сетку и на катод. Причем уровень этот находится в районе 40-60 В. А вот если соединить сетку с минусом питания, то знакоместо отключится.
С теорией немного разобрались, переходим к практике. По сути требуется управлять 9 сетками и 8 сегментами (элементы цифры+точка), что дает 17 каналов. Далее есть два пути. Первый — ставить 17 (а лучше 34) транзисторных ключа и какой-нибудь сдвиговый регистр, дабы ограничить число используемых выводов МК. Огромный минус такого подхода — целая горсть рассыпухи, которую надо где-то размещать. Второй путь — поставить спец микруху. Поиски на просторах сети показали, что такие микросхемы существуют и звать одну из них MAX6921. Представляет она собой как раз таки сдвиговый регистр с транзисторными ключами на выходе, а этих самых выходов аж 20 шт.
Причем чип может спокойно работать с напряжением до 76 В. Плюс нет абсолютно никаких особенностей работы с ним, что заслали по SPI, то и получили на выходе. Размерность регистра — 20 бит. Т.е. шлем 24 бита, просто данные смещаем с учетом того, что 4 бита в регистр не влезут, а потому и использоваться не будут. Если же есть желание собрать некий мега девайс на люминесцентниках, то микрухи можно еще и включать каскадом, после чего данные будут передаваться между ними по цепочке. Кроме этого, МАХ обзавелась очень полезным входом BLANK, который позволяет перекинуть все выходы в низкий уровень, не трогая при этом содержимое сдвигового регистра. Подаем на этот вход ШИМ и получаем управление яркостью без каких-либо затрат со стороны МК. Выпускаются микрухи как в корпусе побольше — WSOIC, так и в миниатюрном TSSOP. Т.к. TSSOP найти куда сложнее, чем WSOIC. я использовал WSOIC. Тут следует обратить внимание, что распиновка у всех типов корпусов совершенно РАЗНАЯ. Моя схема именно под WSOIC.
Пожалуй, с описательной частью закончим и перейдем к самому интересному — СХЕМАМ! Конструктивно часы состоят из двух отдельных плат, соответственно и схем тоже две. Первая выглядит вот так:
Тут собрано все питание в виде понижающего стабилизатора на 3,3 В (TPS73801) и повышающего на 60 В (MC34063). Драйвера лампы (MAX6921) и кнопок, работают которые с использованием АЦП МК. Сразу сделаю оговорку по поводу примененных элементов. Схема рисовалась с учетом того, что есть в запасе, поэтому часть компонентов будет далека от оптимальных по стоимости. Так TPS73801 спокойной заменяется на ту же LM1117-3.3, катушка в повышайке будет работать практически любая, лишь бы индуктивность совпадала и ток был хотя бы 1 А. Силовой транзистор тоже легко заменяется на MOSFET с напряжением открывания в районе 4 В и током 1-2 А. Выходные конденсаторы повышайки так же можно заменить на обычный электролит или керамику с емкостью 22-47 мкФ и рабочим напряжением от 70 В.
Как видно из схемы, накал питается постоянным током. В данной лампе от как раз рассчитан на напряжение 5 В. Хотя накал таких ламп желательно питать переменным током, во избежании появления градиента яркости между первым и последним разрядом в следствии большой дины нитей накала, эксперименты показали, что все разряды сохраняют абсолютно одинаковую яркость при питании накала постоянным током.
Схема второй платы не намного сложнее.
Тут расположились МК (STM32F303, опять же можно заменить на 103 серию, изменив прошивку), I2C EEPROM, RTC, датчики освещенности и температуры. В качестве датчика освещенности выбран фототранзистор SFH 3310, причем исключительно из-за формы корпуса. Плоская, прозрачная линза диаметром 3 мм практически не видна на стенке корпуса. Но фотрезистор будет работать тут ничуть не хуже. Датчик температуры применен аналоговый AD22100. По стоимости он не сильно превосходит тот же DS18b20, но вот работать с ним гораздо проще, просто оцифровываем напряжение на выходе и по формуле переводим в градусы. Главное обеспечить либо стабильное питание 5 В, либо измерение напряжения питания датчика (что мне и пришлось сделать, но об этом чуть позже). Кроме этого на плате присутствует выход для подключения адресных светодиодов, но в итоге я его не использовал, как и USB.
Все элементы размещаются на двухсторонних платах. Сами платы были заказаны в Китае, запаяны, и выглядят вот так:
Соединение между платами выполняется при помощи шлейфа. Контактов не так уж и много. Питание 5 В и 3,3 В, GND, BLANK и SPI. Питается девайс от 5 В, потребляя при этом около 400 мА. Что позволяет получать питание от обычного USB2.0 или самого дешевого ЗУ для телефона. НА МК заведены и линии данных USB, но я так и не придумал, что можно слать в часы с ПК, поэтому в прошивке USB не реализован. Если кто придумает что-то интересное — пишите в комментах к статье, реализую =)
Завелось все с первого же раза и почти сразу обнаружилась небольшая недоработка в части измерения температуры. Я совершенно забыл, что с разными кабелями и на разных USB разъемах будет разное напряжение, а значит и измерения будут плавать, т.к. датчик питается от 5 В. Выход — замерять напряжение питания по линии 5 В. Так совпало, что выход для возможного подключения WS2812 так же является входом АЦП. Чем я и воспользовался, выпаяв буфер D6 и установив вместо него делитель. В итоге температура измеряется совершенно нормально и плату перезаказывать не пришлось. Схематически это выглядит вот так:
Лампа ИВ-18 подразумевает применение динамической индикации. В проекте частота переключения знакомест выбрана равной 1000 Гц. В промежутках между выводом информации выполняется регулировка яркости текущего знакоместа путем подачи ШИМ на вход BLANK. Соответственно яркость каждого знакоместа может изменяться независимо. Алгоритм индикации довольно простой: послать данные по SPI и изменить значение ШИМ. Частота же выбрана из соображение отсутствия видимого мерцания. Т.к. обновлять необходимо 9 разрядов, частота обновления каждого разряда будет в 9 раз меньше частоты вывода информации, т.е. немногим больше 100 Гц.
Собранные платы, конечно, вещь хорошая, но вот пользоваться часами в таком виде совершенно неудобно. А значит нужен корпус, благо, нынче получить его не так уж и сложно. Открываем SolidWorks, или что-то аналогичное, и начинаем думать. На этом этапе проявляются плюсы разработки плат в профессиональном ПО, типа Altium и т.п.. В отличии от простецких программ оно позволяет выгрузить 3D модель собранной платы, что сильно помогает при проектировании корпуса. После пары вечеров раздумья родилась вот такая модель:
И еще пара вечеров ушла на отрисовку гравировки на боковых стенках. В качестве материалов были выбраны дерево и латунь. Далее все детали модели, кроме трубок, отправляются в мастерскую (я пользуюсь услугам вот такой), где при помощи черной и белой магии ЧПУ станков их вырезают из указанных материалов. Результатом работы становится горсть деталей:
Приступаем к сборке. Весь корпус собирается в единое целое при помощи трех резьбовых шпилек М4, которые проходят сквозь трубки и отверстия в деревянных боковинах, после чего фиксируются гайками. Через четвертую трубку проходит шлейф, соединяющий две платы между собой. Идеально подошел шлейф с шагом 0,5 мм. Сам платы устанавливаются в деревянных боковинах. Боковые крышки ничем не фиксируются и держатся лишь за счет силы трения. В собранном виде часы приобретают вполне юзабельный вид:
Снизу приклеиваются силиконовые ножки:
А вот так выглядит фотодатчик, если не присматриваться, сразу и не заметишь:
Функционал часов стандартный:
- Отображение времени.
- Отображение даты.
- Отображение температуры.
- Автоматическая регулировка яркости в зависимости от освещенности.
От каких-либо украшательств в виде подсветки и т.п. решил отказаться в пользу более строго внешнего вида.
Управление осуществляется при помощи 4 кнопок: ENTER, UP, DOWN, BACK; При нажатии кнопок UP и DOWN на экран выводятся, соответственно дата и температура на 2 с. Краткое нажатие ENTER переключает режимы отображения информации, которых в часах 4 шт:
- Время.
- Время + Дата.
- Время + Температура.
- Время + Дата + Температура.
Удержание ENTER более 2 с вызывает настройки времени и даты. Настройка выполняется в порядке: Часы, Минуты, День, Месяц, Год. Переход по настройкам осуществляется нажатием ENTER, настройка выбранного параметра кнопками UP и DOWN. Запись установленного времени осуществляется при переходе с настройки минут на настройку даты. Дата записывается при нажатии ENTER после установки года. Нажатие кнопки BACK приводит к выходу из меню настроек без сохранения установленных параметров.
Вот и весь функционал. Как по мне, для часов более чем достаточно. На этом у меня все. Видео работы, проекты Altium и Keil прилагаются.
P.S. Если появится желание повторить данный проект, но с применением более доступных элементов — пишите в комментах к статье, отредактирую плату под ваши элементы.
P.P.S Если кого-то заинтересовал процесс прорисовки корпуса в SolidWorks, аналогично, пишите в комментах. Могу написать небольшой цикл статей по работе с данным ПО.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот | |
---|---|---|---|---|---|---|---|
Плата с лампой | |||||||
C1 | Конденсатор | 1 мкФ | 1 | 0603 | |||
C2, C3 | Конденсатор | 0,1 мкФ | 2 | 0603 | |||
С4 | Конденсатор | 4,7 мкФ | 1 | 0805 | |||
C5 | Конденсатор | 100 мкФ | 1 | Тантал тип D | |||
C6, C7, C8, C9 | Конденсатор | 0.1 мкФ | 4 | 0603 | |||
C10 | Конденсатор | 1 мкФ | 1 | 0603 | |||
С11 | Конденсатор | 10 мкФ | 1 | 1206 | |||
С12 | Конденсатор | 0.1 мкФ | 1 | 0603 | |||
С13 | Конденсатор | 460 пФ | 1 | 0603 | |||
C14, C15 | Конденсатор | 47 мкФ | 2 | EEEFP1V470AP | |||
D1 | Драйвер индикатора | MAX6921 | 1 | WSOIC | |||
D2 | Линейный регулятор | TPS73801 | 1 | ||||
D3 | DC/DC импульсный конвертер | MC34063A | 1 | SOIC | |||
L1 | Катушка индуктивности | 33 МкГн | 1 | IHLP3232CZER330M11 | |||
R1 | Резистор | 22 Ом | 1 | 0603 | |||
R2 | Резистор | 10 кОм | 1 | 0603 | |||
R3, R4 | Резистор | 4.7 кОм | 2 | 0603 | |||
R5, R6 | Резистор | 1 Ом | 2 | 1206 | |||
R7 | Резистор | 47 кОм | 1 | 0603 | |||
R8 | Резистор | 1 кОм | 1 | 0603 | |||
R9 | Резистор | 1 Ом | 1 | 1206 | |||
R10 | Резистор | 4.7 кОм | 1 | 0603 | |||
R11, R12, R13 | Резистор | 22 Ом | 3 | 0603 | |||
R14 | Резистор | 4.7 кОм | 1 | 0603 | |||
R15 | Резистор | 2.7 кОм | 1 | 0603 | |||
R16, R17 | Резистор | 4.7 кОм | 2 | 0603 | |||
R18 | Резистор | 1 Ом | 1 | 1206 | |||
R19, R20 | Резистор | 330 Ом | 1 | 0603 | |||
R21 | Резистор | 1 Ом | 1 | 1206 | |||
R22 | Резистор | 560 Ом | 1 | 0603 | |||
R23 | Резистор | 470 Ом | 1 | 0603 | |||
R24 | Резистор | 10 кОм | 1 | 0603 | |||
S1, S2, S3, S4 | Кнопка | KLS7-TS6606-7.0-180 | 4 | ||||
VD1, VD1, VD3 | Светодиод | Зеленый | 3 | 0603 | |||
VD4 | Диод Шоттки | B340A | 1 | ||||
TUBE | ИВ-18 | 1 | |||||
X1 | Розетка | MiniUSB | 1 | ||||
X2 | Вилка | PLS-10. 2.54 | 1 | ||||
Плата с контроллером | |||||||
C1 | Конденсатор | 1 мкФ | 1 | 0603 | |||
C2 | Конденсатор | 0.1 мкФ | 1 | 0603 | |||
C3 | Конденсатор | 1 мкФ | 1 | 0603 | |||
C4 | Конденсатор | 0.1 мкФ | 1 | 0603 | |||
C5 | Конденсатор | 4.7 мкФ | 1 | 0805 | |||
C6 | Конденсатор | 0.1 мкФ | 1 | 0603 | |||
C7 | Конденсатор | 0.1 мкФ | 1 | 0603 | |||
C8, C9 | Конденсатор | 1 мкФ | 2 | 0603 | |||
C10, C11 | Конденсатор | 0.1 мкФ | 2 | 0603 | |||
C12 | Конденсатор | 1 мкФ | 1 | 0603 | |||
C13, C14 | Конденсатор | 22 пФ | 1 | 0603 | |||
C15 | Конденсатор | 4.7 мкФ | 1 | 0805 | |||
C16, C17, C18, C19 | Конденсатор | 0.1 мкФ | 4 | 0603 | |||
C20 | Конденсатор | 10 мкФ | 1 | 1206 | |||
C21 | Конденсатор | 1 мкФ | 1 | 0603 | |||
C22 | Конденсатор | 0.1 мкФ | 1 | 0603 | |||
C23, C24 | Конденсатор | 10 мкФ | 2 | 1206 | |||
D1 | Датчик температуры | AD22100ST | 1 | ||||
D2 | EEPROM | 24LC128 | 1 | ||||
D3 | Часы реального времени (RTC) | DS3231 | 1 | ||||
D4 | Сборка защитных диодов | USBLC6-2SC6 | 1 | ||||
D5 | МК STM32 | STM32F303CB | 1 | ||||
D6 | ИС буфера, драйвера | SN74LVC1G17 | 1 | ||||
L1, L2 | фильтры подавления ЭМП | BLM21PG331SN1D | 2 | 0805 | |||
R1 | Резистор | 20 кОм | 1 | 0603 | |||
R2 | Резистор | 4.7 кОм | 1 | 0603 | |||
R3 | Резистор | 2.2 кОм | 1 | 0603 | |||
R4 | Резистор | 4.7 кОм | 1 | 0603 | |||
R5 | Резистор | 2.2 кОм | 1 | 0603 | |||
R6 | Резистор | 4.7 кОм | 1 | 0603 | |||
R7, R8 | Резистор | 470 Ом | 2 | 0603 | |||
R9 | Резистор | 1.5 кОм | 1 | 0603 | |||
R10, R11 | Резистор | 10 кОм | 2 | 0603 | |||
R12 | Резистор | 220 Ом | 1 | 0603 | |||
VD1, VD2 | Светодиод | Зеленый | 2 | 0603 | |||
X1, X2 | Вилка | PLS-3. 2.54 | 1 | ||||
X3 | Вилка | PLS-10. 2.54 | 1 | ||||
ZQ1 | Кварцевый резонатор | ABM8-12.000 МГц | 1 | ||||