Страница 1 из 7

Сторожевой таймер ( WDT )

Добавлено: 11.11.2015{, 11:26}
kipiaxxx
Для ответственных применений устройств на МК совершенно необходим сторожевой таймер ( WDT ). Интересует схема такого универсального, простого и надёжного устройства применительно к Arduino. Просьба поделиться личным опытом. Мой поиск пока приемлемого результата не дал.

Сторожевой таймер ( WDT )

Добавлено: 06.12.2015{, 21:40}
shtirlitz
То есть схема? Watchdog есть пряпо в кристалле, бери и пользуйся.

Сторожевой таймер ( WDT )

Добавлено: 07.12.2015{, 06:15}
kipiaxxx
1. В статье "Arduino watchdog или автоматический RESET в случае зависания":
http://geektimes.ru/post/255800/
убедительно объясняется, что без плясок с бубном перепрошивки загрузчика (bootloader) Arduino встроенный WDT может работать некорректно.

2. Кроме того, для своей работы встроенный Watchdog требует дефицитных аппаратных ресурсов чипа. Цитирую Настройки проекта:
Защита от зависания (При использовании исключает возможность использования скоростного счетчика и и выходов 3 и 11 в режиме ШИМ)

Сторожевой таймер ( WDT )

Добавлено: 30.12.2015{, 09:38}
Велко
Реле времени с постоянным пингом от контроллера для обновления таймера не рассматривалось?

Сторожевой таймер ( WDT )

Добавлено: 30.12.2015{, 12:04}
kipiaxxx
Если под словом пинг Вы подразумеваете периодический сброс Ардуиной внешнего таймера, то - да.

Удовлетвоительное схемное решение на базе 555-таймера было найдено здесь:
Arduino Long Time Hardware Watchdog
http://www.playwitharduino.com/?p=291

Недостаток этой схемы - использование выхода Arduino с Z-состоянием.
А для FLProg - это пока невозможно.
Эту схему я модифицировал с целью большей универсализации. Теперь её можно применять не только с Arduino, но и другими МК, не меняя их прошивки. Сделал 3 экз. и успешно их эксплуатирую.

В процессе поиска нашёл интересное обсуждение:
Сбои в работе МК - делимся опытом, знаниями. Проблемы с наводками и помехами, решения
https://www.terraelectronica.ru/board/i ... c=385&st=0

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

Вопрос по WDT для себя я решил. Спасибо откликнувшимся. Тему можно закрыть.

Сторожевой таймер ( WDT )

Добавлено: 10.01.2016{, 15:54}
Evgesha
Здраствуйте. Извените.я что недопонял. Опишите пожалуйста решение поподробнее. Спасибо.

Добавлено (10.01.2016, 15:54)
---------------------------------------------
Здраствуйте. Извените.я что недопонял. Опишите пожалуйста решение поподробнее. Спасибо.

Сторожевой таймер ( WDT )

Добавлено: 11.01.2016{, 10:29}
support
В FLProg реализован собственный сторожевой таймер. В настройках проекта установить галочку "Защита от зависаний"., и выставить время срабатывания таймера. Правда при этом возникают некоторые ограничения по использованию выходов ШИМ

Сторожевой таймер ( WDT )

Добавлено: 11.01.2016{, 16:00}
kipiaxxx
Evgesha писал(а):Опишите пожалуйста решение поподробнее.
Ниже приводится доработанная схема. Она выполнена в программе схемотехнического моделирования TINA-TI, которую я рекомендую для начинающих. Подробнее о ней читаем в журнале "Радиоежегодник", выпуск 32. TINA-TI по-русски: http://www.rlocman.ru/book/book.html?di=151461 
8386747.gif
По сравнению с исходной схемой из http://www.playwitharduino.com/?p=291 добавлен только транзистор Т1 и дифференцирующая цепочка С2,R4. Это типовое схемное решение для внешних WDT.
Пояснения к работе схемы.
Генератор импульсов VG1 имитирует периодические "контрольные" импульсы от  Arduino. Ключом SW1 имитируется зависание МК. Пока SW1 замкнут "контрольные" импульсы пройдя через диф. цепь будут открывать транзистор Т1, который, в свою очередь, будет периодически разряжать времязадающий конденсатор С1. Это нормальная работа микроконтроллера Arduino.
Ситуация с "зависанием" программы МК имитируется размыканием ключа SW1. При этом "контрольные" импульсы от  Arduino не поступают на транзистор Т1. Конденсатор С1 током через резисторы R1 и R2 заряжается до верхнего порога срабатывания микросхемы 555-таймера U1, 555-таймер начинает работать в режиме генератора импульсов с большим периодом следования. Выход OUT таймера U1 через диод D1 подключён к цепи сброса R5,С5 (RES) Arduino. Короткие (100-150 мс) и редкие (с периодом в несколько секунд) отрицательные импульсы сброса будут принудительно перезапускать МК, до тех пор пока он нормально не запустится и на его выходе вновь не появятся периодические "контрольные" импульсы.

Временные диаграммы иллюстрируют режимы работы внешнего WDT:
7813909.gif
Для сокращения времени моделирования номинал конденсатора С1 на схеме установлен значительно меньше необходимого. Можно ориентироваться на значение 0,5-1 мкФ на каждую секунду необходимой длительности "сторожевой" паузы. Конденсатор С1 нельзя применять электролитический. Удобно использовать дешёвые SMD керамические конденсаторы, подключая их параллельно.

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 12:18}
Dreamer85
Ардуино НАНО. загрузчик прошил от УНО вроде как в нем реализован программный WDT. рядом с  ней расположены 4 электромагнитных реле. раз в сутки все равно зависает намертво. Схема используется для инкубатора. Сами понимаете нужна безотказность. Склоняюсь к тому что виснет из за наводок от релюшек.  Видеться решение только использовать  мосфеты вместо реле. Или делать аппаратный WDT. Может еще кто то  предложит какое решение...

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 13:04}
Nikan
.

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 17:28}
Dreamer85
И все таки не отпускает вопрос, почему не работает  встроенный сторожевой таймер ?  Или все таки можно полностью подвесить железо. В свою нано прошил загрузчик от УНО. проверил скетчем работоспособность встроенного WDT. скетч показал что все ровно, при зависании идет перезагрузка, Оставил инкубатор тестироваться в ночь. Утром система полностью висела.

Была подобная ситуация при когда еще делал автоматику на пивоварню, было 2 реле на тэн и насос. На тэн стояло твердотельное  на насос обычная механика. И вот эта механика как я думаю периодически вешала систему . Проблема повторялась до  того пока не поставил твердотелку  и на насос

В нынешнем проекте у меня 4 механических реле. все собрано на одной плате. 2 реле на двигатель с реверсом. 1 на вентилятор, и одно на лампу для нагрева...

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 20:06}
Nikan
.

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 20:22}
Dreamer85
Ага понятно. А если рассматривать схему выше.... я так понимаю она работает именно когда идут импульсы с ардуино, И если например ардуино зависнет с еденицей на выходе или с нолем то система все равно сделает свое дело и перезагрузит ардуино ?

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 20:33}
Nikan
.

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 20:48}
Dreamer85
Nikan,  В нашей деревне проблематично найти что то подобное. 555ую еле нашел. все заказываю с поднебесной. А если брать программную часть ардуино то там достаточно установить симметричный мультивибратор ? а вот с какой длинной импульса?

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 21:01}
Nikan
.

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 21:19}
Dreamer85
пробовать только опытном путем

А что за точки на схеме VF1 VF2 и VF3 ??

Сторожевой таймер ( WDT )

Добавлено: 24.03.2017{, 21:42}
Nikan
.

Сторожевой таймер ( WDT )

Добавлено: 25.03.2017{, 12:34}
kipiaxxx
Получил через ЛС несколько вопросов по своей схеме внешнего WDT. Отвечаю на них здесь:
Нормально ли работает у вас данная схема?
 
Первый экз. схемы был внедрён на котельной более 2-х лет назад. Этот WDT защищал от зависаний промышленный контроллер на ATmega32. На данный момент кол-во нареканий =0. Кроме того, этим WDT были оснащены ещё 3 системы дополнительной технологической сигнализации на Arduino Nano - нареканий по работе также нет. Предварительно WDT жёстко испытывались в лаборатории КИПиА на понижение/повышение питающего напряжения, устойчивости к импульсным э/м помехам. Поэтому эту схему я с чистой совестью рекомендую для повторения. 
Что за точки на схеме VF1, VF2 и VF3?
 Это контрольные точки для вывода графиков при моделировании в TINA-TI.
VF3 подключается к входу cброса RST Arduino.
R5(10k) и C5(100n) устанавливать НЕ НАДО, т.к. они уже имеются на плате Arduino в цепи сброса.
Я так понимаю в FLProg на схему нужно добавить выход, к нему подключить мультивибратор? А какие значения ему выставлять в настройках?
Схема не требовательна к параметрам контрольных импульсов и во многих случаях можно даже обойтись и без специального выхода на Arduino. Главное, чтобы импульсы были. Например, при доработке контроллера на ATmega32 контрольные импульсы для WDT я брал с одного из входов Data индикатора 1602. В сигнализации на Arduino Nano использовался выход TX1 UART, с которого постоянно отправлялись данные в сеть. Но нужно быть внимательным, чтобы не использовать выход с ШИМ (PWM), т.к. здесь импульсы формируются аппаратно и при зависании Arduino вполне могут присутствовать. Если же есть желание и возможность использовать отдельный выход Arduino, то можно сделать проще. В начале программного цикла установить этот выход в 1, а где-нибудь в середине цикла - в 0. Такой способ практически не потребует доп. ресурсов Arduino, а полноценный контрольный импульс для WDT будет сформирован. Период следования этих импульсов будет равен времени исполнения программного цикла.  
 
Схема будет перезагружать ардуино если на выходе зависнет единица, или ноль?
Ответ: ДА, будет.

Успеха в реализации схемы WDT! И просьба отписаться в ветке о результатах внедрения.

Сторожевой таймер ( WDT )

Добавлено: 25.03.2017{, 17:30}
OlegAn1962
kipiaxxx, а можно схему подключить к одному из входов max7219, и если да, то к какому? Сталкивался с ситуацией, когда индикатор зависал (например, появлялась засветка всех восьми разрядов) , а ардуина продолжала нормально работать.