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

Аватара пользователя
kipiaxxx
Рядовой
Сообщения: 76
Зарегистрирован: 06.09.2015{, 14:15}
Репутация: 16
Откуда: Омск
Имя: Сергей

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

#1

Сообщение kipiaxxx » 11.11.2015{, 11:26}

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

shtirlitz
Рядовой
Сообщения: 3
Зарегистрирован: 16.09.2015{, 18:47}
Репутация: 0
Откуда: Москва

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

#2

Сообщение shtirlitz » 06.12.2015{, 21:40}

То есть схема? Watchdog есть пряпо в кристалле, бери и пользуйся.

Аватара пользователя
kipiaxxx
Рядовой
Сообщения: 76
Зарегистрирован: 06.09.2015{, 14:15}
Репутация: 16
Откуда: Омск
Имя: Сергей

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

#3

Сообщение kipiaxxx » 07.12.2015{, 06:15}

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

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

Велко
Рядовой
Сообщения: 2
Зарегистрирован: 23.10.2015{, 10:35}
Репутация: 0
Откуда: Самара

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

#4

Сообщение Велко » 30.12.2015{, 09:38}

Реле времени с постоянным пингом от контроллера для обновления таймера не рассматривалось?

Аватара пользователя
kipiaxxx
Рядовой
Сообщения: 76
Зарегистрирован: 06.09.2015{, 14:15}
Репутация: 16
Откуда: Омск
Имя: Сергей

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

#5

Сообщение kipiaxxx » 30.12.2015{, 12:04}

Если под словом пинг Вы подразумеваете периодический сброс Ардуиной внешнего таймера, то - да.

Удовлетвоительное схемное решение на базе 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 для себя я решил. Спасибо откликнувшимся. Тему можно закрыть.
Последний раз редактировалось kipiaxxx 30.12.2015{, 12:05}, всего редактировалось 1 раз.

Evgesha
Лейтенант
Сообщения: 525
Зарегистрирован: 29.10.2015{, 09:57}
Репутация: 20
Откуда: Kazakhstan
Имя: Evgesha

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

#6

Сообщение Evgesha » 10.01.2016{, 15:54}

Здраствуйте. Извените.я что недопонял. Опишите пожалуйста решение поподробнее. Спасибо.

Добавлено (10.01.2016, 15:54)
---------------------------------------------
Здраствуйте. Извените.я что недопонял. Опишите пожалуйста решение поподробнее. Спасибо.
ПОМОЩЬ ПРОЕКТУ FLPROG:
http://flprog.ru/pomoshh-proektu/

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 787
Откуда: Астрахань
Имя: Сергей
Контактная информация:

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

#7

Сообщение support » 11.01.2016{, 10:29}

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

Аватара пользователя
kipiaxxx
Рядовой
Сообщения: 76
Зарегистрирован: 06.09.2015{, 14:15}
Репутация: 16
Откуда: Омск
Имя: Сергей

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

#8

Сообщение kipiaxxx » 11.01.2016{, 16:00}

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 керамические конденсаторы, подключая их параллельно.
Последний раз редактировалось kipiaxxx 24.01.2018{, 07:27}, всего редактировалось 2 раза.

Dreamer85
Рядовой
Сообщения: 45
Зарегистрирован: 01.02.2017{, 00:25}
Репутация: 0
Откуда: Сызрань
Контактная информация:

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

#9

Сообщение Dreamer85 » 24.03.2017{, 12:18}

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

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

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

#10

Сообщение Nikan » 24.03.2017{, 13:04}

.
Последний раз редактировалось Nikan 23.03.2023{, 16:43}, всего редактировалось 1 раз.

Dreamer85
Рядовой
Сообщения: 45
Зарегистрирован: 01.02.2017{, 00:25}
Репутация: 0
Откуда: Сызрань
Контактная информация:

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

#11

Сообщение Dreamer85 » 24.03.2017{, 17:28}

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

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

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

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

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

#12

Сообщение Nikan » 24.03.2017{, 20:06}

.
Последний раз редактировалось Nikan 23.03.2023{, 16:43}, всего редактировалось 1 раз.

Dreamer85
Рядовой
Сообщения: 45
Зарегистрирован: 01.02.2017{, 00:25}
Репутация: 0
Откуда: Сызрань
Контактная информация:

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

#13

Сообщение Dreamer85 » 24.03.2017{, 20:22}

Ага понятно. А если рассматривать схему выше.... я так понимаю она работает именно когда идут импульсы с ардуино, И если например ардуино зависнет с еденицей на выходе или с нолем то система все равно сделает свое дело и перезагрузит ардуино ?

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

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

#14

Сообщение Nikan » 24.03.2017{, 20:33}

.
Последний раз редактировалось Nikan 23.03.2023{, 16:43}, всего редактировалось 1 раз.

Dreamer85
Рядовой
Сообщения: 45
Зарегистрирован: 01.02.2017{, 00:25}
Репутация: 0
Откуда: Сызрань
Контактная информация:

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

#15

Сообщение Dreamer85 » 24.03.2017{, 20:48}

Nikan,  В нашей деревне проблематично найти что то подобное. 555ую еле нашел. все заказываю с поднебесной. А если брать программную часть ардуино то там достаточно установить симметричный мультивибратор ? а вот с какой длинной импульса?

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

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

#16

Сообщение Nikan » 24.03.2017{, 21:01}

.
Последний раз редактировалось Nikan 23.03.2023{, 16:43}, всего редактировалось 1 раз.

Dreamer85
Рядовой
Сообщения: 45
Зарегистрирован: 01.02.2017{, 00:25}
Репутация: 0
Откуда: Сызрань
Контактная информация:

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

#17

Сообщение Dreamer85 » 24.03.2017{, 21:19}

пробовать только опытном путем

А что за точки на схеме VF1 VF2 и VF3 ??
Последний раз редактировалось Dreamer85 24.03.2017{, 21:29}, всего редактировалось 1 раз.

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

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

#18

Сообщение Nikan » 24.03.2017{, 21:42}

.
Последний раз редактировалось Nikan 23.03.2023{, 16:44}, всего редактировалось 1 раз.

Аватара пользователя
kipiaxxx
Рядовой
Сообщения: 76
Зарегистрирован: 06.09.2015{, 14:15}
Репутация: 16
Откуда: Омск
Имя: Сергей

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

#19

Сообщение kipiaxxx » 25.03.2017{, 12:34}

Получил через ЛС несколько вопросов по своей схеме внешнего 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! И просьба отписаться в ветке о результатах внедрения.

OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07.09.2015{, 23:53}
Репутация: 0

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

#20

Сообщение OlegAn1962 » 25.03.2017{, 17:30}

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

Ответить

Вернуться в «Arduino. Другие МК»