В продолжение знакомства с LaunchPad mps430 предлагаю статью о восстановлении работоспособности старых настенных маятниковых часов.
Попались в руки старые маятниковые настенные часы с боем 1952 года выпуска. Механизм имел следы ремонта и представлял собой неутешительное зрелище. В часах подобного класса, в отличии от наручных механических, оси шестерён вращаются не в камнях (рубинах) а в отверстиях латуневых пластин. Это при продолжительной работе и отсутствии регулярной смазки, приводит к увеличению люфта шестерни в посадочном месте. Люфт накапливается пропорционально количеству шестерней, и часы, в конечном итоге, перестают ходить. Как это лечится по-науке, я не знаю, но на моих часах остались следы от керна в районе посадочных мест, таким образом, видимо, пытались уменьшить диаметр раздолбаных отверстий. В общем, восстанавливать полностью механический ход я не стал.
Было решено заменить пружинный ход на электромеханический с сохранением прежнего функционала, а именно, отображения времени и боя, а также добавить новые фичи.
Для работы нам понадобятся: пара шаговых моторов от принтера, RTC, контроллер, ключи для управления моторами, ионистор для хранения параметров и отсчёта времени при отсутствии наличия внешнего питания ну и по мелочи…
Механически это выглядит следующим образом:
Изначально часы имели 2 пружины, одна ходовая, вторая для боя, маятник, обеспечивающий точность хода и проч. После извлечения ненужных деталей модернизации осталось минутная и часовая шестерня + ходовой шаговик, а также несколько шестерней, молоточки и шаговик, управляющий боем. На картинке сверху ходовой мотор, снизу — «боевой». Отдельная пляска с бубном получилась при вычислении количества шагов ходового мотора для перемещения стрелки на 1 минуту. Так как производители принтеров не учитывают передаточные числа шестерен старых советский часов (я использовал шестерни, посаженные на валы моторов производителями принтеров), получилось, что для перемещения стрелки на минуту обычно нужно 14 полушагов, а каждую 25-ю минуту — 16 полушагов, чтобы со временем показания не уплывали. С боем проще. Для удара было нужно 3 оборота мотора (576 полушагов).
Вот еще картинка:
Далее электроника.
Вот схема:
В качестве RTC заказал на ebay дословно Extremely Accurate I²C RTC, что в переводе означает «ужасно точные». Ужасная точность по даташиту определяется встроенным кварцем и датчиком температуры, который подключает/отключает к/от кварцу корректирующие емкости. В принципе при проверке точности хода, я остался доволен результатом. За неделю не заметил ухода более секунды.
Контроллером служит наш любимый msp430g2553, старший из набора launchpad от TI. Он несёт на борту 2 аппаратных последовательных интерфейса, один из них будет общаться с RTC по I2C, второй сыпать отладочную информацию на комп через RS232.
Моторы слаботочные (не то, что не точные, а то что потребляют мало тока), для управления вполне подойдёт 7-ми канальный транзисторный модуль ULN2003A. Правда надо 8 каналов, но в волшебном сундучке не было других модулей, поэтому 8-ой канал собрал на на транзисторе BC547C и паре диодов Шоттки, защищающих от обратной индукции. На проверку оказалось, что для питания моторов вполне достаточно 5В.
На 34063 собран DownStep DC-DC преобразователь напряжения из 5 и выше (в разумных пределах) до 3.3В для притания RTC и msp430.
В качестве органа управления был ампутирован механический энкодер из тела старой почившей магнитолы. на схеме он показан как 2 кнопки в круге (сам энкодер). Также задействована его центральная кнопка. Для подтяжки его выходов к питанию, будем использовать внутренние резисторы msp430.
Для обратной связи (реакция на управление) добавим светодиод.
Тут пора описать задуманную фичу. RTC имеет встроенную память, хранимую от батареек, и доступную как другие регистры через I2C. Идея следующая. Так как ходовой мотор у нас шаговый, можно, зная точку отсчёта, понимать в каком положении находятся стрелки в данный момент и хранить это положении в памяти RTC. При отключении внешнего питания, RTC продолжает отсчитывать время и хранить данные о последнем положении стрелок. При возвращении питания, мы берем старое положение из памяти, текущее время, считаем разницу, и подводим стрелки до текущего времени. Т.е. получаются часы с автоподводом.
Точка отсчета задаётся установкой стрелок в положенее 12:00 и продолжительным нажатием центральной кнопки энкодера.
Далее энкодером осуществляется установка текущего времени и в начале шестого сигнала, кратковременным нажатием центральной кнопки осуществляется синхронизация (часы связывают текущее положение стрелок и внутренним временем RTC).
Вот видео получасового боя и работы энкодера:
После этой процедуры мы имеем полное право осуществлять звуковое сопровождение хода, а именно бой. Каждый час будем бить соответствующее количество раз, каждые полчаса 1 раз, но с бОльшей скоростью. Собственно, 1 удар на самом деле является ударом одного молоточка и последующим ударом еще двух. На видео слышно.
Для осуществления качественного боя, нам также надо знать относительное положение главной шестерни, которая управляет молоточками. Для этого при включении питания осуществляем «парковку». Крутим мотор боя в обратную сторону до упора. Благо, мотор слабый, и при достижении этого упора, начинает просто жужжать. После чего, эмпирически полученным количеством шагов выводим «боевую» шестерню на нужное положение.
Плата сделана ЛУТом отчасти. Еслиб не SOIC корпус RTC, делал бы на монтажке как обычно. А так, оставил место под рассыпуху, вот что получилось:
обратная сторона:
Программа написана на C под CCS5
Вот исходники:
Картинку надо открыть winrar-ом.
Стилистика часов, за исключением ампутации маятника, сохранена.
Итог:
1. Оживили старые часы
2. Добавили новых фич
3. Прокачали механику, электронику и кодинг.
Автор: shtirlitsus