В одной компании было много терминалов, и одна из неблагодарных задач для техподдержки — ездить по точкам и перезапускать операционную систему внутри терминалов. Было решено бросить вызов этой проблеме в виде разработки аппаратного сторожевого таймера.
В итоге мы получили устройство, которое подключается к расширительному спаренному USB-разъему на материнской плате.
Данное устройство имеет следующие возможности:
- Имитация нажатия кнопок POWER и RESET;
- Управление питанием USB-устройством (при условии, что у него нет отдельного источника);
- Управление гальванически развязанной контактной группой (реле). Можно поставить в разрез цепи питания;
- Индикаторные светодиоды (одним можно управлять, второй показывает режимы работы).
Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (POWER и RESET). Чтобы предотвратить случайную перезагрузку, необходимо периодически послать команду сброса таймера.
Лучше, чтобы за процедуру сброса таймеров отвечало целевое приложение, а не стороннее или системное (Cron, служба расписаний) по причине того, что вероятность сбоя в системе меньше, чем в приложении (хотя, у кого как).
Обмен информацией аналогичен консольному.
Система команд:
команда | Описание | Пример |
---|---|---|
help | Краткая справка по командам | help |
LED1 | Управление светодиодом, по умолчанию выключен | LED1 ON LED1 OFF |
RELAY | Управление реле, по умолчанию включено | RELAY ON RELAY OFF |
KEY1 | Имитация нажатия кнопки 1, по умолчанию не нажата | KEY1 ON KEY1 OFF |
KEY2 | Имитация нажатия кнопки 2, по умолчанию не нажата | KEY2 ON KEY2 OFF |
C1 | Управление таймером 1, связанным с кнопкой 1. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. |
C1 RES C1 SET 60 C1 SET 0 |
C2 | Управление таймером 2, связанным с кнопкой 2. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. |
C2 RES C2 SET 60 C2 SET 0 |
USB | Управление питанием USB, по умолчанию включено | USB ON USB OFF |
В случае удачного выполнения команды возвращает «OK».
В случае некорректных данных возвращает «ERROR».
Признаком конца строки служит символ возврата каретки «r». Также поддерживается режим «rn».
Устройство выполнено на базе контроллера STM32F103CA с аппаратной поддержкой USB. Библиотека работы с USB версии V4.0.0. Напряжение работы 3.3В получаем с помощью линейного стабилизатора из 5В на USB. Во всех управляющих цепях используются транзисторы в ключевом режиме. Также не забываем про защитный диод от токов самоиндукции в катушки реле (в моем случае он оказался встроенным).
Вот и все — просто и сердито =).
Автор: tachcard