...

среда, 8 апреля 2015 г.

Аппаратный «watchdog» или незаменимый помощник в борьбе с зависанием

В одной компании было много терминалов, и одна из неблагодарных задач для техподдержки — ездить по точкам и перезапускать операционную систему внутри терминалов. Было решено бросить вызов этой проблеме в виде разработки аппаратного сторожевого таймера.

В итоге мы получили устройство, которое подключается к расширительному спаренному USB-разъему на материнской плате.





Данное устройство имеет следующие возможности:



  1. Имитация нажатия кнопок POWER и RESET;

  2. Управление питанием USB-устройством (при условии, что у него нет отдельного источника);

  3. Управление гальванически развязанной контактной группой (реле). Можно поставить в разрез цепи питания;

  4. Индикаторные светодиоды (одним можно управлять, второй показывает режимы работы).


Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (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». Также поддерживается режим «\r\n».



Устройство выполнено на базе контроллера STM32F103CA с аппаратной поддержкой USB. Библиотека работы с USB версии V4.0.0. Напряжение работы 3.3В получаем с помощью линейного стабилизатора из 5В на USB. Во всех управляющих цепях используются транзисторы в ключевом режиме. Также не забываем про защитный диод от токов самоиндукции в катушки реле (в моем случае он оказался встроенным).


Вот и все — просто и сердито =).


GitHub



This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий