versuche mich gerade zum ersten mal mit einem ESC + Motor (DX2207).
Habe diese Script hier genutzt für einen ersten Test
int ESCPin = 9;
int val = 0;
void setup() {
// put your setup code here, to run once:
pinMode(ESCPin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
for(val = 0; val <= 255; val += 5)
{
analogWrite(ESCPin, val);
delay(100);
}
}
Der Motor läuft damit hoch, denke 255 = Fullspeed (?)... soweit ok.
Unter 120 (zb: val <= 100) passiert nichts, >120 zuckt er, aber ca 150 läuft er...
Wie regeln ich den kompletten Drehzahlbereich? Also, er soll auch langsam drehen....
ESC werden mittels eines Servosignals geregelt und nicht mittels eines PWM Signals. Ein Servosignal entspricht nur einem Teilbereich eines möglichen Tastverhältnisses eines PWM-Signals.
Siehe servo.h Bibliothek.
danke.... ich muss hier diverse dingen durchprobieren
Hier ein weiteres Script was läuft, aber erst ab speed 25. darunter passiert nichts....
// this uses the Arduino servo library included with version 0012
// caution, this code sweeps the motor up to maximum speed !
// make sure the motor is mounted securily before running.
#include <Servo.h>
Servo myservo;
void arm(){
// arm the speed controller, modify as necessary for your ESC
setSpeed(0);
delay(1000); //delay 1 second, some speed controllers may need longer
}
void setSpeed(int speed){
// speed is from 0 to 100 where 0 is off and 100 is maximum speed
//the following maps speed values of 0-100 to angles from 0-180,
// some speed controllers may need different values, see the ESC instructions
int angle = map(speed, 0, 100, 0, 180);
myservo.write(angle);
}
void setup()
{
myservo.attach(9);
arm();
}
void loop()
{
int speed;
// sweep up from 0 to to maximum speed in 20 seconds
for(speed = 0; speed <= 25; speed += 5) {
setSpeed(speed);
delay(500);
}
delay (2000);
// sweep back down to 0 speed.
for(speed = 25; speed > 0; speed -= 5) {
setSpeed(speed);
delay(500);
}
}
Ein ESC Motor wird mit Impulsen von 1ms .. 2ms Länge gesteuert. Du solltest bei der Servolib nicht mit Winkelwerten steuern, sondern direkt die Impulslängen angeben. Also statt 0-180 Werte von 1000-2000 angeben.
Oder du gibst beim attach die Grenzwerte für die Winkel 0 und 180 mit an:
Wenn Du im attach die Grenzwerte angibst, wird begrenzt. Kleinere bzw. größere Werte können dann nicht vorkommen.
Gibst Du im attach keine Grenzwerte an, und steuerst statt mit Winkeln direkt in µs, kann Du auch größere/kleinere Werte vorgeben. Die Grenzen liegen dann bei min. 544µs und max. 2400µs. Das sind defaultmäßig dann auch die Werte für Winkel 0 bzw 180.
Ja
Wobei die Winkelgrade in dem Zusammenhang eigentlich nicht viel Sinn machen. Mit einer 'Position' hat das bei der ESC-Steuerung ja nichts zu tun. Ich würde deshalb direkt die Pulslänge vorgeben. Damit hast Du auch eine bessere Auflösung.
Aufgrund der Größe des Wertes im write-Aufruf erkennt die lib selbständig, dass Du nicht Winkel, sondern Mikrosekunden meinst. Du kannst stattdessen auch myservo.writeMicroseconds(); nehmen. Das macht aber keinen Unterschied.
Der writeMicroseconds-Aufruf ist ein ein paar 100 ns schneller, weil er nicht prüfen muss, ob du Winkel oder µs meinst .
In den technischen Daten steht ja nichts zur Minimaldrehzahl. Aber da das ganze ja für Quadrocopter und Hubschrauber ausgelegt ist, und die angegebenen Höchstdrehzahlen schon ganz ordentlich sind, dürften kleine Drehzahlen wohl eher nicht das Entwicklungsziel dieses ESC gewesen sein.