프로젝트 소개

이 프로젝트는 STM32F103C8T6 마이크로컨트롤러 기반의 2륜 자체 균형 로봇 펌웨어입니다. HAL 라이브러리와 FreeRTOS 실시간 운영 체제를 사용하며, MPU6050 자세 센서와 3개의 캐스케이드 PID 제어 루프(각도 루프, 속도 루프, 조향 루프)를 통해 본체 균형을 유지하고, 블루투스 모듈을 통한 원격 제어 및 파라미터 조정을 지원합니다. **핵심 기능:** * **제어 방식:** 3중 캐스케이드 PID 제어를 사용하며, 모든 제어 루프는 TIM1 타이머 인터럽트에서 실행되어 FreeRTOS 작업 스케줄링의 영향을 받지 않는 1kHz 하드 실시간성을 보장합니다. * **소프트웨어 아키텍처:** FreeRTOS 기반으로, 애플리케이션 로직을 키 작업(keyTask), 블루투스 통신 작업(commTask), OLED 디스플레이 작업(displayTask)의 3개 작업으로 분할하며, 우선순위는 순서대로 낮아집니다. * **자세 계산:** 상보 필터 알고리즘을 사용하여 MPU6050의 가속도계와 자이로스코프 데이터를 융합하고 본체 기울기 각도를 계산합니다. * **통신 및 제어:** USART2를 통해 블루투스 모듈과 통신하며, 사용자 정의 프로토콜(`[태그,데이터]` 형식)을 지원하여 실시간 원격 제어(조이스틱) 및 파라미터 조정(슬라이더)을 수행합니다. 조정된 PID 파라미터는 키 K2를 눌러 확인한 후에 적용되어 오작동을 방지합니다. * **하드웨어 플랫폼:** 특정 균형 로봇 제어 보드(회로도는 `docs/` 참조) 기반으로, 메인 컨트롤러는 STM32F103C8T6이며, TB6612FNG를 사용하여 DC 감속 모터를 구동하고 OLED 디스플레이가 장착되어 있습니다. * **개발 환경:** STM32CubeMX로 초기화 코드를 생성하고, CLion을 IDE로 사용하여 개발하며, 컴파일 체인은 arm-none-eabi-gcc입니다. **기술 세부 사항:** * **PID 제어:** 각도 루프(Kp=5, Ki=0.1, Kd=5), 속도 루프(Kp=2, Ki=0.05, Kd=0), 조향 루프(Kp=4, Ki=3, Kd=0). 파라미터는 수동으로 튜닝되었습니다. * **공유 데이터 보호:** 무잠금 설계를 사용하며, Cortex-M3의 32비트 원자적 읽기/쓰기 특성을 활용하고 요청 플래그(`StartReq`/`ApplyReq`)를 통해 인터럽트 작업이 상태 변경을 처리하도록 하여 임계 영역 문제를 피합니다. * **리소스 사용량:** Debug 빌드에서 Flash 사용량은 약 94.6%(61956바이트), RAM 사용량은 약 78.0%(15976바이트)입니다. * **프로젝트 출처:** 이 프로젝트는 B站(빌리빌리) 업로더 "江协科技(江科大)"의 STM32 표준 라이브러리 균형 로봇 프로젝트를 기반으로 이식 및 재구성한 것으로, 표준 라이브러리를 HAL 라이브러리+FreeRTOS로 변경하고 엔지니어링 구조를 조정했습니다. 모든 하드웨어, 제어 방식 및 코드 로직의 원작성은 江协科技에 있습니다. **사용 설명:** * **작동:** 전원을 켠 후 K1 키를 눌러 PID 제어를 시작해야 합니다. K2 키는 블루투스로 수신된 PID 파라미터를 제출하는 데 사용됩니다. * **파라미터 조정:** 휴대폰 블루투스로 `[slider,파라미터명,값]` 형식의 데이터 패킷을 보내 PID 파라미터를 조정할 수 있으며, 조정 후 K2 키를 눌러 적용해야 합니다. * **컴파일 및 플래싱:** CLion으로 프로젝트 루트 디렉터리를 열고 툴체인과 플래셔를 구성한 후 컴파일 및 플래싱할 수 있습니다. **주의 사항:** * 프로젝트는 학습 참고용으로만 제공되며 상업적 프로젝트에 사용하는 것은 금지됩니다. * 회로도의 저작권은 江协科技에 있습니다. * 자이로스코프 제로 드리프트 및 중심 각도 오프셋은 실제 하드웨어에 따라 보정해야 합니다. * 블루투스 통신 전송 속도는 9600입니다.