zurück

ESC mit Arduino ansteuern

13.10.2019
Brushless DC-Motor mit ESC

In diesem Experiment wird ein bürstenloser Gleichstrommotor (auch BLDC für engl. "Brushless DC-Motor") über einen Drehzahlregler (auch ESC für engl. "Electronic Speed Control") mit dem Arduino angesteuert. ESCs werden im Modellbau vor allem für ferngesteuerte Modelle (z.B. Flugzeuge oder Quadcopter) verwendet, wobei jeweils ein ESC einen Motor steuert. Die ESCs werden bei dem Modell dann über ein Flight controller gesteuert.
In diesem Fall wird aber der Flight controller durch einen normalen Arduino Uno ersetzt. Mittels eines Potentiometers soll die manuelle Kontrolle der Drehzahl des Motors einstellt werden können.

Vorsicht: Experimenten mit BLDC-Motoren immer die Rotorblätter entfernen! Verletztungsgefahr!
Es empfiehlt sich außerdem, den Motor auf eine stabile Unterlage zu befestigen, z.B. ein Stück Holz zu schrauben.

Verwendete Bauteile

Ansteuerung

Ein BLDC kann nicht direkt mit einer Gleichspannung gesteuert werden, deren Intensität dann die Drehzahl bestimmt, sondern muss über ein Drehfeld bewerkstelligt werden. Die meisten bürstenloser Gleichstrommotor im Modellbau besitzen in der Regel 3 Anschlüsse, die jeweils abwechselnd mit 120° Phasenverschiebung bestromt werden. Die Frequenz dieses Drehfeldes bestimmt dann die Drehzahl.

Ansteuerung eines bürstenlosen Gleichstrommotors über ein Drehfeld

Aufbau und Anschluss

Aufbau der Schaltung

Der ESC besitzt 2 Hochstromeingänge für die Versorgung (dickeres rotes und schwwarzes Kabel), sowie einen 3-poligen Dupont-Stecker, an dem die Masse (meist schwarz oder braun) und das Taktsignal (meist orange oder gelb) der Steuerung anliegen. Die meisten ESCs haben zudem einen BEC (Battery Eliminator Circuit) integriert (mittleres, rotes Kabel), wodurch zusätzlich geregelte 5V für weitere Elektronik bereitgestellt wird und auf einen zusätzlichen Spannungswandler verzichtet werden kann. Die Signalleitung wird an dem gewünschten Pin des Arduino angeschlossen.

Achtung: GND des ESCs wird mit der des Arduinos verbunden, jedoch NICHT die rote 5V-Leitung, sonst kommt es zum Kurzschluss zweier Spannungsquellen!
Das Labornetzteil hat als Spannungsquelle nicht funktioniert, da anscheinend dauernd zwischen "Constant Voltage" und "Constant current" hin- und hergeschaltet wurde!

Das Taktsignal ist ein einfaches Rechtecksignal mit einer Periodendauer von meist 20ms. Wichtig ist die Pulsdauer, die zwischen 1ms und 2ms liegt, was in 0-100% Aussteuerung resultiert. Bei Servos ist dies die Drehung von 0° bis 180°, bei ESCs die Drehgeschwindigkeit.
Wichtig ist, dass viele ESCs gar nicht erst starten, wenn am Anfang die Aussteuerung 0% beträgt (servo.write(0)), es muss ein kleiner Offset vorgegeben werden (hier 25). Nachdem der LiPo angeschlossen wurde (zuerst VCC dann GND!) wird der Arduino angeschlossen. Evtl muss RESET auf dem Arduino gedrückt werden, damit die Inititialisierungs-Sequenz vom ESC mitbekommen wird.

Code

#include <Servo.h>

#define PIN_MOTOR 6
#define PIN_POTI  A2

Servo servo;
unsigned long startTime, delayTime = 1000; // in milliseconds
int val = 0;

void setup()
{
    Serial.begin(9600);
    startTime = micros();
    servo.attach(PIN_MOTOR);
    servo.write(25); // needed for initializing the ESC
    delay(2000);
}

void loop()
{
    if ((millis() - startTime) >= delayTime){
        val = map(analogRead(PIN_POTI), 0, 676, 30, 110);
        servo.write(val);
        Serial.println(val);
        startTime = micros();
    }
}
Video: Live-Demonstration