Когда переключатель открывается и закрывается, контакты переключателя могут возвратиться друг от друга перед переключателем полностью переходы к на или от состояния. Возвращаемое действие может произвести переходные сигналы, которые не представляют истинное изменение состояния. Поэтому при моделировании логика переключения, важно отфильтровать переходные сигналы при помощи debouncing алгоритмов.
Если вы моделируете контроллер в графике Stateflow®, вы не хотите, чтобы ваш логик переключения переутомил контроллер путем включения и выключения его в ответ на каждый переходный сигнал, который он получает. Чтобы избежать этого, разработайте контроллер Stateflow, который использует временную логику для debounce ваши входные сигналы, и определите, включен ли переключатель на самом деле или выключен.
Существует два пути к debounce сигнал при помощи Stateflow:
Отфильтруйте переходные сигналы при помощи темпорального оператора duration
.
Отфильтруйте переходные сигналы при помощи промежуточного графического состояния. Используйте промежуточное графическое состояние для усовершенствованных методов фильтрации, таких как обнаружение отказа.
Оператор duration
поддерживается только в диаграммах Stateflow в модели Simulink®.
duration
Модель sf_debouncer_using_duration
иллюстрирует шаблон разработки, который использует оператор duration
, чтобы отфильтровать переходные сигналы.
График Debouncer содержит эту логику.
Проект debouncer использует оператор duration(n)
, чтобы реализовать абсолютно-разовую временную логику.
Начальным состоянием для этой модели является Off
. Используя оператор duration
, можно управлять тем, что утверждает, что модель находится в на основе того, сколько времени сигнал переключателя, sw
, был больше или меньше, чем нуль. Если sw
был больше, чем или равным нулю для дольше, чем 0,1 секунды, перемещения переключателя от Off
состояния, чтобы утвердить On
. Затем если sw
был меньше, чем нуль для дольше, чем 0,01 секунды, перемещения переключателя от On
состояния, чтобы утвердить Off
.
debouncer имеет два состояния, On
и Off
. Средства управления оператором duration
, какое состояние активно. Логика работает, как описано в этой таблице.
Входной сигнал | Состояние | Результат |
---|---|---|
Сохраняет положительное значение в течение 0,1 секунд | На | Включите повороты |
Сохраняет отрицательную величину в течение 0,01 секунд | 'off' | Переключатель выключает |
Откройте модель sf_debouncer_using_duration
.
Откройте диаграмму Stateflow Debouncer и блок Scope.
Моделируйте график.
Осциллограф показывает, как debouncer изолирует переходные сигналы от шумного входного сигнала.
Модель sf_debouncer
иллюстрирует шаблон разработки, который использует временную логику и промежуточное состояние, чтобы изолировать переходные сигналы. С этим шаблоном разработки можно также включать логику, чтобы обнаружить отказы и позволить системному времени восстанавливаться.
График Debouncer содержит эту логику.
Проект debouncer использует оператор after(n, sec)
, чтобы реализовать абсолютно-разовую временную логику. sec
ключевого слова задает время симуляции, которое протекло начиная с активации состояния.
График debouncer содержит промежуточное состояние под названием Debounce. Состояние Debounce изолирует переходные входные параметры путем проверки, сохраняют ли сигналы свои положительные или отрицательные величины или колеблются между нулевыми пересечениями за предписанный период. Логика работает как показано в этой таблице.
Входной сигнал | Состояние | Переходы | Результат |
---|---|---|---|
Сохраняет положительное значение в течение 0,1 секунд | Debounce. На | На | Включите повороты |
Сохраняет отрицательную величину в течение 0,1 секунд | Debounce. 'off' | 'off' | Переключатель выключает |
Колеблется между нулевыми пересечениями в течение 0,3 секунд | Debounce | 'off'. ПримечаниеDebounce к Прочь. Переход отказа прибывает из более высокого уровня в иерархии графика и заменяет переходы от Debounce. Прочь и Debounce. На подсостояниях. | График изолирует вход как переходный сигнал и дает ему время, чтобы восстановиться. |
Откройте sf_debouncer
.
Откройте диаграмму Stateflow Debouncer и блок Scope.
Моделируйте график.
Осциллограф показывает, как debouncer изолирует переходные сигналы от шумного входного сигнала.
Как альтернатива абсолютно-разовой временной логике, можно применить основанную на событии временную логику, чтобы определить истинное состояние в графике Debouncer при помощи оператора after(n, tick)
. tick
ключевого слова задает и неявно генерирует локальное событие, когда график просыпается.
Блок Error Generator в модели sf_debouncer
генерирует сигнал импульса каждые 0,001 секунды. Поэтому, чтобы преобразовать абсолютно-разовую временную логику, заданную в графике Debouncer к основанной на событии логике, умножьте аргумент n
на 1 000, можно следующим образом.
Абсолютная основанная на времени логика | Основанная на событии логика |
---|---|
after ( 0.1, sec ) | after ( 100, tick ) |
after ( 0.3, sec ) | after ( 300, tick ) |
after ( 1, sec ) | after ( 1000, tick ) |