BLDC Motor mit einem Arduino UNO

Halogen zusammen,

ich bin zu blöde so ein alten Festplatten Motor zu Steuern.. zu meiner Geschichte,

Ich habe mir ein Arduino uno gekauft,
dann hab ich so eine alte Festplatte zerlegt und einen Motor rausgeschraubt, der hat 3 Pin
dann hab ich eine 20A Steuerung zugelegt, wobei ich so ein set gekauft hab da auch ein Motor dabei war,

den hab ich gekappt und per Youtube Videos alles zusammengebastelt,

Ich hab hier im Forum so ein Sketch (Code) für das Arduino in den Ardiono geladen,
da stand etwas von Pin9...den hab ich klaro auch da angeschlossen,
irgendwie geht dies alles nicht

der Motor dreht sich nicht..
nun ja

mit hin und her
wieder abgesteckt, zusammengefügt...irgendwie dann doch...auf einmal drehte sich der Motor...COOL..

aber dann am nächsten Tag nach einem Kaffee, NIX mehr...ich hab nur die Batterie abgesteckt...ehm eine AD Drone 2.0 Batterie,
mit 11,1 Volt...wobei ich den + und das - an das Arduino gehängt hab...

wenn ich den Code lade, stecke ich das Rote Kabel aus, damit ich mein Arduino nicht schrotte...

was mache ich falsch..

ich komm da nicht ganz mit..

wieso geht das teil einmal, wieso dann nimmer...

kann mir jemand helfen?

ah was mir noch aufgefallen ist,
sobald ich die Batterie dranhänge, zuckt der Motor bisschen...man hört auch eine art Geräusch aus den Motor kommen...

lg

Vermutlich hast du irgendwas gegrillt.
Zwar kann man nen Arduino über VIn (und NUR da!) mit 12V betreiben, aber clever ist das nicht unbedingt, da dann der Spannungswandler ganz schön viel Strom in Wärme umzusetzen hat.
Wie du deinen Motor bestromt hast, verrätst du nicht so recht- wenn du nem Festplattenmotor allerdings auch die 11.1V gegeben hast, dürft er hinüber sein. Bin mir ziemlich sicher, dass die nur mit 5V laufen sollten.
Vermutlich ist eine (oder auch mehrere ) Spulen durchgebrannt. Sollte sich eigentlich mit durchmessen rausfinden lassen.

ah,

ich habe rausbekommen..

meine Idee...bischen hier suchen, dann bin ich draufgekommen, ich hab einen Potentiometer vergessen

jetzt läuft das teil....COOL...

aber allerdings komisch...

ich habe diesen Code hier verwendet

// 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;
int analogPinLow = 3;     // potentiometer wiper (middle terminal) connected to analog pin 3
int analogPinHigh = 4;                       // outside leads to ground and +5V
int val = 0;           // variable to store the value read
int pwmpin = 6;


void arm(){
  // arm the speed controller, modify as necessary for your ESC  
  setSpeed(0);
  delay(2000); //delay 1 second,  some speed controllers may need longer
}

void setSpeed(int speeda){
  // 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(speeda, 0, 360, 0, 360);
  myservo.write(angle);    
}

void setup()
{
    Serial.begin(9600);
  myservo.attach(9);
  arm();  
}


void loop()
{
         // debug value
  int speeda;

  // sweep up from 0 to to maximum speed in 20 seconds
  if (speeda < 360){
  for(speeda = 0; speeda <= 360; speeda += 1) {
   setSpeed(speeda); 
   delay(20);
  
  }
    speeda = 0;

  }

//  // sweep back down to 0 speed.
//
//  for(speeda = 175; speeda > 0; speeda -= 5) {
//
//
//    setSpeed(speeda);
//    analogWrite(pwmpin, 255);
//    delay(30);
//  }
//  setSpeed(0);  

}

meine Frage daher,

wie kann ich den Motor dauerhaft laufen lassen...

muss ich unbedingt einen potentiometer ranlassen...? oder kann man dies irgendwie auch per Software lösen...
und dort in der Software irgendwie die Geschwindigkeit des Motors regeln...

1000 u/m bei dem Motor...irgendwie einfach 1000 Zahl eintragen,
2400 u/m bei dem Motor ...irgendwie 2400 eintragen...

würde das gehen?

sg

ich hab nix gegrillt, ich ab vorher nachgemessen,

bei dem 20A dings da kommen nochmal 3 Kabbeleien raus,
das eine Weiß, das ich an den PWM angeschlossen hab Nummer 9

dann die beiden anderen Rot auf 5V und der Black auf GND..

ich stecke die Batterie an die 2 Dicken Kabel Rot und Schwarz die dann direkt in das 20A Dings gehen an...dann hat der Motor Strom und das Arduino genauso..

den Potentiometer hab ich einmal Arduino Rot, Black und dann Analog auf Port A3 hängen..

und so läuft der Motor..

HILFE...

aber wieso läuft er nur 3 Sekunden, oder 2, dann haltet er, dann läuft er wieder 2 Sekunden dann nix mehr...usw

könnte man den Motor nicht dauerhaft laufen lassen?

habt ihr eine Idee..

Mach bitte Fotos und wichtig einen Schaltplan. Ich vermute, dass du so einiges nicht passt!

hier ein Bildchen

und mein Schaltplan,

Du kannst mal versuchen, den Arduino über USB zu versorgen. Dann muss aber 5V zwischen Regler und Arduino zwingend abgeklemmt werden! GND bleibt.

Nen Arduino würde ich auch nicht über BEC versorgen. Das ist riskant, denn es gibt BEC, die mehr als 5V rausgeben!
Obendrein weiss man selten genau, wie das BEC arbeitet, da können auch Störungen reinkommen.

Ansonsten: sag doch dass du nen stinknormalen RC-Brushless-Controller benutzt!
Damit dürfts easy sein.
Steuer das Teil mal einfach nur wie ein Servo an, gib also irgendeinen Wert raus mit:

writeMicroseconds(), natürlich nicht gerade die Neutrallage (wäre standardmässig 1500, kann aber bei dem Ding auch anders sein, evtl. muss man den anlernen-Anleitung lesen).
Aber: verstehst du von dem Programm überhaupt irgendwas?
Falls nicht: fang kleiner an. Einige Nummern kleiner, damit du erstmal nen paar Grundlagen hast, du scheinst nämlich nicht mal zu wissen, was dieses Programm überhaupt tun sollte.

Hallöchen zusammen,

inzwischen hab ich ein anderes Sketch gefunden, bei dem der Motor läuft, Wunderbar

um das Arduino aber nicht all zuviel belasten, hab ich ein Auto KFZ- zu USB umwandler verwendet,

jetzt läuft alles stabil und einwandfrei

vielen DANK für den Hinweis

Hattest du es auch ohne StepDown(KFZ -> USB) versucht ohne 5V mit einander zu verbinden? Dann würde sich zumindest das komische Verhalten klären.

Hallöchen zusammen, ich nochmal,

ich hab da eine andere frage,

Ich nutze im moment zur Ansteuerung ja ein Arduino ... bei dem ich ein Potentiometer nutze,

würde dies auch ohne gehen?

irgendwie im sketch eine zahl eingeben, wie zum Beispiel 2000 für dann 2000u/m oder 4000 für die 4000u/m

würde das gehen?

hier mein sketch

lg

#include <Servo.h> 

Servo myservo;  

int potpin = 0;  
int val;    
int analogPin = 3;

void arm(){


 myservo.write(0); 
 delay(2000); 
}
void setup() 
{ 
  Serial.begin(9600);
 myservo.attach(9);  
 arm();
} 

void loop() 
{ 
 for (int i = 0; i < 180; i++){
 val = i;    
myservo.writeMicroseconds(1200);
 myservo.write(val); 
int a = analogRead(analogPin);    
 Serial.println(a);   
 delay(15);    
} 
}

Natürlich geht das. Du mußt nur die Werte von der Seriellen schnittstelle einlesen udn dann dementsprechend Ausgeben. Ein ESC ist aber nicht dazu da, den Motor mit einer konstanten Drehzahl anzusteuern.

Wert vom zb vom PC über serielle schnittstelle übertragen zb mit dem Terminal im IDE.
Du empfängst die Zeichen, zb mit Serieal.Read; Wandelst die Zahlen-Zeichen in eine Zahl um und steuerst dann den Motor an. Versuch mal etwas zu suchen und dann helfen wir Dir schon weiter.
Grüße Uwe

Hallo,

irgendwie komm ich da noch nicht dahinter,

Ich nutze jetzt einen Arduino Micro,
und versuche grad den Sketch hier zu laden...

#include <TimerOne.h>

const byte pwmsender = 10;
const int fanspeedoffset = 52;
char buffer[3];
int fanspeed = 0;
int i=0;
boolean isfanspeedcomplete=false;

void setup()
{
 Serial.begin(9600);
 pinMode(pwmsender, OUTPUT);
 Timer1.initialize(20000);
 Timer1.pwm(pwmsender,52);
}

/**
* setzt den PWM Impuls, um Modelbausteller (regler) für Bürstenlose Motoren (brushless)
* zu regeln. PWM - Frequenz 50Hz (Periodendauer 20ms) , Impulslänge für Motor aus: 1 ms, für Motor vollgas: 1,5 ms
* Entspricht einer Duty von 5% bis 7,5% bei 20ms Periodendauer. Bei einer Auflösung von 1024 (10bit) sind das etwa 52 - 77.
*/
void setPWMRate()
{
 Serial.println(fanspeed);
 int duty = fanspeedoffset + fanspeed;
 if(duty>77){
   duty=52;
 }
 Timer1.pwm(pwmsender, duty);
 Serial.print("Duty: " );
 Serial.println(duty);
}

/**
* liest die Zeichen von Serial solange bis ein '\n' (ASCII-Wert 10) gesendet wird oder der Zeichenpuffer buffer voll ist.
* Danach wird fanspeed gesetzt und isfanspeedcomplete auf true gesetzt.
* buffer max. Zwei Ziffern speichern.
* Zeichen >9 und <0 sind ungültig, und werden ignoriert.
**/
void processFanSpeedMessage()
{
 int newfanspeed = 0;
 char digit=Serial.read();
 if( digit != 10 && i<2){
   if(digit>='0' && digit<='9')
      buffer[i++]=digit;
 }
 else{
   buffer[i]=0;
   newfanspeed = atoi(buffer);
   fanspeed = newfanspeed;
   isfanspeedcomplete=true;
   i=0;
   Serial.print("Fanspeed: ");
   Serial.println(fanspeed);
 }
}

/**
* prüft, ob etwas über Serial angekommen ist, und lässt dies verabeiten.
* wenn ein kompletter Wert über Serial gelesen wurde, wird der PWM Impuls gesetzt.
**/
void loop()
{
 if(Serial.available()>0 )
 {
   processFanSpeedMessage();
 }
 if(isfanspeedcomplete)
   setPWMRate();
 isfanspeedcomplete=false;
}

Aber irgendwie geht das nicht, und ich bekomm immer diesen Fehler hier:

"Timer1" was not declared in this scope

sketch_feb13a.ino: In function 'void setup()':
sketch_feb13a:14: error: 'Timer1' was not declared in this scope
sketch_feb13a.ino: In function 'void setPWMRate()':
sketch_feb13a:30: error: 'Timer1' was not declared in this scope

was mach ich falsch?

hapt ihr eine Idee?

Sg

" 'Timer1' gibts nicht", heisst die Fehlermeldung.
evtl. mal die Beispiele zu TimerOne.h ansehen...

( Code Tags konntest du schon mal :wink: )

Ich bin da nicht so bewandert was das anbelangt,

Ihr seit da besser als ich,

ich möchte den Sketch in den Arduino Micro laden, damit ich meine Festplatten Motor ansteuern kann,

Anleitung für das ganze fand ich woanders...aber wenn so ein Fehler kommt...weis meiner-einer nicht mehr weiter

um dann die Drehzahl zu ändern weis ich wo ich was ändern muss...

könnt ihr mir da helfen?

wäre sehr nett..

vielen DANK

Ja das mit dem Timer1 hab ich hinbekommen, jetzt lässt sich der Sketch ganz normal und ohne Fehler auf das Micro laden,

Ich hab jetzt ein anderes Problemchen,

Ich höre zwar piep,piep,piep, aber der Motor dreht sich nicht

{
Serial.begin(9600);
pinMode(pwmsender, OUTPUT);
Timer1.initialize(20000);
Timer1.pwm(pwmsender,52);
fanspeed=10;
setPWMRate();
}

mit dem hier hab ich probiert...aber nix..

wieso dreht sich der Motor nicht?

Ich hab vom Conrad.at den Grauper gekauft, da ich dachte der ESC funkt nicht...aber mit dem neuen ist das gleiche Problemchen vorhanden...

kann mir jemand helfen

ich möchte einfach dass ich den Motor auf Maximal drehen kann...fertig..
mehr will ich ja nicht

SG

Wenn der Motor nur mehrmals kurz piept, heißt das normalerweise das der Motorkontroller kein oder kein gültiges Signal empfängt. Manche Kontroller spielen sogar ein kurzes "Lied".

ja gut,

was soll ich jetzt machen?