Im Nachbarforum habe ich ja schon auf den ähnlichen Thread geantwortet, jetzt möchte ich auch hier Feedback geben, ich habe so einen BL Getriebemotor im Einsatz und mir selbst einen Regler programmiert, der den PWM Impuls vom Empfänger umwandelt und richtig auf die beiden Steuerleitungen ausgibt (Richtung und Geschwindigkeit).
Mit einem einfachen Arduino Nano kann ich den BL Motor mit den digitalen Steuereingänge über einen Empfänger, bzw. zum Test einen Servotester ansteuern. Hier ist ein kleines Video.
Was braucht man:
- Arduino Nano (geht auch ein Klon aus China, ca. 3,6€)
- ein Servo Kabel zum Anschluss an den Empfänger (vom Empfänger wird nur der Impuls benötigt, die Spannungsversorgung kommt von den 12V)
- einen 2k2 Ohm Widerstand, der die PWM Leitung lowaktiv legt (damit wird sichergestellt das der Motor nicht kurz anläuft wenn man die Batterie ansteckt. der Arduino braucht ein paar Sekunden zum Booten
- in meinem Fall noch zwei 10k Pullupwiderstände, da ich noch zwei Taster als Endabschalter drinnen haben, der Motor schaltet somit ab wenn er die Endposition erreicht hat.
die Funktion bzw. der Aufbau sieht so aus:
- der Motor ist mit rot und schwarz direkt an den 12V angeschlossen (somit spart man sich für den Nebenantrieb auch einen CTI Thor oder ähnlichen Regler also 18€...)
-die blauen und weiße Leitung geht zum Arduino
- der Arduino ließt das Servosignal ein, und wandelt es in zwei Signale um: Eins für die Drehrichtung (weiße Leitung zum Motor) und eins für die Geschwindigkeit (die blaue PWM Leitung). Die Drehrichtung ist nur ein digitales High oder Low, die Geschwindigkeit ist ein PWM Signal mit 0-100% Impulsbreite.
Ein erster Test im Kippaufbau war auch mit der Endabschaltung erfolgreich, die ganze Schaltung ist am Schluss nur so groß wie der Nano, man braucht ja nur die 3 Widerstände, die man auf dem Nano verlöten kann.
Ich denke auch ungeübte können die Schaltung nachbauen bzw. den Arduino Programmieren.
Zum Motor selbst: der läuft sehr leise, hat Kraft ohne Ende und zieht deutlich weniger Strom als ein Bürstenmotor...
Die Scheibe am Motor ist nur zum Messen der Drehzahl... hat nichts mit der Schaltung zu tun...
hier ist der Schaltplan:
und das Programm für den Arduino Nano sieht so aus: (btw. die Nano Klone haben noch den alten Bootloader, also in der Arduino IDE "old Bootloader wählen:
Code:
const int PWM = 10; //Eingangspin zum Einlsen vom Empfängersignal
const int unten = 3; // Digitalin Endabschalter unten, lowactice = abgeschalten, Pull-up R auf +5V
const int oben = 4; // Digitalin Endabschalter oben, lowactive = abgeschalten, Pull-up R auf +5V
const int directionout = 8; // Ausgangssignal digital für Drehrichtung, LOW = rückwärts HIGH = vorwärts
const int speedout = 9; // speedput PWM für BL Motor Bereich 0-255
int speedin = 0; // Variable zum Mappen vom PWM Signal mit dem PWM output,
int pwm_value = 01; //Variable zum Zwischenspeichern vom PWM Impuls
// die Motorrichtung + Link zu den richtigen Endabschalter muss überprüft werden CW Low + Endabschalter unten ist motorabhängig!
void setup() {
pinMode(PWM, INPUT);
pinMode(unten, INPUT);
pinMode(oben, INPUT);
pinMode(directionout, OUTPUT);
Serial.begin(115200);
}
void loop()
{
pwm_value = pulseIn(PWM, HIGH);
if ((pwm_value <1000) || (pwm_value > 2000))
{
analogWrite(speedout, 0);
}
else if ((pwm_value < 1440) && (digitalRead(unten)== HIGH )) // abwärts, Endabschalternabfrage, directionout = LOW, speedout 0-255 entspricht dem pwm_value von 1490 - 1000
{
digitalWrite(directionout, LOW);
speedin = map(pwm_value, 1440, 1000, 0, 255);
analogWrite(speedout, speedin);
}
else if ((pwm_value > 1560) && (digitalRead(oben)== HIGH )) // aufwärts, Endabschalternabfrage, directionout = HIGH, sppedout 0-255 entspricht pwm_value 1510 - 2000
{
digitalWrite(directionout, HIGH);
speedin = map(pwm_value, 1560, 2000, 0, 255);
analogWrite(speedout, speedin);
}
else
{
analogWrite(speedout, 0); //neutral wenn 1490 <= PWM <= 1510 oder ein schalter angegangen ist, directionout egal, speedout = 0 damit wird sichergestellt das der Motor
}
delay(1);
}
Ich möchte nochmal betonen, das ich keine Gewähr für das Programm übernehme! Ich habe aber versucht ein paar Sicherheitsmerkmale einzubauen:
1. wenn kein Servoimpuls anliegt, das zwischen 1000 und 2000ms ist, geht der Motor aus (falls der Empfänger einen grösseren Bereich hat bitte den Servoweg begrenzen)
2. der Pull-down Widerstand sorgt dafür das der Motor nicht anläuft wenn der Arduino ausfällt, da dann die PWM Leitung auf GND gezogen wird, hat der Impuls 0%.
Die Endschalter können weggelassen werden, aber die Widerstände müssen angeschlossen werden oder das Programm angepasst und die Bedingungen bei den If Abfragen geändert werden....
hier habe ich den Einbau gerade beschrieben, bin mal auf die Tests am Parcour gespannt...
Ich freue mich über Feedback
Gruß
Wolfgang