Когда переключатель открывается и закрывается, контакты переключателя могут возвратиться друг от друга перед переключателем полностью переходы к на или от состояния. Возвращаемое действие может произвести переходные сигналы, которые не представляют истинное изменение состояния. Поэтому при моделировании логика переключения, важно отфильтровать переходные сигналы при помощи 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 ) |