Нет-нет, речь не пойдёт о том, чтобы засунуть палец в розетку и тем самым закончить бренное существование :). Речь пойдёт о банальном watchdog, он же "сторожевой таймер".
Статус: Проект в разработке. Модель готова.
Цель проекта: Как в большинстве моих недавних проектов, речь пойдёт об удалённом использовании компа или роутера. Увы, техника несовершенна и порой удалённый комп по той или иной причине зависает. Его приходится перегружать. И если это делать руками, то порой случается казус что зависло то, чем ты хочешь перегрузить этот комп (а оно перегружалось с этого компа) :). Да, бывает это редко, но именно это "редко" случилось нынче в моей удалённой обсерватории, блин... Так что я, пока ехал в метро, накидал проект usb-розетки-watchdog, которая поможет мне решить проблему зависшего железа.
Структура проекта глобально:
Как работает устройство? Комп (или роутер) включен в эту самую розетку. По включению устройства питание на розетку сразу подаётся. Комп так же подключен по USB к "розетке" и раз в минуту (или чаще, но не реже чем раз в... ну, допустим 5 минут (время задаётся) шлёт ей сигнал "я живой!!!". Если сигнал не получен те самые пять минут, устройство вырубает комп и через 15 секунд включает, тот снова заводится и, надеюсь загрузившись, продолжает радостно служить хозяину.
Изначально хотел обойтись без блока питания процессора, построив всё по схеме:
- USB процессор (at90usb162) с питанием от USB;
- твёрдотельное реле на ноге процессора, коммутирующее 220В;
- силовое 220В реле, коммутирующее до пары ампер по 220В.
Да только понял, что во время отключения компа отключится и USB. Что приведёт к сбросу устройства в исходное состояние. Ха. Придумал. state можно хранить в еепром и по перезагрузке знать что происходило до неё, продолжать с того же места. Но .... как это повлияет на надёжность системы? Если питать внешним БП, такой проблемы нет и стабильность 100%. Требует изучения в следующей версии.
Поэтому сейчас пришёл к решению использовать дополнительный БП на 5В или 12В плюс L7805 для питания проца, смотря какое реле поставлю. То есть, схема стала такой:
- БП процессора и ключа реле;
- USB процессор (at90usb162);
- оптопара... чьёрт. Нужен ещё один БП ключа на ключ реле :)))))
- силовое 220В реле, коммутирующее до пары ампер по 220В.
После небольших двухэтапных раздумий, спасибо Кириллу (malice) за верную мысль, пришёл к следующей структуре:
- USB-процессор (at90usb162);
- твердотельное реле на ноге проца
---------
Схема:
[потом обязательно нарисую.]
Печатная плата:
[пока на макете всё. Но плату обязательно буду заказывать. Сейчас общаюсь с китайцами.]
[картинки компонент]
Программная часть:
Состоит из двух частей. Это часть на компе. Есть под винду, есть под линь.
Часть на мк (firmware) сделал через WinAvr с использованием примера RAW HID проекта Teensy USB Development Board.
[Протокол в разработке]
[Код выложу здесь: http://oleg.milantiev.com/projects/]
Включает в себя: [как сделаю..]
- WinAvr: проект. Часть на МК;
- c-sharp: проект в MS Visual Studio 2010 и gcc под линь;
- Proteus: упрощённая схема и эмуляция в Proteus;
- Sprint Layout: схема в формате Sprint Layout 5.0 и картинки цоколёвки компонент.
Готовое изделие:
[Пока нет]
-------
черновик
watchdog
схема:
- бп 5в проца
- проц с usb.
- твердотельное реле
- силовое реле 220в.
алгоритм:
- прикидывается hid.
- обменивается пакетами = сброс счетчика.
- если счетчик достиг значения (eeprom), переключение реле на 15 сек.
протокол:
- w: watchdog: пинг пакет.
- r: reset: самоубийство :)
-s: set: запись max wd в eeprom.
-0: off: выключение контроля (индикация красным)
-1: on: включение
сценарий:
- включил розетку. есть eeprom минут до сброса (2 времени загрузки на нтфс/zfs).
- комп грузится за ~1*время загрузки. начинает слать keepalive. рабочий режим.
- повис: через eeprom время розетка сбросит комп. надеюсь, загрузится. если нет, будет перегружен еще раз. сделать ли счетчик-ограничитель и сигнал на "умный дом"?
- перезагрузка по моей инициативе: укладывается в еепром время. keepalive возобновляются.
- выключение: сбросится через еепром время :) нужна команда выключения проверки времени.
|