728x90
반응형
맨 위로 올라가기
Connecting IMU Sensor(MPU-6050) to STM32 Dev-Board.

 

 

MPU-6050 센서를 Arduino Uno 대신 Black Pill Board를 활용하여,
센서 데이터 값을 Console 창으로 출력하는 예제를 우선 만들어보려고 한다.

차후 BLE 통신으로 센서 값을 Slave Device로 송신하려면,
확실히 Custom 할 수 있을 만큼의 이해가 필요할 것으로 보인다.

 

https://github.com/chmnku/Point2Direction/blob/main/UnitTest/IMU/MPU_6050.c

 

Arduino Uno 를 활용하였던 예제를 참고하자면,

 

우선 IMU 센서를 사용하기 위해서는,
모듈간 Master와 Slave에 대한 이해가 요구된다.


Master(STM32F Dev-Board)- Controller

Slave(MPU-6050)- Peripheral

 

위와 같이 정리 할 수 있다.

그리고 Serial 통신이 아닌, I2C 통신으로 비동기 처리를 할 것이다.
그러면 STM32CubeMX에서 “I2C & Async” 두 가지 옵션이 선택되어야 할 것 같다.

 

그리고 

setup 함수가 Init 함수와 같을테니까,
그리고 콘솔 화면에도 출력하기 위해서는 Serial 통신도 해야할 것이다.
Serial 통신이면 “Serial & sync” 일 것이니까 출력을 위해 이 두가지 옵션도 선택.

그리고 위에 이어서 이 두가지는 모두 “통신(Communication) 관련 옵션이니,
Application Layer에서 수행이 이루어져야 할 것으로 보인다.

그렇다면 ‘ap.c’ 코드 apInit 함수에서 관련 함수의 호출 발생되어야 할 것으로 보인다.

 

  1. Serial 통신 초기화 (Baudrate: 115200(default))
  2. I2C 통신 초기화 (Parameter 따로 없음: Master)

 

그리고 Master(Black Pil)에서 Slave(Peripheral:IMU)로 전송 시작

무엇을? = “0x68” 이라는 Sensor의 주소

 

그리고 I2C 통신으로 해당 바이트를 대기열에 넣고 보낸다.
107과 0

XXXX_write(107);

XXXX_write(0);

대략 이런식으로 될 것으로 보인다.

라이브러리에 지원되는 것이 있는지 확인이 필요해 보인다.

 

그리고 마지막으로 endTransmission.

 

여기까지가 apInit 함수의 내용이다.


 

여기서부터는 apMain 함수로 while 문 내에 들어갈 것이다.

 

  1. 먼저 uint8_t i; 라는 i 변수를 초기화한다.
  2. int16_t acc_raw[3], gyro_raw[3];
    위와 같이 acc gyro 값에 대한 raw 데이터가 들어갈 배열을 초기화한다.
  3. 그리고
    0x68 센서 주소.
    59 write.
    endTransmission 전송
    request from 0x68 6번째
    for(i = 0; i < 3; i++) acc_raw[i] = (Wire.read() << 8) | Wire.read();
    for(i = 0; i < 3; i++) gyro_raw[i] = (Wire.read() << 8) | Wire.read();
  4. 그리고
    Serial 통신을 통하여 콘솔창에 해당 값들을 출력하기 위해,
    sprintf(str, "Acc X:%d Y:%d Z%d / Gyro X:%d Y:%d Z%d",
    acc_raw[0], acc_raw[1], acc_raw[2],
    gyro_raw[0], gyro_raw[1], gyro_raw[2]);
    Serial.println(str);
  5. 반복.

정리하자면, 요구되는 배경 기술들을 리스트업을 해본다.

 

  1. STM32F 개발 보드에서의 Serial 통신을 통한 Console 출력
    : UART
  2. STM32F 개발 보드에서의 다른 모듈과의 I2C 통신 설정
    : SDA, SCL
  3. 필요로 하는 GPIO 활성화 CubeMX에서의 Configuration List.

기존의 LED 테스트 템플릿을 활용하여, 다시 프로젝트를 생성한다.
***
모든 프로젝트에서 가장 우선시 되는 것은 내부 LED 점멸 테스트가 정상적으로
수행되어야 한다.


그리고 추가되는 옵션에 대해서는 소단위로 구분하여 디버깅해가며 작업한다.

 

======

 

Project 최대한 C언어를 사용할 예정이니, C++로는 Project 생성하지 않을 것이다.

 

이렇게 해서 기본 템플릿 구성까지는 완료하였다.

 

728x90
반응형

+ Recent posts