Защита от дребезга

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
starmos
Сержант
Сообщения: 114
Зарегистрирован: 11.04.2016{, 15:46}
Репутация: 13
Откуда: Челябинск

Защита от дребезга

#1

Сообщение starmos » 19.08.2020{, 07:28}

Не знаю правильно ли сюда писать, потому что речь идет о программировании STM32. Но я её программирую через FLProg 6.3.1.
У меня идут какие-то срабатывания по линии дискретного входа, идут случайным образом. Галка "защита от дребезга" на входе стоит. Я смотрю в исходник, программа генерирует такой код:

bool _bounceInputTmpD11 = (digitalRead (11));

if (_bounseInputD11S)
{
if (millis() >= (_bounseInputD11P + 40))
{_bounseInputD11O= _bounceInputTmpD11; _bounseInputD11S=0;}
}
else
{
if (_bounceInputTmpD11 != _bounseInputD11O )
{_bounseInputD11S=1; _bounseInputD11P = millis();}
Код понятен: система считывает текущее состояние входа, сравнивает с предыдущим и если поменялось, то запоминает время и ставит флаг (блок else нижний). При следующих проходах она проверяет флаг и если заданное время истекло, то присваивает выходу текущее состояние и флаг убирает. Только текущее состояние может быть уже новым, ведь система его сохраняет в самом начале этого участка кода. Т.е. после установки флага выдержки времени, она уже не проверяет на изменение сигнала, а разве защита от дребезга не в том, чтобы поймать уже стабильный сигнал?

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Защита от дребезга

#2

Сообщение Naladchik » 19.08.2020{, 08:12}

starmos писал(а):
19.08.2020{, 07:28}
а разве защита от дребезга не в том, чтобы поймать уже стабильный сигнал
IMHO. Назначение данной защиты не в том, чтобы ловить стабильный сигнал (это работа фильтра), а в том, чтобы отсечь дребезг сигнала на входе контроллера, подключенного к механическому выключателю, кнопке и т.п. Подразумевается что за 40 мс или переключение уже произойдет или сигнал восстановится (случайное касание).
Если же Вам нужно поймать (отфильтровать) именно стабильный сигнал то просто поставьте блок Таймер, задержка на включение (TON).
Если нужно фильтровать оба уровня сигнала, то два таймера TON и TOF (включать или последовательно или параллельно - как больше нравится).
Win10-64. FLProg Portable.
Изображение

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Защита от дребезга

#3

Сообщение ecoins » 19.08.2020{, 10:57}

Naladchik писал(а):
19.08.2020{, 08:12}
Назначение данной защиты не в том, чтобы ловить стабильный сигнал (это работа фильтра), а в том, чтобы отсечь дребезг сигнала на входе контроллера, подключенного к механическому выключателю, кнопке и т.п. Подразумевается что за 40 мс или переключение уже произойдет или сигнал восстановится (случайное касание).
Назначение защиты от дребезга от разработчика (сделано очень давно) не попадалось, потому думаю, что объяснение выше фиксация имеющегося функционала.
starmos писал(а):
19.08.2020{, 07:28}
Т.е. после установки флага выдержки времени, она уже не проверяет на изменение сигнала, а разве защита от дребезга не в том, чтобы поймать уже стабильный сигнал?
Согласен, что так лучше. Это уже тема подымалась в форуме.
В блоке дискретного ввода от ecoins защита от дребезга выполнена именно таким образом - новое значение устанавливается при неизменном значении пеоиода дребезга (параметр, который устанавливается в мс).

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Защита от дребезга

#4

Сообщение Naladchik » 19.08.2020{, 11:39}

ecoins писал(а):
19.08.2020{, 10:57}
потому думаю, что объяснение выше фиксация имеющегося функционала.
Именно поэтому и было указано
Naladchik писал(а):
19.08.2020{, 08:12}
IMHO ...
IMHO
ecoins писал(а):
19.08.2020{, 10:57}
Согласен, что так лучше.
На вкус и цвет ...
Win10-64. FLProg Portable.
Изображение

Ответить

Вернуться в «Спросить у знатоков»