Hey Leute,
ich habe wirklich schon einiges probiert aber leider bekomme ich mein ESC bzw. Motor einfach nicht zum Laufen.
Ich verwende folgende Komponenten:
Motor: Turnigy Aerodrive SK3 - 4250-350kv Brushless Outrunner Motor
Akku: ZIPPY Compact 5000mAh 5S 25C Lipo-Pack
ESC: Robbe Modellsport RO-CONTROL 6-60 2-6S -60(80)A 5V/5A SWITCH BEC Regler
Arduino NANO: AZDelivery Nano V3.0 mit Atmega328 CH340
Drehregler: KY-040 Drehwinkelgeber Drehgeber Rotary Encoder
Das Grundkonzept ist folgendes: Ein Potentiometer wird am Arduino NANO ausgelesen und mit diesen Daten wird dann die Geschwindigkeit des Motors Kontrolliert.
Wenn ich den ESC an den Arduino anschließe und mit Strom versorge kommt zuerst eine ton Abfolge (123 Töne steigend). Dann kommt für ca. 5 Sekunden nichts. Dann fängt der Motor im 2 Sekunden Takt an zu Piepsen und der Motor dreht sich nicht. Ich habe auch schon ausprobiert gar nichts an den ESC anzuschließen, also kein Signal zu geben, dabei passiert genau das gleiche wie wenn ich ihn an den Arduino anschließe.
Auf dem Seriellen Monitor werden mir die Korrekten werte zwischen 1000 und 2000 ausgegeben.
Ich habe die Ton Abfolge mit denen in der Bedienungsanleitung abgeglichen, leider ist diese aber unterschiedlich zu denen, welche bei Problemen oder bei Inbetriebnahme auftreten sollten. Wenn man die Beschreibungen in der Betriebsanleitung etwas weiter Interpretieren würde, dann passt es noch am ehesten zu der Ton Abfolge bei der ein unkorrektes Signal vom Empfänger vor liegt. Leider kann ich die Bedienungsanleitung nicht anhängen, hier ist aber die Internetseite auf der es die Anleitung gibt: https://www.robbe.com/de/RC-Elektronik/Antriebe/Regler/Robbe-Modellsport-RO-CONTROL-6-60-2-6S-60-80-A-5V-5A-SWITCH-BEC-Regler/8711
Ich habe auch schon probiert den Arduino nur über den Serielle Monitor laufen zu lassen - auch ohne Erfolg.
Was noch erwähnenswert ist: Ich habe nur das Signal Pin von dem ESC mit dem Arduino verbunden. Die Stromzufuhr vom BEC das der ESC liefert ist also nicht angeschlossen. Aber ich denke das sollte eigentlich keine Probleme verursachen.
Mein Code ist der folgende:
#include <Servo.h>
#include <Encoder.h> // Verwendung der <Encoder.h> Bibliothek
Servo ESC; // create servo object to control the ESC
const int CLK = 6; // Definition der Pins. CLK an D6, DT an D5.
const int DT = 5;
const int SW = 2; // Der Switch wird mit Pin D2 Verbunden. ACHTUNG : Verwenden Sie einen interrupt-Pin!
long altePosition = -999; // Definition der "alten" Position (Diese fiktive alte Position wird benötigt, damit die aktuelle Position später im seriellen Monitor nur dann angezeigt wird, wenn wir den Rotary Head bewegen)
Encoder meinEncoder(DT,CLK); // An dieser Stelle wird ein neues Encoder Projekt erstellt. Dabei wird die Verbindung über die zuvor definierten Varibalen (DT und CLK) hergestellt.
void setup() // Beginn des Setups
{
Serial.begin(9600);
pinMode(SW, INPUT); // Hier wird der Interrupt installiert.
ESC.attach(9); //ESC wird an D9 angeschlossen
ESC.writeMicroseconds(0);
delay(2000);
Serial.begin(9600);
}
void loop()
{
long neuePosition = meinEncoder.read(); // Die "neue" Position des Encoders wird definiert. Dabei wird die aktuelle Position des Encoders über die Variable.Befehl() ausgelesen.
if (neuePosition != altePosition) // Sollte die neue Position ungleich der alten (-999) sein (und nur dann!!)...
{
altePosition = neuePosition;
int Zahl = min(max(0,neuePosition),64); // Wert von neuePosition in [0,64] -> Der Drehregler gibt Zahlen nur in einem Bestimmten bereich aus darüber oder darunter bleibet er bei 0 bzw. 64
int val = map(Zahl, 0, 64, 1000, 2000); // Die werte Zwischen 0 und 64 werden in Werte von 1000 bis 2000 umgewandelt
Serial.println(val); // Die Zahlen werden im Seriellen Monitor ausgegeben
ESC.write(val); // Das Signal wird an den ESC weitergegben
}
}