Samstag, Oktober 15, 2011

Brushless Outrunner Ansteuerung

Ich möchte hier aufzeigen, wie ein BLCD Motor über einen Arduino angesteuert wird. Ich beziehe mich dabei auf diese bei Hobbyking erworbene Komponenten:

  • Turnigy G46 Brushless Outrunner 670kv
  • TURNIGY Sentry 60amp Speed Controller
  • ZIPPY Flightmax 4200mAh 4S2P 30C LiFePo4 Pack
  • HXT 4mm Gold Connector w/ Protector (10pcs/set)

Die Stecker an dem Zippy Akku waren grösser (glaube 5.5mm). Hab sie durch die 4mm Version ersetzt; der Leiter passte gerade noch so. Am Speed Controller und Motor waren keine Stecker/Buchsen.

Gesamt Aufbau:

Motor eingespannt in Maschinenschraubstock und Akku:

Controller:

Arduino:

Der Arduino Sketch:

// 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  
  myservo.write(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, 63, 117);
  myservo.write(angle);    
  Serial.print("Speed=");
  Serial.print(speed);
  Serial.print(" Angle=");
  Serial.println(angle);
}

void setup()
{
  Serial.begin(115200);
  myservo.attach(3);
  arm();  
  Serial.println("Armed");
}


void schnellLangsam()
{
  int speed;

  // sweep up from 0 to to maximum speed in 20 seconds
  for(speed = 0; speed <= 100; speed += 5) {
    setSpeed(speed);
    delay(1000);
  }
  // sweep back down to 0 speed.
  for(speed = 95; speed > 0; speed -= 5) {
    setSpeed(speed);
    delay(5000);
  }
  setSpeed(0);  
  delay(5000); // stop the motor for 5 seconds
}  


void loop() {
    schnellLangsam();
}


/* vim:set filetype=cpp: */