Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

디바운싱 로직을 사용하여 과도 신호 줄이기

스위치가 열리고 닫힐 때 스위치가 켜짐 또는 꺼짐 상태로 완전히 전환되기 전에 스위치 접점이 서로 바운싱될 수 있습니다. 바운싱 동작은 상태의 실제 변화를 나타내지 않는 과도 신호를 생성할 수 있습니다. 따라서 스위치 로직을 모델링할 때 디바운싱 알고리즘을 사용하여 과도 신호를 필터링하는 것이 중요합니다.

Stateflow® 차트에서 제어기를 모델링하는 경우 제어기가 과도 신호를 수신할 때마다 이에 응답하여 켜지고 꺼지는 식으로 제어기에 부담을 주지 않아야 합니다. 이를 방지하려면, 시간 논리를 사용하여 입력 신호를 디바운싱하고 스위치가 실제로 켜지거나 꺼지는지 확인하는 Stateflow 제어기를 설계하십시오.

신호를 디바운싱하는 방법

Stateflow를 사용하여 신호를 디바운싱하는 방법에는 다음 두 가지가 있습니다.

  1. duration 시간 연산자를 사용하여 과도 신호를 필터링합니다.

  2. 중간 그래픽 상태를 사용하여 과도 신호를 필터링합니다. 결함 검출 같은 고급 필터링 기술에 중간 그래픽 상태를 사용하십시오.

duration 연산자는 Simulink® 모델의 Stateflow 차트에서만 지원됩니다.

duration 연산자를 사용하여 신호 디바운싱하기

이 예제에서는 duration 연산자를 사용하여 과도 신호를 필터링하는 설계 패턴을 보여줍니다.

Debouncer 차트는 다음 로직을 포함합니다.

상태 로직

이 모델의 초기 상태는 Off입니다. duration 연산자를 사용하여, 스위치 신호 sw가 얼마나 오랫동안 음수였는지 또는 음수가 아니었는지에 따라 활성화할 상태를 제어할 수 있습니다.

  • sw가 0.01초보다 긴 시간 동안 음수가 아니었다면 스위치는 상태 Off에서 상태 On으로 이동합니다.

  • sw가 0.01초보다 긴 시간 동안 음수였다면 스위치는 상태 On에서 상태 Off로 이동합니다.

Debouncer 실행하기

  1. 모델을 엽니다.

  2. Scope 블록을 엽니다.

  3. Stateflow 차트 Debouncer를 엽니다.

  4. 모델을 시뮬레이션합니다. 스코프는 디바운서가 잡음이 있는 입력 신호에서 과도 신호를 어떻게 분리하는지 보여줍니다.

결함 검출로 신호 디바운싱하기

이 예제에서는 중간 상태를 사용하여 과도 신호를 분리하는 설계 패턴을 보여줍니다. 디바운서 설계는 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. 모델을 시뮬레이션합니다. 스코프는 디바운서가 잡음이 있는 입력 신호에서 과도 신호를 어떻게 분리하는지 보여줍니다.

이벤트 기반 시간 논리 사용하기

절대시간 시간 논리에 대한 대안으로, after 연산자를 사용하여 Debouncer 차트의 실제 상태를 확인하는 이벤트 기반 시간 논리를 적용할 수 있습니다. 키워드 tick은 차트가 웨이크업 상태가 될 때 로컬 이벤트를 지정하고 암묵적으로 이를 생성합니다.

sf_debouncer 모델의 Error Generator 블록은 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)

참고 항목

|

관련 항목