아래 사진은 초음파 센서인 HC-SR04의 Timing Diagram 입니다.

image.png

HR-SC04 센서는 초음파를 송수신하는 T(Tx)와 R(Rx)가 있습니다. 핀 구성은 왼쪽부터 VCC, Trig, Echo, GND가 있고 Trig는 송신 명령인 트리거 입력이고 Echo는 수신된 거리 정보를 알 수 있는 에코 출력입니다.

타이밍 다이어그램에 첫 번째 사진을 보면 센서에 10us 동안 HIGH인 트리거 신호를 줘서 초음파를 발사합니다. 설계한 회로에서는 1MHz를 i_tick로 잡아서 10 사이클(10us)동안 HIGH로 유지합니다. 이 신호는 Trigger Input이고 btn_start를 누르면 트리거가 발생합니다.

두 번째 사진에서 Trigger 입력 후, 센서에서 초음파가 발사됩니다. 이 동작은 HR-SC04 센서 내부에서 자동으로 수행되므로 베릴로그 코드로 구현하지는 않았습니다.

세 번째 사진에서 초음파가 물체에 반사되어 돌아오면, 그 지연 시간만큼 Echo 핀이 HIGH가 됩니다. 그리고 이 HIGH 구간의 시간 길이로 거리를 측정할 수 있습니다.

HR-SR04 거리(cm) = Echo 시간(us) / 58

HC-SR04 초음파 센서의 TRIG/ECHO 신호를 베릴로그로 제어하고 물체까지의 거리를 cm 단위로 계산합니다. 계산된 거리 정보를 FND(7-Segment)에 표시하고 UART를 통해 PC에 거리를 전송합니다.

코드의 블록 다이어그램을 보면 아래와 같습니다. 지금부터 모듈별로 자세하게 알아보도록 하겠습니다.

image.png

Tick Gen 1MHz 모듈은 Tick Generator로 거리 계산 단위인 '1us'를 만들기 위해 사용하고 시스템 클럭(100MHz)를 1MHz로 분주하는 모듈입니다.

Strart Trigger 모듈은 Btn_Start 버튼을 누르면 10us TRIG 펄스를 출력합니다. 이 펄스는 초음파 센서에 신호를 보내는 역할을 하고 1MHz Tick을 기준으로 제어합니다.

HC-SR04 초음파 센서는 TRIG 핀에 펄스가 입력되고 ECHO 핀에서 HIGH 펄스를 출력합니다. HIGH 펄스는 초음파가 반사되어 돌아오는 시간이고, 이 시간을 us 단위로 측정하면 거리(cm)로 환산이 가능합니다.

HIGH Level Detector 모듈은 ECHO 신호의 rising edge에서 시작해 falling edge로 끝을 감지합니다. ECHO가 HIGH일 때 high_level_flag를 1로 유지하고 falling edge를 감지 시 done을 출력 후 계산기에 전달합니다.

Calculator 모듈은 high_level_flag가 1인 동안 Tick 수를 카운트하여 ECHO HIGH 시간(us)를 측정합니다. 이때 거리는 시간/58(cm)가 됩니다.

Hex_to_ASCII 모듈은 UART와 연결하기 위해 BCD 코드를 ASCII 코드로 변경해주는 모듈로 sr04_controller에 넣었으나 따로 분리하여 설계하였습니다

image.png