Не знаю правильно ли сюда писать, потому что речь идет о программировании 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 нижний). При следующих проходах она проверяет флаг и если заданное время истекло, то присваивает выходу текущее состояние и флаг убирает. Только текущее состояние может быть уже новым, ведь система его сохраняет в самом начале этого участка кода. Т.е. после установки флага выдержки времени, она уже не проверяет на изменение сигнала, а разве защита от дребезга не в том, чтобы поймать уже стабильный сигнал?
Защита от дребезга
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Защита от дребезга
IMHO. Назначение данной защиты не в том, чтобы ловить стабильный сигнал (это работа фильтра), а в том, чтобы отсечь дребезг сигнала на входе контроллера, подключенного к механическому выключателю, кнопке и т.п. Подразумевается что за 40 мс или переключение уже произойдет или сигнал восстановится (случайное касание).starmos писал(а): 19 авг 2020, 07:28 а разве защита от дребезга не в том, чтобы поймать уже стабильный сигнал
Если же Вам нужно поймать (отфильтровать) именно стабильный сигнал то просто поставьте блок Таймер, задержка на включение (TON).
Если нужно фильтровать оба уровня сигнала, то два таймера TON и TOF (включать или последовательно или параллельно - как больше нравится).
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Защита от дребезга
Назначение защиты от дребезга от разработчика (сделано очень давно) не попадалось, потому думаю, что объяснение выше фиксация имеющегося функционала.Naladchik писал(а): 19 авг 2020, 08:12 Назначение данной защиты не в том, чтобы ловить стабильный сигнал (это работа фильтра), а в том, чтобы отсечь дребезг сигнала на входе контроллера, подключенного к механическому выключателю, кнопке и т.п. Подразумевается что за 40 мс или переключение уже произойдет или сигнал восстановится (случайное касание).
Согласен, что так лучше. Это уже тема подымалась в форуме.starmos писал(а): 19 авг 2020, 07:28 Т.е. после установки флага выдержки времени, она уже не проверяет на изменение сигнала, а разве защита от дребезга не в том, чтобы поймать уже стабильный сигнал?
В блоке дискретного ввода от ecoins защита от дребезга выполнена именно таким образом - новое значение устанавливается при неизменном значении пеоиода дребезга (параметр, который устанавливается в мс).
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Защита от дребезга
Именно поэтому и было указаноecoins писал(а): 19 авг 2020, 10:57 потому думаю, что объяснение выше фиксация имеющегося функционала.
IMHO
На вкус и цвет ...
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость