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

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

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

Как отладить сигнал

Существует два способа развенчать сигнал при помощи Stateflow:

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

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

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

Отлаживание сигналов с duration Оператор

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

Эта логика содержится в графике Debouncer.

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

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

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

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

Запуск Debouncer

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

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

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

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

Отлаживание сигналов с обнаружением отказа

Этот пример иллюстрирует шаблон проекта, который использует промежуточное состояние для изоляции переходных сигналов. В проекте 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 оператор на 1000, как указано в этой таблице.

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

См. также

|

Похожие темы