STM32 정리

GPS(BN-880Q)

dawon-project 2025. 1. 10. 16:36

GPS : 위성 항법 시스템으로, GPS 수신 모듈은 지구 궤도를 돌고 있는 위성으로부터 나온 데이터의 분석을 통해 현재 위치의 위도, 경도, 시간 등을 시리얼 통신(UART 통신)을 통해 받아 볼 수 있는 모듈

 

<동작 원리>

  • 여러 송출원에서 신호를 쏘고, 이를 모듈에서 수신하여 자신의 현재 위치를 계산하여 알아내는데, 수신기의 위치를 특정하기 위해서는 최소 4개의 위성이 필요하다.
  • 이 중 3개 이상의 위성이 정확한 시간과 변위를 측정한 뒤 삼각점의 위치를 구하는 삼변 측량 기법으로 위치를 파악하고, 3개의 위성이 각각 측정하는 세개의 범위가 서로 교차되는 지점이 수신기의 위치가 된다.
  • 나머지 1개의 위성은 시간 오차를 보정하기 위해 사용한다.

<GPS의 통신 프로토콜 2가지(NMEA와 UBX protocol)>

 

 

<NMEA 프로토콜> -> 위도와 경도를 얻어낼 수 있는 것은 $GPGGA, $GPRMC, $GPGLL이다.

 

 

<각각의 NMEA 프로토콜 상세 분석>

 

0123456789
각각의 프로토콜 세부 설명

 

<BN-880Q 제품 스펙>

-> Tx 라이트 : 전원이 켜지면 파란색 표시등이 깜박이고, 데이터 출력이 있음을 나타낸다.

-> PPS 라이트 : 조명이 위치에 있지 않을때 불이 들어오지 않는다. 3D 위치를 지정하면 깜박이기 시작한다.

 

<NEMA-0183>

 

  • GPS 수신기가 위성 신호를 해석해 이 정보를 외부에 알릴 때 사용
  • 3개의 레이어(Physical, DataLink, Application Layer)로 구성되어 있다.
  • ASCII 코드로 직렬(Serial) 방식의 통신을 사용
  • $ 로 시작해서 GP가 앞에 붙는 NMEA 코드 이름, 콤마로 구분되는 각 필드 데이터, 맨 마지막은 16진수
    두자리 *3C 같은 형태의 체크썸이 나오고, CR, LF를 붙여 한 줄로 끝난다.

NMEA 프로토콜 예시

 

<BN-880Q 핀 맵>

<STM32와 BN-880Q 결선도>

 

<GPS 파싱과 그것을 해야 하는 이유>

GPS 모듈은 NMEA(National Marine Electronics Association) 프로토콜이라 불리는 형식으로 위치, 방향, 시간, 좌표 등의 데이터가 담긴 정보를 문자열 형태로 출력해준다. 따라서 GPS 수신기로 들어오는 문자열을 파싱(Parsing)해서 정수, 실수 등 원하는 값을 추출해 내는 작업이 필요하다.

-> GPS Raw 데이터는 굉장히 복잡하기 때문에 라이브러리를 사용하면 간편하게 원하는 정보를 얻어낼 수 있다.

-> 파싱(Parsing) : 원하는 데이터만을 추출하는 작업

 

 

<프로그램 동작 흐름도>

  1.  GPS 의 Baud rate를 9600으로 설정 ($GPGGA로 설정)
    [STM32(UART Tx) -> GPS(UART Rx)]
  2. GPS에 전원 공급시 바로 GPS 값을 수신 받음
    [STM32(UART Rx) <- GPS(UART Tx)]
  3. Sscanf 함수를 사용해서 체크섬 계산 -> $GPGGA가 맞는지 확인
  4. 위도, 경도를 "데이터 형식"으로 쪼갬(파싱 작업)
  5. Usb to TTL로 데이터를 보내 데이터가 정상적인지 확인

 

<STM32를 통한 GPS 코드 설명>

01
GPS.zip
9.41MB
BN-880Q_GPS_Module_Datasheet.pdf
0.58MB