Heim Der Blog Blog Details

Verwendung von STM32 zur Herstellung von Multirotor-Drohnen (UAVs)

April 07 2025
Ampheo

Anfrage

Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.

SCHNELLE ANFRAGE
ZUR RFQ-LISTE HINZUFÜGEN
Die Verwendung von STM32-Mikrocontrollern zur Entwicklung einer Multirotor-Drohne (Unmanned Aerial Vehicle, UAV) ist eine beliebte Wahl aufgrund ihrer Echtzeitverarbeitungsfähigkeiten, Peripherieunterstützung und Robustheit.

Die Verwendung von STM32-Mikrocontrollern zur Entwicklung einer Multirotor-Drohne (Unmanned Aerial Vehicle, UAV) ist eine beliebte Wahl aufgrund ihrer Echtzeitverarbeitungsfähigkeiten, Peripherieunterstützung und Robustheit. Hier ist eine strukturierte Anleitung für dieses Projekt:

Verwendung von STM32 zur Herstellung von Multirotor-Drohnen (UAVs) - Blog - Ampheo


1. Hardware-Auswahl

A. STM32-MCU-Optionen

  • STM32F4/F7/H7-Serie (Hohe Leistung, Floating-Point-Unterstützung)

  • STM32G4-Serie (Ausgewogenes Verhältnis von Leistung und Energieeffizienz)

  • STM32F1/F0-Serie (Einfache Quadrocopter, weniger komplexe Steuerung)

B. Wichtige Komponenten

  • Flugcontroller-Platine (Eigene Leiterplatte oder Entwicklungsboard wie Nucleo-STM32H743)

  • IMU (Inertial Measurement Unit) – MPU6050 (Beschleunigungssensor + Gyroskop), BMI270, ICM-42605 oder BNO055 (9-DOF)

  • Barometer (MS5611, BMP280) – Für die Höhenregelung

  • Magnetometer (HMC5883L, QMC5883) – Für die Richtungsbestimmung

  • ESC (Electronic Speed Controller) – BLHeli_S / BLHeli_32 (für bürstenlose Motoren)

  • Motoren & Propeller – KV-Wert abhängig von der Drohnengröße (z. B. 1000KV für 5"-Drohnen)

  • Akku – LiPo (3S-6S, abhängig von den Motoranforderungen)

  • Funkempfänger (PPM/SBUS/CRSF – z. B. FrSky X4R, ELRS)

  • Telemetrie (Optional) – ESP8266/NRF24L01 für drahtlose Datenübertragung


2. Software-Entwicklung

A. Firmware-Entwicklung

  • RTOS (Echtzeitbetriebssystem) – FreeRTOS oder ChibiOS für Task-Scheduling verwenden.

  • Sensorfusion – Implementierung von Madgwick/Mahony AHRS oder Kalman-Filter zur Lagebestimmung.

  • PID-Regelung – Für die Motorstabilisierung (Roll, Pitch, Gier).

  • PWM-Ausgabe – Verwendung von STM32-TIMER + DMA für die ESC-Ansteuerung (OneShot125, DShot-Protokoll).

  • Kommunikationsprotokolle:

    • I2C/SPI (IMU, Barometer)

    • UART (GPS, Telemetrie, Empfänger)

    • CAN-Bus (Fortgeschrittene ESCs)

B. Entwicklungstools

  • IDE: STM32CubeIDE (kostenlos, HAL/LL-Unterstützung)

  • Bibliotheken:

    • STM32 HAL/LL (Hardware-Abstraktionsschicht)

    • Betaflight/INAV (Open-Source-Referenz) (Studium ihrer STM32-Implementierungen)

  • Debugging: ST-Link, Logikanalysator, UART-Printf


3. Flugsteuerungsalgorithmus

A. Grundlegende Regelungsschleife

  1. Sensoren auslesen (IMU, Barometer, Magnetometer)

  2. Sensorfusion (Berechnung von Roll, Pitch, Gier)

  3. PID-Regler (Anpassung der Motordrehzahlen basierend auf der Abweichung)

  4. ESC-Signalgenerierung (PWM/DShot)

B. Erweiterte Funktionen (Optional)

  • GPS-Navigation (Wegpunktverfolgung, Rückkehr zum Startpunkt)

  • Hindernisvermeidung (Ultraschall/LiDAR)

  • Bildverarbeitung (OpenMV, ESP32-CAM)

  • Drahtlose Telemetrie (MAVLink-Protokoll)


4. Beispielcode (STM32 + MPU6050 + PID)

c
 
// STM32 HAL-basierte PID-Motorsteuerung (vereinfacht)
#include "stm32f4xx_hal.h"
#include "mpu6050.h"  // MPU6050-Treiber

// PID-Parameter
float Kp = 1.2, Ki = 0.5, Kd = 0.1;
float roll_error, pitch_error, yaw_error;

void IMU_Update() {
  MPU6050_Read_Data(&accel, &gyro);  // IMU auslesen
  MadgwickAHRSupdate(gyro.x, gyro.y, gyro.z, accel.x, accel.y, accel.z); // Sensorfusion
}

void PID_Control() {
  roll_error = target_roll - current_roll;
  pitch_error = target_pitch - current_pitch;
  yaw_error = target_yaw - current_yaw;
  
  // PID-Ausgabe berechnen
  float roll_output = Kp * roll_error + Ki * roll_integral + Kd * (roll_error - prev_roll_error);
  float pitch_output = Kp * pitch_error + Ki * pitch_integral + Kd * (pitch_error - prev_pitch_error);
  
  // Motordrehzahlen anpassen (4 Motoren)
  motor1 = throttle + roll_output + pitch_output;
  motor2 = throttle - roll_output + pitch_output;
  motor3 = throttle - roll_output - pitch_output;
  motor4 = throttle + roll_output - pitch_output;
  
  // PWM an die ESCs senden
  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, motor1);
  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, motor2);
  // ... (Weitere Motoren)
}

int main(void) {
  HAL_Init();
  MPU6050_Init();
  while (1) {
    IMU_Update();
    PID_Control();
    HAL_Delay(2);  // ~500Hz Regelungsschleife
  }
}

5. Tests & Kalibrierung

  • Motortests – Richtige Drehrichtung sicherstellen.

  • PID-Abstimmung – Mit kleinen Werten beginnen, schrittweise erhöhen.

  • IMU-Kalibrierung – Bias in Gyroskop/Beschleunigungssensor eliminieren.

  • Funkkalibrierung – Stick-Eingaben überprüfen (PWM-Bereich 1000-2000µs).


6. Sicherheitsaspekte

  • Notfallsysteme (Signalverlust → Schweben/Landen)

  • Akkuüberwachung (Spannungsprüfung)

  • Propellerschutz (Für Tests in Innenräumen)


Fazit

Der Bau einer Multirotor-Drohne mit STM32 umfasst:
✅ Auswahl der passenden STM32-MCU (F4/F7/H7 empfohlen)
✅ Integration von IMU, ESCs und Funkempfänger
✅ Entwicklung der Firmware mit Sensorfusion + PID-Regelung
✅ Tests und Abstimmung für stabilen Flug

Für eine schnellere Entwicklung können Open-Source-Flugcontroller wie Betaflight, iNav oder ArduPilot (viele nutzen STM32) studiert werden.

Ampheo