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

 

Автоматический перезапуск микроконтроллера (МК) после программного зависания – хорошо известный эффективный способ повышения надёжности функционирования МК систем. Устройство, осуществляющее эту функцию, называется сторожевым таймером или 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 Напряжение питания, В Длительность
сторожевой паузы, с импульса сброса, мс
Рис. 1 5 3,6 15
12 2,7 15
Рис. 2 5 5,1 50
12 5,3 40

 

Обе схемы не требовательны к параметрам контрольных импульсов и во многих случаях можно обойтись без специального выхода МК для них. Главное, чтобы импульсы были. Например, с успехом можно использовать сигналы управления индикатором [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). — ссылка на страницу обсуждения


2

Publication author

779
Comments: 15Publics: 390Registration: 04-02-2018