본문 바로가기
하만 세미콘 아카데미/Verilog HDL

[직무종합 프로젝트] 원격제어 스톱워치 이론

by smileww 2024. 8. 30.

채터링 (Chattering)

채터링은 주로 릴레이나 스위치와 같은 전기 기계적 장치에서 접점이 빠르게 반복해서 연결되고 끊어지는 현상을 말합니다. 이는 접점이 최종적으로 안정된 상태에 도달하기 전에 짧은 시간 동안 불안정하게 여러 번 닫히고 열리는 것을 의미합니다. 채터링은 주로 접점의 물리적인 불안정성 또는 외부 진동 등에 의해 발생하며, 이로 인해 노이즈가 발생하거나 원치 않는 신호가 전송될 수 있습니다.

바운싱 (Bouncing)

바운싱은 스위치나 버튼을 눌렀을 때, 접점이 처음 닫히거나 열릴 때 잠시 동안 불안정하게 연결되고 끊어지는 현상을 말합니다. 이는 주로 스위치를 누르거나 떼는 동안의 물리적인 접점의 움직임에 의해 발생합니다. 바운싱은 스위치의 동작이 완료되기까지 짧은 시간 동안 여러 번의 연결과 끊김이 반복되는 것을 말하며, 이로 인해 전자 회로에서는 스위치가 여러 번 눌린 것처럼 인식될 수 있습니다.

차이점

  • 용도와 맥락: 채터링은 릴레이와 같은 전기 기계적 장치에서 사용되는 용어로, 접점이 닫히는 동안 물리적인 특성에 의해 발생하는 반복적인 연결과 끊김을 설명하는데 사용됩니다. 반면, 바운싱은 주로 일상적인 버튼 또는 스위치의 사용에서 접점의 초기 동작을 설명하는 데 사용됩니다.
  • 처리 방법: 둘 다 유사한 방법으로 처리할 수 있으나, 채터링은 전자적 필터링 외에도 물리적 구조를 변경하여 접점의 물리적 안정성을 높이는 방법도 고려될 수 있습니다.

 

 

< 발생 원인 >

 

  • 기계적인 진동: 버튼의 물리적 구조 때문에 발생하는 미세한 움직임을 잘 지적하였습니다. 이는 스위치 내부의 접점이 완벽하게 안정되기 전에 여러 차례 빠르게 닫히고 열리는 원인이 됩니다.
  • 연속적인 신호 감지: 이는 버튼 채터링의 전형적인 결과로, 실제 한 번의 버튼 누름이 여러 번의 누름으로 감지될 수 있음을 설명합니다.
  • 디지털 회로의 인식: 채터링으로 인해 발생하는 여러 입력들이 마이크로컨트롤러에 의해 감지되는 것을 언급함으로써, 이 현상이 프로그램 또는 시스템 동작에 어떻게 영향을 미칠 수 있는지를 명확히 하고 있습니다.

 

소프트웨어 디바운싱

  • 동작 방식: 마이크로컨트롤러 또는 프로그램에서 버튼 입력을 감지한 후 일정 시간 동안 추가 입력을 무시합니다. 이 시간 동안 버튼의 상태가 안정될 수 있도록 기다립니다.
  • 적용 예: 버튼 입력이 감지되면, 타이머를 시작하고, 타이머가 일정 시간(예: 10ms~50ms) 동안 만료되기 전에는 추가 입력을 무시합니다. 타이머가 만료된 후에만 다음 입력을 인식하여 처리합니다.

하드웨어 디바운싱

  • 동작 방식: 버튼과 마이크로컨트롤러 사이에 RC 필터(저항과 커패시터)를 설치하여 입력 신호의 짧은 스파이크를 제거하고, 보다 안정적인 신호만을 마이크로컨트롤러로 전달합니다.
  • 적용 예: 버튼의 두 접점 사이에 일정한 저항값과 커패시터를 설치하여 급격한 전압 변화를 완화시킵니다. 이는 버튼을 누르거나 떼는 동안 발생할 수 있는 빠른 전압 스파이크를 줄여줍니다.

인터럽트 사용

  • 동작 방식: 인터럽트 기반으로 버튼 입력을 처리합니다. 버튼 입력이 인터럽트 신호를 발생시키면, 해당 인터럽트에 응답하는 서비스 루틴이 실행되고, 이 루틴 내에서 디바운싱 로직을 수행합니다.
  • 적용 예: 인터럽트 서비스 루틴 내에서, 버튼 입력 후 일정 시간 동안 추가 인터럽트를 비활성화하고, 그 시간이 지난 후 다시 인터럽트를 활성화하여 실제 유효한 버튼 입력만을 처리합니다.

이러한 방법들은 각각의 상황과 요구 사항에 맞춰 선택적으로 사용할 수 있으며, 때로는 이러한 방법들을 조합하여 사용하기도 합니다. 이를 통해 시스템의 입력 처리를 보다 정확하고 안정적으로 만들 수 있습니다.

 

 

 

 

 

 

 

엣지 트리거드 동작

  • 정의: 엣지 트리거드는 신호의 상태 변경(예: '켜짐'에서 '꺼짐'으로, 또는 그 반대)이 발생할 때만 반응하는 방식입니다.
  • 동작 원리: 이 경우, 입력 신호의 '상승 엣지' (0에서 1로 변할 때)나 '하강 엣지' (1에서 0으로 변할 때)에 반응하여 카운터를 증가시키거나 리셋합니다.

적용된 메커니즘

  • 카운터 증가: 입력 신호가 활성 상태(예: HIGH or 1)인 동안 카운터는 계속 증가합니다. 이는 입력 신호가 활성화되어 있는 동안 지속적으로 일어나는 일을 측정하거나 추적하기 위해 사용됩니다.
  • 카운터 초기화: 입력 신호가 비활성화되면(예: LOW or 0) 카운터가 초기화됩니다. 이는 새로운 이벤트나 측정 주기가 시작될 때 기존의 카운트 값을 지우고 다시 시작하고자 할 때 사용됩니다.

디바운싱 적용

이 설계에서 보이는 것처럼, 신호에 디바운싱을 적용하고 있는 것도 볼 수 있습니다. 디바운싱은 입력 신호에서 짧은 시간 동안의 불안정한 변화(채터링)를 제거하여 신호의 안정성을 보장합니다. 카운터의 증가와 초기화는 신호가 안정적으로 고려되어야 할 때 정확하게 동작하도록 설계되었습니다.

사용 시나리오

  • 빈도 측정: 예를 들어, 특정 이벤트의 빈도나 시간을 측정할 때 사용할 수 있습니다.
  • 이벤트 모니터링: 사용자 입력이나 센서의 변화를 모니터링하고, 이를 기반으로 특정 작업을 수행합니다.

엣지 트리거드 동작은 특히 실시간 시스템이나 인터럽트 기반 시스템에서 유용하게 사용되며, 입력 신호의 정확한 순간을 포착하여 처리하는 데 필수적인 방법입니다. 이러한 시스템 설계는 신호의 정확한 타이밍을 요구하며, 입력 신호의 변화에 따라 정확하고 신속하게 반응할 수 있어야 합니다.

 

 

 

시스템은 입력 버튼의 신호가 활성화되어 있을 때 카운터가 20까지 증가하는 방식으로 작동하며, 이 카운터가 20에 도달하면 출력 신호가 발생하는 방식으로 설계되었습니다. 이는 "카운트 기반 딜레이 확인" 또는 "조건부 신호 출력" 방식으로 설명할 수 있으며, 아래의 원리로 작동합니다.

카운트 기반 딜레이 확인

  1. 카운터 증가: 입력 신호가 활성화되면, 카운터가 1부터 시작하여 계속 증가합니다.
  2. 조건 검사: 카운터가 특정 값(여기서는 20)에 도달하면, 시스템은 추가적인 조건을 검사하거나 다음 단계의 작업을 수행합니다.
  3. 출력 신호 발생: 카운터가 20에 도달하면 출력 신호가 발생하며, 이 신호는 일반적으로 다음 단계의 로직 회로나 장치를 제어하는 데 사용됩니다.

초기화 조건

  • 카운터 초기화: 입력 신호가 비활성화되기 전에 카운터가 20에 도달하지 않는 경우, 카운터는 초기화되어 0으로 돌아갑니다. 이는 입력이 일정 시간 내에 지속되지 않으면 시작 상태로 돌아가 시스템을 리셋하는 안전 장치로 기능합니다.

이 방식의 유용성

  • 불필요한 신호 필터링: 짧은 시간 동안의 잠깐의 입력이나 노이즈로 인한 신호를 걸러내어, 오직 지속적이고 유효한 입력만을 처리하도록 합니다.
  • 신호 무결성 보장: 입력 신호가 충분한 시간 동안 지속됨을 보장함으로써, 출력 신호의 무결성을 확보할 수 있습니다. 이는 시스템의 예측 가능성과 신뢰성을 높여줍니다.
 

 

 

 

더보기

`timescale 1ns / 1ps

module debounce(
    input clk,
    input rst,
    input btn_in,
    input pls_1kHz,
    output reg btn_out
    );

reg btn0, btn1;
reg pl0, pl1;

reg [4:0] count;    // 20까지 셀 수 있는 5비트 카운터

always @(posedge clk or negedge rst) begin
    if (rst == 0) 
        begin
            pl0 <= 0;
            pl1 <= 0;
        end 
    else 
        begin
            pl0 <= pls_1kHz;
            pl1 <= pl0;
        end
    
end

// 라이징 엣지 감지 로직
always @(posedge clk or negedge rst)
begin
    if (rst == 0) 
    begin
        btn0 <= 0;
        btn1 <= 0;
        count <= 0;
    end 
    else if (pl0 & ~pl1)
        begin
            btn0 <= btn_in;
            btn1 <= btn0;
                if(btn0 != btn1)
                    count <= 0;
                 else if (count < 20)
                    count <= count + 1;
    end
end

always@ (negedge rst, posedge clk)
begin
    if (rst == 0)
        btn_out <= 0;
    else if (pl0 & ~pl1)
        if(count == 19)
            btn_out <= btn1;
end
    


endmodule

 

모듈의 주요 구성 요소 및 작동 원리:

  1. 입력 및 출력:
    • clk: 클럭 신호.
    • rst: 리셋 신호, 비동기식으로 동작.
    • btn_in: 처리할 버튼 입력.
    • pls_1kHz: 1kHz의 펄스 신호, 엣지 감지에 사용됩니다.
    • btn_out: 처리된 안정된 출력.
  2. 내부 레지스터:
    • btn0, btn1: 입력 버튼의 이전 상태를 기억하는 데 사용되어 엣지 감지에 활용.
    • pl0, pl1: 1kHz 펄스 신호의 이전 상태를 저장, 라이징 엣지 감지에 활용.
    • count: 안정된 상태의 지속 시간을 계산하는 카운터.
  3. 동작 과정:
    • 리셋 로직: 리셋 시 모든 내부 레지스터를 초기화합니다.
    • 엣지 감지 로직: pls_1kHz 신호의 라이징 엣지에서 현재 btn_in 상태를 샘플링하여 이전 상태(btn0)와 비교합니다.
      • 상태가 변화하면(btn0 != btn1) 카운터를 리셋.
      • 상태가 변하지 않고 안정적일 때(btn0 == btn1), 카운터를 증가시켜 특정 횟수(20번) 동안 같은 상태가 유지되면 btn_out을 현재 안정된 상태로 업데이트.
    • 출력 로직: pl0 & ~pl1 조건(1kHz 펄스의 라이징 엣지)에서 카운터가 19에 도달하면 btn_out을 btn1의 값으로 설정.

주의 사항 및 잠재적 이슈:

  • 펄스 폭: pls_1kHz 신호의 펄스 폭이 너무 짧거나 너무 길 경우 엣지 감지가 올바르게 작동하지 않을 수 있습니다.
  • 리셋 동작: 리셋이 비동기로 처리되기 때문에 클럭 신호의 안정적인 제공이 중요합니다.
  • 카운터 상한: 카운터의 최대 값이 20으로 설정되어 있어, 이 값에 도달하기 전에 입력 상태가 변경되면 출력은 업데이트되지 않습니다.

이 모듈은 버튼 입력의 진동을 효과적으로 필터링하여 더 안정적인 디지털 시스템 동작을 가능하게 합니다.

 

 

 

 

1kHz를 사용하는 이유

1kHz 주파수를 사용하는 주된 이유는 디바운싱 처리에 적합한 시간 간격을 제공하기 위해서입니다. 일반적으로 기계적 스위치나 버튼은 누를 때와 떼어낼 때 불안정한 접촉(바운싱)을 일으킬 수 있으며, 이런 바운싱은 몇 밀리세컨드(ms) 동안 발생할 수 있습니다.

  • 시간 해상도: 1kHz의 주파수는 1초 동안 1000번의 펄스를 제공하며, 각 펄스는 1ms 간격입니다. 이 간격은 대부분의 기계적 스위치 바운싱을 처리하기에 적합한 해상도를 제공합니다.
  • 필터링 효과: 이 간격을 이용하여 입력 신호에서 짧은 스파이크를 걸러내고 더 길고 안정적인 신호 변화만을 감지할 수 있습니다.

카운터 최대값 20 설정의 이유

카운터의 최대값을 20으로 설정하는 것은 입력이 일정 시간 동안 안정적으로 유지되었는지 확인하기 위함입니다. 이는 부적절한 신호 변화(잡음이나 일시적인 방해 신호)로부터 시스템을 보호하고 신뢰할 수 있는 입력만을 처리하도록 합니다.

  • 안정성 검증: 카운터가 20에 도달하려면 연속적으로 20ms 동안 동일한 상태를 유지해야 합니다. 이는 대부분의 바운싱이 그보다 짧게 지속된다는 점을 고려할 때, 입력이 안정화되었다고 간주하기에 충분한 시간입니다.
  • 반응 속도 및 정확성: 이 값은 빠른 반응 시간과 입력의 정확성 사이의 균형을 맞추기 위해 선택됩니다. 너무 낮게 설정하면 바운싱 때문에 오작동할 수 있고, 너무 높게 설정하면 입력 반응이 늦어질 수 있습니다.

이 설정들은 전형적인 사용 환경에서 최적의 성능을 보장하기 위해 신중하게 조정됩니다. 사용 환경이나 요구 사항에 따라 이 값들을 조정할 필요가 있을 수 있습니다.