Уменьшайте переходные сигналы при помощи логики Debouncing

Когда переключатель открывается и закрывается, контакты переключателя могут возвратиться друг от друга перед переключателем полностью переходы к на или от состояния. Возвращаемое действие может произвести переходные сигналы, которые не представляют истинное изменение состояния. Поэтому при моделировании логика переключения, важно отфильтровать переходные сигналы при помощи debouncing алгоритмов.

Если вы моделируете контроллер в графике Stateflow®, вы не хотите, чтобы ваш логик переключения переутомил контроллер путем включения и выключения его в ответ на каждый переходный сигнал, который он получает. Чтобы избежать этого, спроектируйте контроллер Stateflow, который использует временную логику для debounce ваши входные сигналы, и определите, включен ли переключатель на самом деле или выключен.

Как к Debounce сигнал

Существует два пути к debounce сигнал при помощи Stateflow:

  1. Отфильтруйте переходные сигналы при помощи duration темпоральный оператор.

  2. Отфильтруйте переходные сигналы при помощи промежуточного графического состояния. Используйте промежуточное графическое состояние для усовершенствованных методов фильтрации, таких как обнаружение отказа.

duration оператор поддерживается только в диаграммах Stateflow в модели Simulink®.

Сигналы Debounce с duration Оператор

Этот пример иллюстрирует шаблон разработки, который использует duration оператор, чтобы отфильтровать переходные сигналы.

График Debouncer содержит эту логику.

Логика состояния

Начальным состоянием для этой модели является Off. При помощи duration оператор, можно управлять, какое состояние активно на основе сколько времени сигнал переключателя, sw, было отрицательным или неотрицательным.

  • Когда sw было неотрицательным для дольше, чем 0,01 секунды, перемещения переключателя от Off состояния утверждать On.

  • Когда sw было отрицательно для дольше, чем 0,01 секунды, перемещения переключателя от On состояния утверждать Off.

Запустите Debouncer

  1. Откройте модель.

  2. Откройте блок Scope.

  3. Откройте диаграмму Stateflow Debouncer.

  4. Симулируйте модель. Осциллограф показывает, как debouncer изолирует переходные сигналы от шумного входного сигнала.

Сигналы Debounce с обнаружением отказа

Этот пример иллюстрирует шаблон разработки, который использует промежуточное состояние, чтобы изолировать переходные сигналы. Проект debouncer использует after оператор, чтобы реализовать абсолютно-разовую временную логику. С этим шаблоном разработки можно также обнаружить отказы и позволить системному времени восстанавливаться.

График Debouncer содержит эту логику.

Логика состояния

График Debouncer содержит промежуточное состояние под названием Debounce. Это состояние изолирует переходные входные параметры путем проверки если sw сигнала остается положительным или отрицательным, или если это колеблется между нулевыми пересечениями за предписанный период.

  • Когда sw было положительно для дольше, чем 0,1 секунды, переключатель перемещается, чтобы утвердить On.

  • Когда sw было отрицательно для дольше, чем 0,1 секунды, переключатель перемещается, чтобы утвердить Off.

  • Когда sw колеблется между нулевыми пересечениями для дольше, чем 0,3 секунды, переключатель перемещается, чтобы утвердить Off.Fault, изоляция sw как переходный сигнал и предоставление его время, чтобы восстановиться.

Запустите Debouncer

  1. Откройте модель.

  2. Откройте блок Scope.

  3. Откройте диаграмму Stateflow Debouncer.

  4. Симулируйте модель. Осциллограф показывает, как debouncer изолирует переходные сигналы от шумного входного сигнала.

Используйте основанную на событии временную логику

Как альтернатива абсолютно-разовой временной логике, можно применить основанную на событии временную логику, чтобы определить истинное состояние в графике Debouncer при помощи after оператор. Ключевое слово tick задает и неявно генерирует локальное событие, когда график просыпается.

Блок Error Generator в sf_debouncer модель генерирует сигнал импульса каждые 0,001 секунды. Поэтому, чтобы преобразовать абсолютно-разовую временную логику, заданную в графике Debouncer к основанной на событии логике, умножьте аргумент after оператор 1 000, как обозначено этой таблицей.

Абсолютная основанная на времени логикаОснованная на событии логика
after(0.1,sec)after(100,tick)
after(0.3,sec)after(300,tick)
after(1,sec)after(1000,tick)

Смотрите также

|

Похожие темы