STM32 - 초음파 센서를 이용한 거리측정

하만(Harman) 세미콘 반도체 설계 과정/ARM Architecture 이해 및 RTOS 활용

STM32 - 초음파 센서를 이용한 거리측정

semicon_circuitdesigner 2024. 7. 10. 16:15
728x90

[2024.07.11.목] 인천인력개발원


초음파센서 제어 절차
  • 10us TTL 신호로 Trigger
  • 송신기는 8개 40kHz 버스트 신호 송신
  • 수신기는 반향신호 수신(High 레벨 신호의 지속시간을 측정)
  • 지속시간과 음속을 활용하여 거리 계산
  • Trigger 신호로부터 Echo 신호가 감지되기까지의 충분한 대기시간이 필요(60ms~) -> 16.6Hz

1. New-STM32 Project로 새 프로젝트 생성

 

2.보드를 아래와 같이 선택

 

3. 프로젝트 명은 Test004-US로 설정 후 Finish

4. Schematic 확인 후 D4를 Trigger, D5를 Echo 단자로 연결

 

5. Test004-US.ioc에서 PB4와 PB5 핀 찾아서 각각 GPIO_Input, GPIO_Output으로 설정(핀 동작을 설정하는 과정)

 

6. 핀 우클릭 - Enter User Label로 Trig, Echo로 이름 설정하기

 

7. code generate

 

8. 다른 프로젝트에 있는 myLib.c를 core 폴더에 복사해오기

Copy Files로 복사해오기

 

9. 프로그램 시작 코드 작성

 

 

트리거, 에코 핀 설정 확인

10. 10us 신호로 Trigger하기 위한 코드를 작성

우클릭하여 필요한 변수의 종류, 개수 확인 후 코드 작성

  • 10us(micro second)의 delay를 주기 위해서는 시간 단위가 ms(milli second)인 HAL_Delay 함수를 사용할 수 없다. 따라서 새로운 MicroDelay 함수를 만들어야 한다.
  • PSC가 84면 1us당 1번 진동한다. 이를 이용하여 TIMer5에 값을 할당한다.
  • microDelay 함수: tmp_us는 경과시간을 의미한다. if 문 내에서 경과 시간이 (us)micro second보다 커질 때까지 while 문 내에서 반복되고, (us)micro second에 도달하면 while문에서 빠져나오며 해당 시간동안 Delay가 발생하게 된다.
    왼쪽 코드를 오른쪽 코드와 같이 간략화할 수 있다.
    - 연산을 줄여 Delay를 감소시키기 위해 다음의 코드로도 MicroDelay를 실행할 수 있다.

  • microDelay를 이용하여 Trigger 신호를 생성하기 위한 코드 완성

 

11. Echo 센서에서 신호를 받을 때까지 기다리는 코드 작성

echo의 신호가 t2-t1의 시간만큼 1의 상태

 

12. 거리를 구하기 위해 거리 = 시간 x 속력이므로, 이를 이용하여 거리를 구하는 코드를 작성한다.

  • t2 - t1의 시간은 micro second의 단위이므로 거리를 m단위로 구하기 위해 음속인 340m/s를 0.000340m/us로 변환하여 계산한다.
  • 시간은 초음파의 왕복(Transmitter -> Object -> Receiver) 시간이므로 계산한 거리에서 2를 나누어야 실제 거리가 나온다.
  • 거리(m) = (t2 - t1) * (0.000340m/us) / 2 = (t2 - t1) * (0.000170m/us)
    float 자료형의 printf 사용 에러를 해결하기 위해 위 세팅에서 Use float with printf from new... 체크

13. 코드 작성 완료 후 TeraTerm으로 테스트

 

 

14. cm 단위로 표시해주기

 

 

15. 출력을 가운데에 숫자만 바뀌도록 코드 수정(printf 내에 앞부분에 \033[x,yH 넣기)

 

 

16. 위에서 사용한 신호 생성과 거리 측정 동작을 함수로 만들어 코드 작성

 

 

728x90
반응형