RTL Design/Verilog RTL 설계
Verilog RTL 설계(7월 24일 - 2, HC-SR04 기초)
유로 청년
2024. 7. 25. 08:05
1. HC-SR04
- 초음파를 이용해 거리를 측정하는 센서 모듈
- HC-SR04의 data sheet를 활용하여 basys3간에 연결하여 HC-SR04측에서 측정한 거리 값을 받도록 설계해 보겠다.
- 이를 통해 FSM(Finite State Machine)에 대해서 공부를 하는 동시에 Data Sheet에 대한 읽는 능력을 향상하는 것을 목적으로 하고 있다.
- HC-SR04와 MCU 간에 회로 연결, 통신 과정 및 방법 등 차근차근 배워보도록 하겠다.
2. HC-SR04의 동작 원리
- HC-SR04의 동작 원리에 대해서 그림으로 표현하자면 다음과 표현 할 수 있다.
- HC-SR04 센서 모듈이 다음과 같은 과정을 거쳐 거리를 측정하게 된다.
- TX (Transmitter) : 초음파를 발사하는 부분
- RX (Receiver) : 반사된 초음파를 받는 부분
- TX 측에서 초음파를 발사하게 되면 발사된 초음파는 원뿔 형태로 나아가게 된다.
- HC-SR04인 경우에는 15 ~ 30도 사이의 각도를 갖고, 초음파가 나아가게 된다.
- 이렇게 발사된 초음파는 전방에 있는 사물에 부딪쳐 난반사하게 되며, 이렇게 반사된 초음파를
RX 측에서 받게 된다.
- 이렇게 TX 측에서 초음파가 발사한 시점부터 RX 측에서 받게 된 시점까지 시간을 계산한 뒤,
초음파의 속도인 343m/s를 곱하여 HC-SR04와 사물과의 거리를 계산하게 된다. - 하지만, 주변 자기장, 습도, 전방에 위치한 물체의 표면에 따라 측정 값의 변화가 발생할 수 있다.
- HC-SR04 센서 모듈인 경우, 유효 측정 거리가 2m 내이기 때문에 이를 고려하여 사용할 필요가 있다.
3. HC-SR04와 MCU와의 연결
- 위 그림은 MCU와 HC-SR04의 연결 및 주고 받는 신호를 표현한 것이다.
- MCU와 HC-SR04 간에 통신 과정은 다음과 같은 단계를 거치게 된다.
1단계) MCU측에서 HC-SR04의 TRIG 단자에 10us 동안만 활성화된 Pulse Wave를 준다.
2단계) HC-SR04 측에서는 해당 Pulse Wave를 받게 되면 주파수가 40kHz인 초음파 펄스 8개를
TX (Transmitter)을 통해 쏴주게 된다.
3단계) HC-SR04 측에서 초음파가 발사된 시점부터 물체에 반사된 초음파가 되돌아 오는데까지
걸린 시간을 계산하게 된다.
4단계) 3단계에서 계산한 걸린 시간을 MCU에게 걸린 시간동안 High-level인 Pulse wave를 준다.
5단계) MCU는 해당 펄스파를 받고, 이를 계산하여 HC-SR04와 물체사이의 거리를 계산하게 된다.
4. MCU 측에서는 어떤 신호를 어떻게 주어야 하는가?
- 위 그림은 MCU와 HC-SR04간에 주고 받는 데이터 신호를 그림으로 표현한 것이다.
- MCU와 HC-SR04와의 통신 과정을 크게 4개의 상태로 나누어 볼 수 있다.
- Input_Trigger : 10us 동안 활성화된 Trigger Pulse wave를 HC-SR04의 TRIG 단자에 전달한다.
- Wait_For_Pulse : Echo Pulse의 Positive edge가 올 때까지 대기한다.
- Calc_Echo_Pulse : Counter를 통해 HC-SR04로부터 받은 Echo Pulse을 Positive edge ~ Negative edge
까지를 Counting하여 시간을 계산한 후, 이를 토대로 거리 계산한다.
- IDLE : Echo Pulse가 끝나는 동시에 다음 Trigger Pulse를 위해 잠시 대기상태에 들어간다. - 한 번 MCU와 HC-SR04간에 데이터를 주고 받는 과정은 대략 50ms 시간이 소요된다.
S_IDLE (10ms) + Input_Trigger (10us) + Sonic_Burst (0.2ms) + Echo_Pulse (36ms, no Object Detected)
= total time (50ms)
5. State diagram
- MCU와 HC-SR04와의 통신 과정을 4개의 상태로 나누어 상태도를 그리면 다음과 같이 그릴 수 있다.