본문 바로가기
robotics

[임베디드] 밸런싱 로봇 (1) - MPU6050, L298N

by yhames 2025. 9. 28.
728x90

기본개념

MPU6050 6축 자이로 가속도 센서

MPU6050은 3축 가속도계(Accelerometer)3축 자이로스코프(Gyroscope)를 통합한 6축 IMU(Inertial Measurement Unit, 관성 측정 장치) 센서입니다. MPU6050를 사용하면 가속도 + 회전 데이터를 동시에 읽을 수 있고, 이를 조합하여 자세 추정(orientation estimation), 기울기 감지, 자율주행 로봇의 자세 보정 등을 할 수 있습니다.

  • 3축 가속도계 (Accelerometer)
    • X, Y, Z 축 방향으로의 선형 가속도(중력 포함)를 측정
    • 로봇의 기울기, 이동 속도 변화 등을 계산할 때 활용
  • 3축 자이로스코프 (Gyroscope)
    • X, Y, Z 축 회전 각속도(각도 변화율)를 측정
    • 회전 동작, 방향 변화 추적에 사용

MPU6050은 I²C 통신을 지원하며, DMP(Digital Motion Processor)를 내장하여 자체적으로 센서 퓨전(가속도계 + 자이로) 알고리즘을 수행하여 쿼터니언 값을 얻을 수 있고, 이를 오일러(yaw, pich, roll) 값으로 변환할 수 있습니다. MPU6050의 DMP 펌웨어는 문서화가 부족하고 투명성이 부족하기 때문에, 칼만 필터 같은 센서 퓨전 알고리즘을 직접 구현하여 사용할 수 있습니다.

추가로 ROS에서 robot_localization 패키지를 사용하면 IMU와 휠 엔코더를 활용한 ELK 기반의 센서 퓨전을 할 수 있습니다.

Quora - What is DMP (Digital Motion Processor) in MPU9250/6050? 

 

L298N 모터 드라이브

L298N은 H-Bridge(에이치 브리지) 기반의 듀얼 채널 모터 드라이버 IC로, DC 모터나 스텝 모터를 제어하기 위해 사용되는 모듈입니다. Arduino, STM32, Raspberry Pi 등 마이크로컨트롤러와 연결하여 모터의 회전 방향, 속도(PWM)를 쉽게 제어할 수 있습니다. 최대 2개의 DC 모터를 독립적으로 제어할 수 있으며, 더 높은 전류가 필요한 경우 채널을 병렬로 연결할 수도 있습니다. 단일 채널당 이론상 최대 2A를 지원하며, 실제 사용에서는 약 1~1.5A를 권장합니다. 모터 구동 전압은 5V ~ 35V이고, 논리 회로 전압은 5V입니다. 5V 레귤레이터가 내장되어 있어 12V 이상 입력 시 5V 출력이 가능합니다.

모터드라이버가 필요한 이유

  • 전압/전류 차이
    - MCU의 I/O 핀은 낮은 전압과 소전류만 출력할 수 있습니다.
    - 모터 드라이버는 모터가 필요한 높은 전압과 전류를 대신 공급합니다.
  • 양방향 회전 제어 (H-Bridge)
    - 모터의 회전 방향을 바꾸려면 전류 방향을 반대로 해야 합니다.
    - H-Bridge 구조를 통해 MCU 신호만으로 정방향과 역방향 회전을 쉽게 구현할 수 있습니다.
  • 속도 제어 (PWM 지원)
    - PWM는 디지털 신호를 사용하여 아날로그와 유사항 효과를 내는 제어방식 입니다. (참고)
    - MCU에서 PWM 신호를 보내면 Duty Cycle(신호가 켜져있는 시간 비율)에 따라 전압이 달라져 점진적으로 속도를 조절할 수 있습니다.
    - ex) 예를 들어 5V PWM 신호: Duty Cycle 50% → "평균 전압 = 2.5V" → "모터 속도 = 최대 속도의 절반"
  • 역기전력(Back-EMF) 보호
    - 모터가 회전하면 코일에 모터에 걸린 전류와 반대 방향으로 전압이 발생합니다. (Faraday’s Law, 전자기 유도 법칙)
    - 모터 드라이버의 내부 다이오드가 역전압을 흡수하여 MCU를 손상시키는 것을 방지합니다.
  • MCU I/O 확장성
    - MCU 핀 수와 전류 용량만으로는 여러 모터를 동시에 제어하기 어렵습니다.
    - 모터 드라이버를 사용하면 여러 채널로 다중 모터를 독립적으로 제어할 수 있습니다.

 

개발환경

개발도구

구분 내용
통합 개발 환경 Arduino IDE

 

BOM

Arduino Uno(좌), JGA25-371 모터와 브라켓, 타이어(우)
LN298N 모터 드라이버(좌), MPU6050 자이로 센서(우)

상품명(링크) 수량
Arduino Uno 1
L298N 모터 드라이버 1
MPU6050 6축 자이로센서 1
기어드 DC 모터(12V) 타이어 세트 2
AA배터리(8입) 건전지홀더 2선 (12V) 1

 

H/W

H/W 구성도

 

HSI(Human System Interface)

Pin No. Pin Name Function 1 Function 2 Function 3 Used Pin Arduino
4 PD2       INT(MPU6050) D2
11 PD5     TX LED ENA(L298N) ~D5
12 PD6       IN2(L298N) ~D6
13 PD7       IN1(L298N) ~D7
14 PB0       IN4(L298N) D8
15 PB1       IN3(L298N) ~D9
16 PB2 SS(SPI)     ENB(L298N) ~D10
27 PC4 SDA(I²C) ADC[4]   SDA(MPU6050) A4
28 PC5 SCL(I²C) ADC[5]   SCL(MPU6050) A5

 

 

728x90
반응형