Игрушка-самоделка на выходные: винтажный электронный термометр

Оригинал взят у bigmaxx в Игрушка-самоделка на выходные: винтажный электронный термометр


Из всех «винтажных» типов индикаторов и дисплеев мне больше всего нравятся VFD. Их мягкое и ненавязчивое сине-зелёное свечение, отличающееся четкими контурами равномерно-ярких графем, ассоциируется с электроникой, производившейся в 70-е – 90-е годы прошлого века в Японии и имевшей безупречную репутацию по надежности и качеству.

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

С давних пор в груде электронного старья у меня в гараже лежал комплект плат от ушедшего в утилизацию монструозного скоростного копира CANON, произведенного в конце 80-х и залетевшего в нашу страну лет 25 назад. В современных устройствах подобного класса оперативная индикация выполняется на стандартном цветном дисплее, иногда с тачскрином, и напоминает привычный ныне планшет. Здесь же для этого использовалось аж три кастомных платы, с двумя VFD дисплеями и кучей сложно расположенных кнопок и светодиодов для подсветки мнемосхемы механизма. Этим хозяйством управлял 8-разрядный микроконтроллер NEC uPD7811G – вполне достойный для конца 80-х мозг: 10 МГц, RAM 256, ROM 4K, один 16-битный и два 8-битных таймера, 8-битный АЦП, два компаратора, USART… Все это с шиной 8085 и системой команд Z80.

Ну и как было выбросить такое великолепие? Отложил, в надежде так или иначе его когда-нибудь задействовать.



В эти выходные руки дошли лишь до скромного 3-разрядного семисегментника, исходно отображавшего количество копий. Так что, как видим, на его месте теперь дырка) Второй VFD, шикарный 40-символьный индикатор – остался ждать своего часа.



Что же можно индицировать тремя семисегментными цифрами, без десятичных точек и разделительных символов? У меня как раз на днях отвалился и упал куда-то в сугроб с 7 этажа старый спиртовой уличный термометр, так что – температуру! Конечно, за несколько сотен руб можно купить китайский цифровой градусник на батарейках, с выносным датчиком. Но тусклый, малоконтрастный ЖК-дисплей, к которому надо подходить вплотную, чтобы что-то на нем разобрать? Фу, какая гадость!

Перфекционистов должен предупредить, что практикуемая мною нынче методика изготовления электронных поделок – чистый трэш и партизанщина. Я не рисую красивых 3D картинок будущих изделий, и вообще практически не разрабатываю заранее конструктив, ограничиваясь принципиальными и монтажными схемами. Покупку компонентов стараюсь свести к минимуму, а вторичное использование разного электронного хлама – наоборот, максимизировать. Печатные платы делаю только при крайней необходимости, собственной их разработкой озадачиваюсь, если изделий требуется много больше одного. В общем, универсальные «печатки», провод МГТФ, термоусадка, термоклей – вот это всё…

На фирменной плате интересующий меня VFD был смонтирован на пластиковой подложке, с обратной стороны установлены две микросхемы 7-канальных драйверов. Конструктив надежный; плата двухсторонняя с металлизацией отверстий, отличного качества. Так что просто аккуратно выпиливаем из неё кусок с VFD и драйверами! Потом подпаяем провода с нужными сигналами к проводникам на плате или прямо к выводам драйверов; благо они в корпусах DIP-16.

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

Накал
VFD – не что иное, как электровакуумная лампа-триод, или чаще, набор триодов с общим катодом, но несколькими сетками, каждая из которых управляет током между катодом и группой анодов. Катод – одна или несколько нагретых нитей, излучающих электроны; аноды покрыты люминофором и светятся под их ударами.



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

Проблема в том, что каждому VFD требуется собственное напряжение накала, зависящее от длины, количества и номинального тока нитей катода. Но обычно оно лежит в пределах от 1 до 12 вольт. В упомянутой статье описан несложный метод его экспериментального определения; и он, как выяснилось, прекрасно работает! У моего VFD напряжение накала оказалось 1,5 вольта при токе около 100 мА. Выделяемая на катоде мощность (0,15 Вт) существенного нагрева корпуса VFD создать не сможет.
Ныне, когда НЧ трансформаторы питания ушли в прошлое, катод VFD обычно включают по следующей схеме:



Как видим, накал здесь питается от мостового драйвера. Общий провод мостовой схемы смещен относительно среднего потенциала катода «в минус» на половину напряжения питания моста; это как раз тот уровень, который следует подавать на сетки и катоды для надежного гашения индикации, то есть, минусовая линия питания драйвера анодов и сеток. Частоту f переключения полярности моста можно менять в широких пределах: от нескольких десятков герц и выше: поскольку обычно используется динамическая индикация, лучше, чтобы она была кратна частоте её обновления.

Низкое напряжение 1,5В создает проблему КПД мостовой схемы и её питания. По-хорошему, тут бы нужен MOSFET драйвер и напряжение пониже; но мне, исходя из изложенных выше принципов, показалось куда проще выдрать из какой-то старой платы обычный мост L293, запитать его от 5В и использовать последовательные резисторы для получения нужного тока накала. Заодно пригодился и второй мост; на его половине сделал инвертор. Из-за падения напряжения на этих резисторах и биполярных транзисторах моста, схема накала в таком варианте потребляет более 0,5 Вт. Ну и фиг бы с ним, VFD – решение не для батарейного питания!

Отдельной платы для драйвера накала решил не делать: тупо приклеил термоклеем L293 к плате VFD на свободное место и сделал разводку навесным монтажом. Резисторы для цепи накала напаял на имевшуюся печатную дорожку, процарапав в ней разрывы. На фото ниже виден участок обратной стороны платы VFD с этими резисторами и одной стороной L293.



Напряжение питания и управление индикацией на VFD
Как правило, анодное напряжение VFD выбирают не менее 12 В. Если же используется динамическая индикация с большой скважностью – то еще выше, до 30 В. Для управления анодами и сетками требуется высоковольтные «верхние» ключи. Эти требования были прекрасно совместимы с древними p-MOS чипами с металлическими затворами и высоковольтным отрицательным питанием, вроде 145-й серии; но сейчас совсем другие времена, и даже 5-вольтовые схемы иногда приходится сопрягать с процессорами на 3 В.

Этот VFD, как и большинство, рассчитан на использование динамической индикации; так что одноименные знакосинтезирующие сегменты-аноды всех разрядов соединены внутри индикатора. Для управления нашим VFD требуется 10 линий: семь анодов и три сетки. Так что, из имеющихся 14 каналов драйверов четыре не используются. Один из них понадобится нам впоследствии для преобразования уровня сигнала управления полярностью накала.

Итак, что у нас с управлением анодами и сетками? Смотрим даташит на используемые драйверы NEC uPA80C: ага, это высоковольтные ключи на биполярных транзисторах с положительным «общим проводом» и отрицательным напряжением питания. Вся необходимая обвязка интегрирована, в том числе резисторы, при закрытом ключе «притягивающие» нагрузку – аноды и сетки – к минусовой линии питания. Для открывания «верхних» ключей надо подавать на входы драйверов отрицательные TTL-уровни. Эта особенность задает не слишком удобную схему питания всего устройства: «плюс» питания контроллера, управляющего анодами и сетками VFD, должен быть соединен с «плюсом» питания анодных ключей. Так что использовать для питания контроллера то же напряжение 5В, что и для мостового драйвера накала, не удастся.

К счастью, есть такая простая и удобная вещь, как DC-DC преобразователи с развязкой. Их можно совершенно бесплатно надергать из древних 10-мегабитных сетевых карт с BNC-разъемами! Там они делают 9 вольт из 5; правда, эти 9В не очень-то стабилизированные, а без нагрузки – на выходе все 12В! Но у VFD нет особых требований по точности и стабильности питания...



У меня завалялось несколько вот таких симпатичных платок от какого-то древнего роутера. Выдираем оттуда пару DC-DC; включив их по входу параллельно, а по выходу последовательно, получим из «накальных» 5В искомое анодное напряжение 18В. Половину этого напряжения (от точки соединения выходов DC-DC) подаем на стабилизатор 79L05 и, таким образом, получаем 5-вольтовое питание для контроллера, соединенное своим плюсом с анодным напряжением. Получившаяся в итоге схема питания и индикации прибора приведена ниже.



Датчик
Какой же термометр без собственно датчика температуры? Тоже имеется некая старая плата, а на ней AD7414 – вполне подходящая для наших целей микросхема с I2C интерфейсом: точность 0,5 градуса в диапазоне от -40 до +125. Выпиливаем кусочек платы с датчиком (он мелкий!) и установленным рядом керамическим конденсатором по питанию, подпаиваем провода стандартного 4-проводного Ethernet кабеля, засовываем всё это в алюминиевый корпус от электролитического конденсатора и заливаем термоклеем (впрочем, лучше бы эпоксидкой).



Вуаля, выносной «уличный» датчик готов! У него приличная тепловая инерция; но для измерения температуры за окном это даже неплохо. Кабель делаем длиной не более полутора метров (I2C вообще-то внутриприборный интерфейс), и обжимаем на его конце стандартный телефонный разъем.

Контроллер
Контроллер – наименее специфичная часть конструкции. Можно использовать мини-плату на любом AVR с достаточным числом выводов, но её пришлось бы покупать… А у меня со старых времен завалялось несколько вот таких самодельных платок с симпатичными, но уже ушедшими в историю контроллерами Motorola 68HC908JK3.



Платку пришлось подрезать по размерам и слегка там кое-что перепаять; в итоге получилась вот такая схема контроллера:



8-разрядное семейство 68HC908 имело классическую фон-неймановскую CISC архитектуру с идеологией и системой команд, близкой к знаменитому некогда процессору 6502. У него удобный, богатый и легко понимаемый ассемблер; единственный аккумулятор – зато 256 байтов на «нулевой» странице RAM с быстрой адресацией, которые с успехом заменяют пресловутый «регистровый файл». Тактовая частота до 8 МГц – но команды выполняются за 1-4 такта. Флэш-память; встроенная периферия, не уступающая AVR; и что важно – встроенный монитор, позволяющий программировать (и отлаживать!) систему через COM-порт с помощью несложного открытого интерфейса, не требующего, в отличие от программаторов/отладчиков AVR, никаких собственных процессоров.



Со времен расцвета этого семейства у меня сохранилась вот такая интерфейсная плата, а также лицензия на весьма серьёзную среду программирования/отладки – Metrowerks Code Warrior; не хуже этих ваших Кейлов с ИАРами! Короче, Америка, Америка…

Софт
Ассемблер у Моторолы был замечательный, но всё же основную часть программы пишем на C: это быстрее. Функции для программной реализации I2C-мастера у меня, правда, есть готовые, ассемблерные. Между нами говоря, это мой первый опыт разработки программы на C для HC908 и в Code Warrior; раньше обходился ассемблером, да и было это давно...

Наш VFD требует динамической индикации на 3 разряда; организуем её с помощью прерывания по переполнению таймера. Частоту обновления индикации выбираем 60 Гц, так что требуемая частота следования прерываний – 180 Гц. В каждом третьем прерывании, т.е. также с частотой 60 Гц, меняем полярность напряжения накала. Единственную кнопку управления опрашиваем в том же прерывании, но с частотой 30 Гц, что гарантирует подавление дребезга (эта кнопка – если ещё соберусь её приделать – будет циклически переключать уровни яркости). И в прерывании же инкрементируем программный таймер опроса датчика; опрос выполняем раз в 5 секунд.

Закладываем в программу возможность управления яркостью индикации с помощью ШИМ (изменением скважности разрешающих импульсов на сетках); для гашения по сетке используем прерывание от канала 1 того же таймера в режиме Output Compare.
Ну, округление показаний датчика до целого числа градусов, преобразование из двоичного значения в десятичное, выборка графемы из знакогенератора – стандартные задачи.

Обработка исключений и ошибок – та часть программы, которую часто забывают реализовать как следует. А зря. В данном случае возможных исключений немного: отсутствие либо неисправность датчика (тайм-аут I2C) и некорректная информация от него. Для индикации кодов ошибок используем нереальные значения температуры, например, начиная с -99. Также для повышения надежности обязательно используем Watchdog и LVI, благо наша примитивная программа не содержит какого-то сложного набора состояний, требующих обработки при внезапном рестарте.

Корпус
Для кого как, а для меня самая муторная часть в любой электронной самоделке – заключение её в корпус. Вот ведь всё уже работает-крутится, и что ещё нужно? Так нет же, корпус подавай!

К счастью, у меня нашелся корпус от сгоревшего блока питания, точь-в-точь подходящий по поперечному сечению под размер индикатора. Правда, более половины его длины пришлось отрезать и отложить на другие конструкции) Поскреб по сусекам в поисках разъемов – нашел всё необходимое. Немного пилильно-сверлильных работ, несколько винтиков-гаечек на М2, неизменный спасительный термоклей – и девайс заключен в корпус. По мне, так он выглядит красивее без всякого покровного стекла спереди – но ведь прибор будет пылиться! Ладно, потом что-нибудь туда приделаю!






Остаётся только надеть спереди тёмное стекло, чтобы повысить контрастность дисплея - в нынешнем виде при внешней засветке сложно что-либо прочитать. А когда есть тёмное стекло, внешний свет должен пройти один раз, отразиться от сегментов, пройти второй раз, каждый раз затухая, в то время как собственное свечение проходит только один раз и затухает не так сильно! Тогда индикация очень надёжная, многие экраны смартфонов нервно курят в сторонке.
Срочно ставим темные стекла на экраны смартфонов!
Такие вещи очень сложно снимать фотоаппаратом. В реальности все очень четко выглядит.
класс!)
особенно выбор процессора
и особенно спасибо за накал для индикатора - я бы стал транс лепить
Да
у меня валяется несколько VFD и даже специальный чип-драйвер сегментов
осталось придумать, куда бы их
Класс! Особенно порадовала идеология автора. До этого я думал, что я один такой Плюшкин
Я часы, помню, на ИН-14 сделал. Кварц смог достать только на 10 мГц, так что пришлось 7 микросхем поставить чтобы поделить. Зато как секунды красиво вглубь лампы удалялись))
:) Доктор Штайн полагаю? Франкен Штайн ;)
А солнцем датчик не греется?
А солнцем датчик не греется? А то у меня 1-wire датчик, даже отнесённый от стены дома на 0.5 метра, закреплённый на тросик в центре пластиковой трубы (замотанной в зеркальный скотч) - даёт вполне видимые на графике 2 - 3 градуса в плюс, когда солнце есть.
Re: А солнцем датчик не греется?
Конечно, будет греться, если для этого есть условия. Но я решил не париться конструкцией, подобной описанной вами, а тупо сделать 2 датчика - на западном и восточном окне, и при необходимости переносить девайс). Если стена дома греется солнцем (или отоплением, как сейчас) - её влияния тоже трудно избежать. А вообще, у нас в пределах 400-тысячного города температура гуляет на несколько градусов; так что "объективных показаний" не существует как таковых...
Шурупы "под шлиц" - винтажненько :-)))
такие и не найти сейчас.

У меня десяток индикаторов подобных, никак не решался что-то сделать.
Спасибо за идею с накалом и DC-DC от сетевух.
Это винты на M2. А винтажный там - разъем, который они крепят. Такие ещё при СССРе в радиомагазинах продавались)

Edited at 2017-02-03 03:59 am (UTC)