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.
Bei Experimenten mit BLDC-Motoren immer die Rotorblätter entfernen! Verletzungsgefahr!
Es empfiehlt sich außerdem, den Motor auf eine stabile Unterlage zu befestigen, z.B. ein Stück Holz zu schrauben.
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.
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.
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.
#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();
}
}
zurück