Сторожевой таймер – Уроки программирования Ардуино. Повышение надежности программ для Ардуино. Сторожевой таймер.

Содержание

Лекция №7 сторожевой таймер

Общие
сведения

Сторожевой таймер
(Watchdog Timer, WDT) — одно из самых полезных
уст­ройств в составе микроконтроллеров,
потому, что он применяется на практике
почти во всех разрабатываемых приложениях.
Причем его полезность не всегда очевидна:
в нормальном режиме работы, когда все
настроено идеально, он, в общем-то, и
вовсе не ну­жен.

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

Например, вполне
реальными представляются следующие
ситуации: МК настроен на обработку
некоторой совокупности данных, при этом
возможно возникновение их сочетания,
которое не предусмотрено программистом,
что может привести к зацикливанию
программы. Или на практике достаточно
распространенным является случай сбоя
программного кода при перепадах
напряжения, что также может привести к
непредвиденным ситуациям. Наиболее
разумным выходом в данных и им подобных
ситуациях является перезапуск программного
кода (перезапуск контроллера), который
должен быть выполнен без участия
человека.

Перезапуск
контроллера — выполнение полного сброса
системы (переинициализации путем сброса
и запуска с нуля).

Идентификация
аварийного состояния (аварийного хода
выполнения программы) может быть
проведена путем оценки времени выполнения
совокупности стандартных операций
(основного цикла) МК-системы.

В принципе эту
работу может выполнить один из стандартных
таймеров счетчиков МК, однако здесь
есть свои особенности. Во-первых
стандартные Т/С необходимы для решения
задач управления, а кроме того, это
устройство должно тактироваться
отдельным генератором, для того, чтобы
иметь возможность управлять выходом
из различных режимов энергосбережения.

Перечисленные
выше задачи и решает WDT, который сбросит
МК по истечении некоторого срока, если
его вовремя не остановить.

Для предотвращения
перехода микроконтроллера в режим
бесконечного цик­ла, когда на него
невозможно повлиять извне (такие ситуации
возникают при ошибках в программах
пользователя) компания Atmel оснастила
все микрокон­троллеры базовой серии
семейства АVR так называемыми сторожевыми
таймерами — WDT.

WDT подклю­чается
к автономному RC-генератору с частотой
примерно 1 МГц при пита­нии 5В (в старых
моделях эта частота могла уменьшаться
пропорционально снижению питания МК,
в Mega ее стабильность несколько повышена).

Сторожевой интервал
может принимать одно из 8 значений от
16 до2048 мс посредством установки
коэффициента встроенного предделителя
(управляется специальными битами).

Если по истечении
настраиваемого времени задержки
программа пользовате­ля не выполнит
команду сброса системы, это сделает
сторожевой таймер. После сброса
сторожевого таймера отсчет времени
задержки возобновляется. Если тре­буется
контролировать ход выполнения программы,
то программист должен акти­визировать
сторожевой таймер и через регулярные
отрезки времени включать в программу
команду сброса, которая обеспечивает
своевременный сброс перед началом
нового отсчета времени.

Когда отсчет
времени сторожевым таймером прекращается,
выполнение про граммы продолжается с
адреса $000, как по сигналу сброса при
включении питания.

Кроме того к
функциям WDT относится и пробуждение
системы, находящейся в одном из режимов
энергосбережения, если «пробу­ждающее»
событие не наступило. В отличие от выхода
из «сна» через внеш­нее событие,
при этом выполнится не прерывание, а
начальная процедура RESET, как при включении.
Отметим, что включенный WDT потребляет
ток примерно 70 мкА.

Для того чтобы
вследствие какой-нибудь помехи WDT не
запустился и, глав­ное, не выключился
случайно, и для запуска и для выключения
его преду­смотрена довольно
«навороченная» процедура. Для того
чтобы предотвратить непреднамеренное
отключение сторожевого таймера,
необ­ходимо придерживаться определенной
процедуры, описанной ниже в разделе,
по­священном регистру управления
WDTCR.

Причем процедура
эта различается для МКсемейств Tiny,
Classic и Mega, что дало зачем-то авторам
техдокументации основание для ввода
специальных «уровней управления»
режимом WDT.

Если в какой-либо
простой программе контроль с помощью
сторожевого тай­мера не требуется,
то его можно отключить. По умолчанию,
сторожевой таймер после поступления
сигнала сброса по включению питания
отключается.

studfiles.net

Сторожевой таймер — это… Что такое Сторожевой таймер?

Сторожевой таймер (контрольный таймер, англ. Watchdog timer) — аппаратно реализованная схема контроля за зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы. В некоторых случаях сторожевой таймер может посылать системе сигнал на перезагрузку («мягкая» перезагрузка), в других же — перезагрузка происходит аппаратно (замыканием сигнального провода RST или подобного ему).

Физически сторожевой таймер может быть:

  • Самостоятельным устройством.
  • Компонентом устройства, например, микросхемой на материнской плате.
  • Частью кристалла SoC.

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

Область применения

Контроль работы аппаратно-программных комплексов на основе ЭВМ

Такие таймеры позволяют не только отслеживать зависание операционной системы (и перезагружать её), но и отслеживать состояние отдельных программ и компонентов аппаратного обеспечения системы в целом, а также осуществлять проверку подключения ЭВМ к компьютерной сети.

Подобные таймеры используются, например, в банкоматах и терминалах по приему платежей.

Управление устройствами измерительной техники

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

См. также

Ссылки

В этой статье не хватает ссылок на источники информации.
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 14 мая 2011.

Примечания

dic.academic.ru

Сторожевой таймер | WatchDog Timer (Trema-модуль v2.0)

Общие сведения:

Trema-модуль Сторожевой таймер — это модуль позволяющий контролировать «зависание» Arduino. Если Arduino «зависнет» то Trema-модуль её перезагрузит как при нажатии кнопки «reset».

Сторожевые таймеры также называют WDT (WatchDog Timer — сторожевой пёс).

Видео:

Спецификация:

  • Входное напряжение: 5 В (постоянного тока)
  • Потребляемый ток:
  • Длительность импульса на входе S (Signal):
  • Тайм-аут сторожевого таймера: 40 с. ±5 с.
  • Длительность импульса на выходе RES (reset):
  • Рабочая температура:
  • Габариты: 30×30 мм.

Все модули линейки «Trema» выполнены в одном формате

Подключение:

  • Вход модуля S (Signal) подключается к любому выводу Arduino (нужен для сброса таймера).
    Если к Arduino в Вашем устройстве подключён модуль получающий данные от Arduino, не реже тайм-аута сторожевого таймера, то его вход S (Signal) можно подключить к Arduino вместе со входом этого модуля. Например, если Вы выводите данные в LCD дисплей по шине I2C, то вход S (Signal) сторожевого таймера можно подключить к выводу SDA или SCL этой шины. При таком подключении отпадает необходимость в написании кода для сброса таймера и не используется отдельный вывод для его работы.
  • Выход модуля RES (Reset) подключается к выводу RESET Arduino (нужен для перезагрузки Arduino).

Используя проводной шлейф и Piranha UNO

Используя провода «Папа — Мама», подключаем  напрямую к контроллеру Piranha UNO.

Питание:

  • Напряжение питания 5 В постоянного тока подаётся на выводы V (Vcc) и G (GND) модуля.

Подробнее о модуле:

В программе Arduino нужно прописать код который будет сбрасывать Trema-модуль сторожевой таймер, подавая импульсы на его вход S (Signal). Пока таймер постоянно сбрасывается, программа (устройство, Arduino) работает нормально. Если сторожевой таймер перестал получать импульсы сброса (пауза между импульсами превысила Тайм-аут таймера), то он «решает» что Arduino «зависла» и формирует импульс логического «0» на своём выходе RES (Reset) который должен быть подключён к выводу RESET Arduino.

На вход S (Signal) сторожевого таймера можно подавать любые импульсы (положительные или отрицательные). Импульс перезагрузки на выходе RES (Reset) сторожевого таймера формируется при паузе между импульсами на входе S (Signal) больше чем Тайм-аут, не зависимо от логического уровня на входе S (Signal).

Trema-модуль сторожевой таймер аппаратно сбрасывается (вне зависимости от состояний на его входе) при нажатии на кнопку Arduino RESET и при старте загрузки скетчей. Следовательно, Trema сторожевой таймер не требуется отключать от Arduino во время загрузки скетчей, они успеют загрузиться и выполнить сброс таймера до формирования импульса перезагрузки на его выходе.

Примеры:

Код для «зависания» Arduino:

const uint8_t pinVD = LED_BUILTIN;                  // Определяем константу с указанием № вывода Arduino к которому подключён светодиод (используется светодиод на плате Arduino)
const uint8_t pinWDT = 5;                           // Определяем константу с указанием № вывода Arduino к которому подключён вход S сторожевого таймера (можно использовать любой вывод Arduino)
        

wiki.iarduino.ru

Сторожевой таймер в надежных встраиваемых системах


Небольшая ошибка в сложной встроенной системе может привести к ее сбою или, что еще хуже, к работе в опасном режиме. Ошибки — не единственная проблема. Совершенное разработанное и проверенное устройство, на котором выполняется идеальный протестированный код, все равно может выйти из строя. Сторожевой таймер (watchdog timer, WDT) — это механизм безопасности, который позволяет вернуть систему в рабочий режим в случае сбоя. По этой причине сторожевой таймер должен быть грамотно разработан и реализован.


Как правило, WTD состоит из счетчика и тактирующего устройства. Значение счетчика по сигналам тактового устройства постоянно уменьшается. Когда оно достигает нуля, генерируется короткий импульс, который сбрасывает и перезапускает систему.


Приложению необходимо периодически, до срабатывания таймера, обновлять значение счетчика, иначе WTD вызовет перезагрузку системы. После обновления счетчика его значение вновь продолжит уменьшаться. Проще говоря, WDT постоянно «следит» за выполнением кода и перезагружает систему, если программное обеспечение зависает или больше не выполняет правильную последовательность кода. Перезагрузка значения WDT с помощью программного обеспечения называется “kicking the watchdog” (перезапуск сторожевого таймера).


Особенности разработки с применением сторожевых таймеров


  • Источник тактовых импульсов для WDT должен быть независимым, в том смысле, что он не должен тактироваться от системного генератора. В случае, если основной тактовый генератор штатно останавливается, например, при переходе системы в режим сна, сторожевой таймер не будет работать.

  • После завершения инициализации WDT программное обеспечение не должно иметь возможности остановить таймер или изменить значения его управляющих регистров, что позволило бы ошибочному коду остановить его. Некоторые микроконтроллеры обладают такой функцией защиты.

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

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


Типы сторожевых таймеров


WDT могут быть разделены на две больших категории – внешние сторожевые таймеры (рисунок 1) и внутренние, или встроенные (рисунок 2). Подавляющее большинство современных микроконтроллеров имеют встроенные сторожевые таймеры. Производители также предлагают специализированные микросхемы сторожевых таймеров.


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




Рис. 1. Внешний сторожевой таймер

Рис. 2. Внутренний сторожевой таймер


Проблемы, возникающие при отсутствии сторожевого таймера


В 1994 году для наблюдения за Луной и астероидом 1620 Geo был запущен зонд «Клементина». После нескольких месяцев работы программный сбой привел к включению контрольного двигателя на 11 минут, что привело к большому расходу топлива и вращению аппарата со скоростью 80 об/мин. Управление было в конечном итоге восстановлено, но слишком поздно для успешного завершения миссии.


Даже если код был тщательно спроектирован и реализован, ошибка всегда возможна. Если устройство тестируется на устойчивость к электромагнитным помехам, высоковольтный импульс может привести к модификации программного счетчика или указателя стека. Космические лучи также опасны для цифровой техники и могут привести к искажению содержимого регистров процессора.


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


Системное программное обеспечение также не должно зацикливаться на длительный период. Общим решением является сброс системы, и в этом поможет сторожевой таймер.


Структура систем, использующих сторожевой таймер


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


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


Сторожевой таймер также может быть использован для вывода устройства из спящего режима или режима ожидания. В спящем режиме срабатывание сторожевого таймера не сбрасывает систему, а просто переводит ее в активный режим.


Для надежной разработки внедрение сторожевого таймера является обязательным.


Период срабатывания сторожевого таймера


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


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


Очень короткие временные интервалы сторожевого таймера могут приводить к лишним перезапускам системы. Если система не критична по времени, интервал сброса лучше выбирать в пределах нескольких секунд.


Сторожевой таймер в однопоточном приложении


Обычно обновление/ перезапуск сторожевого таймера происходит в конце основного цикла, перед уходом на новый круг (рисунок 3).


Рис. 3. Типовая схема обновления сторожевого таймера в основном программном цикле приложения


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


—————-CODE——————
main ()
{
for( ; ; )
{
if(State == 0) State = 0x01;
. . .
. . .
if(State == 1)State = 0x02;
. . .
. . .
if(State == 2)State = 0x03;
. . .
. . .
If(State== 0x03)
{
Kickthewatchdog
State= 0;
}
}
}
—————-CODE——————


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


К примеру, если длительность основного цикла составляет 500 мс, а максимальный интервал сторожевого таймера – 100 мс, то нет возможности перезапускать его в основном цикле. В данном случае можно настроить один из основных таймеров процессора/ микроконтроллера на срабатывание, к примеру, каждые 50 мс и определить флаг, показывающий, что выполнение программы идет штатно, который будет проверен в конце основного цикла.


—————-CODE——————
main ( )
{
for ( ; ; )
{
. . .
. . .
State= ALIVE;
}
}
—————-CODE——————


Каждые 50 мс по срабатыванию основного таймера проверяется флаг состояния, инкрементируется счетчик. Обновление таймера происходит только в том случае, если система находится в известном состоянии. Если значение счетчика превысило десять (прошло более 500 мс), обработчик при следующем прерывании проверяет флаг состояния, и если он соответствует нормальному исполнению кода, то считается, что программа выполняется корректно. В противном случае выставляется состояние «неизвестное», обновления сторожевого таймера при следующем вызове не будет и система будет перезапущена по истечению интервала сторожевого таймера.


—————-CODE——————
ISR() //50ms free running
{
Count++;
If(Count > 10) //10x50ms
{
Count = 0;


If(State == ALIVE)
{
State = RESET;
}
else
{
State = UNKNOWN;
}
}


If (State != UNKNOWN)
{
Kick the watchdog
}
}
—————-CODE——————


Не стоит доверять обновление сторожевого таймера, без проверки каких-либо условий, обработчику прерываний или отдельной задаче ОСРВ, так как в случае ошибки в основной ветке кода обработка прерываний или выполнение других задач ОСРВ может продолжиться, и условия срабатывания сторожевого таймера никогда не наступят. Такой подход не рекомендуется, так как нет гарантии, что работает основной код.


Сторожевой таймер в приложениях на базе ОСРВ


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


Одним из способов реализации механизма управления сторожевым таймером является создание отдельной задачи, отслеживающей выполнение остальных, и только она — так называемая «сторожевая задача», или задача сторожевого таймера, — получает возможность управления сторожевым таймером.


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


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


Подход, представленный на рисунке 4, будет работать в том случае, если длительности циклов всех задач будут меньше и длительности периода сторожевого таймера, и периодичности срабатывания задачи сторожевого таймера. Однако в случае, если хотя бы одна из задач не укладывается в этот период по каким-либо причинам (переход в спящее состояние, ожидание события, обработка прерываний), даже при штатном исполнении сторожевая задача, обнаружив неустановленный бит, не обновит таймер, и произойдет перезапуск всей системы.


Более предпочтительным решением является использование метода передачи сообщений, когда каждая задача блокируется в очереди сообщений (рисунок 5). Задача сторожевого таймера будет отправлять сообщения всем задачам и переходить в спящий режим на определенный промежуток времени (меньший, чем период тайм-аута таймера).



Рис. 4. Реализация сторожевого таймера в ОСРВ, вариант 1



Рис. 5. Реализация сторожевого таймера в ОСРВ, вариант 2


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

www.terraelectronica.ru

Сторожевой таймер для автоматического перезапуска микроконтроллера — FLProg

 

Автоматический перезапуск микроконтроллера (МК) после программного зависания — хорошо известный эффективный способ повышения надёжности функционирования МК систем. Устройство, осуществляющее эту функцию, называется сторожевым таймером или WDT (WatchDog Timer). Несмотря на широкую номенклатуру выпускаемых специализированных микросхем для WDT [1], во многих случаях предпочтительнее использовать более доступные таймеры 555. Интернет предлагает богатое разнообразие подобных схем и зачастую бывает не просто сделать из них правильный выбор.

На рис. 1 приведена многократно проверенная в работе схема WDT, которую можно рекомендовать для доработки уже существующих конструкций (в том числе и на платформе Arduino) с целью автоматического перезапуска МК после зависания.

Рис. 1

Здесь таймер 555 DA1 включён по типовой схеме автогенератора с большим периодом следования импульсов [2]. В штатном режиме работы МК на вход WDI сторожевого таймера периодически поступают контрольные импульсы, которые, для исключе­ния потенциального  влияния на схему, подаются через разделительный конденсатор C1 [3]. Пройдя через дифференцирующую цепь R1C1, они кратковременно открывают транзистор VT1 и, соответственно, разряжают конденсатор C3. При этом блокируется формирование таймером 555 импульсов сброса с активным низким уровнем (лог. «0») и на выходе Vout (вывод 3 DA1) удерживается уровень лог. «1».

При возникновении сбоя в работе МК контрольные импульсы с него перестают поступать на вход WDI. Соответственно конденсатор C3 перестаёт разряжаться, а, напротив, заряжается через резисторы R3 и R4 — напряжение на нём начинает расти. Через некоторое время, которое называется сторожевой паузой, оно достигнет порога срабатывания таймера 555 и на выходе Vout будет сформирован импульс сброса. МК перезапускается и, в случае успешного рестарта, им вновь формируются контрольные импульсы. В противном случае сторожевой таймер через интервал времени равный сторожевой паузе сформирует очередной импульс сброса. И так до тех пор, пока МК не начнёт нормально работать.

На рис. 2 приведена улучшенная схема WDT. Отличия касаются только цепей подключения таймера 555, при этом сам принцип работы устройства не изменился.

Во-первых, цепь сброса МК (WDO) подключается непосредственно к «открытому» коллектору выходного транзистора (вывод 7 DA1) таймера 555. Это гарантированно обеспечит рестарт МК с низковольтным питанием (3,3 В и менее).

Во-вторых, для увеличения гистерезиса уровней срабатывания компараторов таймера 555 к выводу 5 DA1 (CV — управление напряжением) подключён резистор R4. За счёт этого длительность сторожевой паузы WDT увеличилась примерно в 1,5 раза по сравнению со схемой на рис. 1. При необходимости иметь сторожевую паузу в десятки секунд это позволит избежать применения в качестве C3 ненадёжных электролитических конденсаторов. Удобно в этом случае использовать недорогие керамические конденсаторы в SMD-исполнении, подключая их параллельно.

Рис. 2

В таблице приведены измеренные значения длительностей сторожевой паузы и импульса сброса для обеих схем WDT при различных напряжениях питания.

 

Схема WDTНапряжение питания, ВДлительность
сторожевой паузы, симпульса сброса, мс
Рис. 153,615
122,715
Рис. 255,150
125,340

 

Обе схемы не требовательны к параметрам контрольных импульсов и во многих случаях можно обойтись без специального выхода МК для них. Главное, чтобы импульсы были. Например, с успехом можно использовать сигналы управления индикатором [4] или интерфейсного обмена по шинам I2C, SPI, UART и др. Но нужно быть внимательным, чтобы не использовать выход с ШИМ (PWM), т.к. здесь импульсы формируются аппаратно и при зависании МК вполне могут присутствовать.

Ток потребления устройств определяется конкретной разновидностью используемого таймера 555 и, как правило, не превышает нескольких миллиампер. При необходимости существенно (менее 1 мА) снизить значение потребляемого тока и/или напряжения питания (до 2…3 В), нужно использовать КМОП таймеры 555 (TLC551, TLC555, LMC555, ICM7555). В качестве VT1 может быть использован любой маломощный n-p-n транзистор.

Сторожевой таймер может быть изготовлен на небольшой макетной плате (см. фото на рис. 3) и размещён как внутри защищаемого МК устройства, так и снаружи. При налаживании WDT необходимо подобрать значение емкости конденсатора C3, при котором МК успешно инициализируется и входит в рабочий режим после перезапуска.

Подготовке статьи предшествовало обсуждение предложенных схем на техническом форуме [5], начатое по инициативе автора. В результате которого несколько человек успешно решили проблемы, связанные с зависанием МК устройств на Arduino.

Сторожевой таймер для Ардуино монтаж

Рис. 3

Автор: Сергей Скворцов, г. Омск ( kipiaxxx )

Литература:
1. Николайчук О. И. Современные средства автоматизации. — М. : СОЛОН-Пресс, 2010. — С. 73—76.
2. Гальперин М. В. Практическая схемотехника в промышленной автоматике. — М. : Энергоатомиздат, 1987. — С. 164—166.
3. Рюмик С. М. 1000 и одна микроконтроллерная схема. Вып. 1. — М. : Додэка-ХХI, 2010. — С. 251, 252.
4. Жулий А. Устройство автоматического сброса процессора в АОНе // Радио. – 1998. – № 2. – С. 57.
5. Сторожевой таймер (WDT). — ссылка на страницу обсуждения

Автор публикации

316

Комментарии: 10Публикации: 298Регистрация: 04-02-2018

flprog.ru

Сторожевой таймер Википедия

Сторожевой таймер, реже контрольный таймер (англ. watchdog timer  «сторожевой пёс») — аппаратно реализованная схема контроля над зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы. В некоторых случаях сторожевой таймер может посылать системе сигнал на перезагрузку («мягкая» перезагрузка), в других же — перезагрузка происходит аппаратно (замыканием сигнального провода RST или подобного ему).

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

Конструктивное исполнение[ | ]

Физически сторожевой таймер может быть:

  • Самостоятельным устройством.
  • Компонентом устройства, например, микросхемой на материнской плате.
  • Частью кристалла SoC, микроконтроллера.

Когда сторожевой таймер выполнен в виде самостоятельной микросхемы, например, серии ADM690 — ADM695, он может выполнять и функции монитора напряжения питания[1].

Область применения[ | ]

Контроль работы аппаратно-программных комплексов на основе ЭВМ[ | ]

Такие таймеры позволяют не только отслеживать зависание операционной системы (и перезагружать её), но и отслеживать состояние отдельных программ и компонентов аппаратного обеспечения системы в целом, а также осуществлять проверку подключения ЭВМ к компьютерной сети.

Подобные таймеры в первую очередь используются в системах, где человек физически не может получить доступ, например спутники и прочие космические аппараты. Также сторожевые таймеры полезны в устройствах, доступ к которым трудно осуществим, например, в банкоматах и терминалах по приему платежей.

Управление устройствами измерительной техники[ | ]

В этом случае сторожевой таймер может использоваться как средство для отсчёта временных интервалов, необходимых для осуществления периодических измерений.

Принцип работы[ | ]

Сторожевой таймер подключается, например, через USB type A/PDB10. Проводом он напрямую соединяется с контактами Reset и Power материнской платы. Программа периодически передает сигнал на USB, к которому подключен таймер. Если таймер не получает сигнала, значит, компьютер завис. Автоматически WatchDog передает сигнал на контакт Reset материнской платы, чтобы перезагрузить систему. Если Reset не сработал, WD активирует канал Power, затем снова включает компьютер.

Таким образом, WatchDog сначала «нажимает» кнопку Reset, затем «зажимает» кнопку Power, а потом снова включает компьютер.

Чтобы иметь энергию для перезапуска, на таймер устанавливают ионистор.

Расширенные функции с релейным блоком[

ru-wiki.ru

Сторожевой таймер — WiKi

Сторожевой таймер, реже контрольный таймер (англ. watchdog timer  «сторожевой пёс») — аппаратно реализованная схема контроля над зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы. В некоторых случаях сторожевой таймер может посылать системе сигнал на перезагрузку («мягкая» перезагрузка), в других же — перезагрузка происходит аппаратно (замыканием сигнального провода RST или подобного ему).

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

Конструктивное исполнение

Физически сторожевой таймер может быть:

  • Самостоятельным устройством.
  • Компонентом устройства, например, микросхемой на материнской плате.
  • Частью кристалла SoC, микроконтроллера.

Когда сторожевой таймер выполнен в виде самостоятельной микросхемы, например, серии ADM690 — ADM695, он может выполнять и функции монитора напряжения питания[1].

Область применения

Контроль работы аппаратно-программных комплексов на основе ЭВМ

Такие таймеры позволяют не только отслеживать зависание операционной системы (и перезагружать её), но и отслеживать состояние отдельных программ и компонентов аппаратного обеспечения системы в целом, а также осуществлять проверку подключения ЭВМ к компьютерной сети.

Подобные таймеры в первую очередь используются в системах, где человек физически не может получить доступ, например спутники и прочие космические аппараты. Также сторожевые таймеры полезны в устройствах, доступ к которым трудно осуществим, например, в банкоматах и терминалах по приему платежей.

Управление устройствами измерительной техники

В этом случае сторожевой таймер может использоваться как средство для отсчёта временных интервалов, необходимых для осуществления периодических измерений.

Принцип работы

Сторожевой таймер подключается, например, через USB type A/PDB10. Проводом он напрямую соединяется с контактами Reset и Power материнской платы. Программа периодически передает сигнал на USB, к которому подключен таймер. Если таймер не получает сигнала, значит, компьютер завис. Автоматически WatchDog передает сигнал на контакт Reset материнской платы, чтобы перезагрузить систему. Если Reset не сработал, WD активирует канал Power, затем снова включает компьютер.

Таким образом, WatchDog сначала «нажимает» кнопку Reset, затем «зажимает» кнопку Power, а потом снова включает компьютер.

Чтобы иметь энергию для перезапуска, на таймер устанавливают ионистор.

Расширенные функции с релейным блоком

Реле позволяет управлять GSM-модемом, роутером, купюроприемником, ПК и т. д.. WD может перезагрузить компьютер и, например, купюроприёмник. Для этого нужно поставить релейный блок в разрыв питания купюроприёмника. К сторожевому таймеру он подключается через провод на соответствующие контакты. Постоянное питание нужно обеспечить через порт micro-USB или стандартный разъём молекс.

Примечания

Литература

  • Владимир Гуревич. Микропроцессорные реле защиты: устройство, проблемы, перспективы. — М.: Инфра-Инженерия, 2011. — С. 146. — 336 с. — ISBN 978-5-457-64773-2.
  • Хофманн М. Микроконтроллеры для начинающих = Mikrocontroller für Einsteiger. — СПб.: БХВ-Петербург, 2010. — С. 101. — ISBN 978-5-9775-0551-2.

Ссылки

ru-wiki.org