Hallo zusammen,
ich hab mir hier ein paar Threads zu dem im Betreff genannten Thema
durchgelesen, bin aber nicht wirklich weiter gekommen.
Mein Vorhaben ist ganz einfach: ich will einen Festplattenmotor mit
einem Arduino ansteuern (optional auch zwei, die sind identisch).
Es ist ein Arduino Duemilanove mit einem Atmega328 drauf.
Ich bin auf folgende Schaltung hier gestoßen, weiß aber nicht, wie ich
das auf den Arduino übertragen kann:
http://www.mikrocontroller.net/attachment/25613/hdd_avr.gif
Und beim Thema Quellcode weiß ich auch nicht so recht, wie ich anfange.
Kann mir hier vielleicht jemand behilflich sein?
Danke und Mfg
Andy
Hallo Andy, unten links im Bild sind die drei Halbbrücken, die den
Drehstrom erzeugen.
R10, R11, R12 sind die Rückführung der Gegen EMK
Schau mal bei BLDC nach.
Axel
Soweit ich das richtig verstanden habe, brauche ich für R10-12 jeweils
einen Analog-Pin (in der Schaltung Pins 23-25), doch wozu ist Pin 12?
Desweiteren ist mir das mit den Pins 14-19 nicht ganz klar. Brauch ich
dafür PWM, oder werden die "ganz einfach" geschaltet? Ungeachtet davon,
was nun der Fall ist: Wie bringe ich den Arduino dazu, die BEMF
auszumessen und danach zu schalten?
Dann ist da noch das abgerauchte Netzteil, was mir sorgen macht...ich
hab meinem Arduino mal gesagt gehabt, er soll die drei Pins einfach
nacheinander an und ausschalten (Motor mit y-Windung). An den drei Pins
hingen dann 3 MOSFETs, die die "Pins" von der Platte angesteuert haben.
Hab irgendwie außer acht gelassen, dass die Spulen vom Motor jeweils 2
Ohm Widerstand haben...das hat den Spulen im Netzteil bei 12V nicht so
sehr gefallen...gut, das Netzteil war ja auch bloß auf 800mA ausgelegt.
Deshalb hier auch die Frage, wie genau die Stromversorgung auszusehen
hat.
Hallo Andy,
ohne das Programm für die angegebene Schaltung zu kennen, würde ich
sagen, dass das Weiterschalten des "Drehstroms" per Analog-comparator am
Pin 12 gemacht wird, da die Analogeingänge dazu zu langsam sind.
>er soll die drei Pins einfach nacheinander an und ausschalten ?
im Bild sind 6 Ausgänge an den Brücken, was meinst Du mit "Motor mit
y-Windung"?
Hast Du kein Labornetzteil mit Strombegrenzung zum Testen?
Axel
Hi Axel,
Ok das mit dem Analog-Comparator wird mir zu hoch. Bin noch nicht so
lange damit beschäftigt.
Na es gibt Motoren, die nur drei "Pins" haben (wye-Windung). Da muss
dann nicht nur für einen Pin die Spannung geschaltet werden, sondern für
einen anderen die Masse, denn es sind ja 3-Phasen-Motoren, ergo muss bei
3 Pins irgendwo die Masse herkommen. Die von mir verlinkte Schaltung ist
auf diese Motoren ausgelegt. Sie beinhaltet 6 Transistoren, die
geschaltet werden müssen.
Dann gibts da noch Motoren, die auch 3-Phasig sind, jedoch einen vierten
Pin haben, der dann die gemeinsame Masse bildet (y-Windung). Heißt man
muss nur noch drei Transistoren schalten, anstatt, wie bei den
wye-Motoren, 6.
Nein ein Labornetzteil habe ich leider nicht. Wär mir auch ein wenig zu
teuer glaube ich.
MfG Andy
Hallo Andy,
wenn Du nur drei Transistoren zur Ansteuerung hast, dann schalte sie der
Reihe nach durch.
Wenn Du nicht messen willst, reicht es am Anfang sicherlich, wenn du
die Drehzahl langsam hochfähst. An das gemeinsame Ende der Wicklungen
kann dann ein Widerstand zur Strombegrenzung, dann kann nichts
passieren.
Axel
Na Transistoren hab ich genug. Und zur Not kann ich mir noch welche
besorgen.
Das mit der Reihe nach durchschalten habe ich auch schon gemacht. Ich
hab ja dem Arduino gesagt, er soll die Pins nacheinander an-, bzw
ausschalten und dazwischen ne Zeit lang warten. Ich hab den Motor mit
den MOSFETs und 12V Spannung so weit stabil bekommen, dass ich mit einem
Intervall von 5ms schalten konnte, ohne, dass er anhält. Wenn ich
richtig annehme, hat der Motor 6 Spulen, die paarweise jeweils eine
Phase bilden. Wenn ich mich nicht verrechnet habe, ergibt das ca
2000rpm. Und es sind Motoren aus
10krpm-Platten.
Das blöde beim langsamen Hochfahren (zumindest bei 12V) ist, dass der
Motor zu ruckartig springt, was oft dazu geführt hat, dass er eine der
Spulen übersprungen hatte und beim Einschalten der nächsten auf einmal
in die andere Richtung wollte.
Das Mit dem Widerstand habe ich auch schon überlegt, nur sind da zwei
Probleme: Zum einen haben die Spulen vom Motor nicht genug
Eigenwiderstand, sodass beim anklemmen eines 220 Ohm Widerstandes nix
mehr für den Motor übrig blieb (hab grad nix kleineres da). Zum anderen
will ich auch die 3-Pin Motoren betreiben können und die haben keinen
gemeinsamen Massepin.
Ich hab hier noch die komplette Elektronik von einer der Platten liegen.
Nur sind es allesamt SMD-Bausteine, und ich hab hier keinen SMD-Ofen, um
den Chip runter zu bekommen...geschweige denn, den wieder irgendwo
anders zu verwenden. Und es geht mir eh mehr um den Lerneffekt und um
das Prahlen hinterher, dass ich es geschafft habe :P
Ist ja keine Kunst, einen Chip zu verwenden, der für das Antreiben des
Motors entwickelt wurde.
Hätt ja sein können, dass du den Motor für was bestimmtes verwenden
willst.
Nur mit anlegen eines Drehstromes ist es ja nicht getan. Eigendlich muss
ja auch überwacht werden, ob der Rotor das tut, was du von ihm willst.
Die Überwindung der Trägheit am Anfang ist ein Beispiel. oder dass der
Motor auch sauber Weiterdreht, wenn du ihn belastest.
daher würde ich versuchen, den Treiber samt beschaltung so zu verwenden,
wie er auf der Platine ist.
Den Controller und was sonst noch stört runter schmeißen und die eigenen
Leitungen and die ehemaligen Controller-Pads
Wie gesagt...den HDD-eigenen Controller zu verwenden ist nicht mein
Ziel.
Und ich bezweifle, dass das Board noch funktioniert, es sieht ein wenig
ramponiert aus. Und auch wenn, dann hätte ich pProbleme mit der
Stromversorgung, weil es eine alte SCA-SCSI-Platte ist. Da versuch mal
rauszufinden, wo was liegt.
Seh ich das richtig, dass ich bei "Schritt" Eins, einen N-Transistor (U)
zusammen mit den (V) und (W) P-Transistoren schalte?
* 1 2 3
U N P P
V P N P
W P P N
Reicht da eine Schaltfrequenz von 1kHz aus? Also (U)-N für eine
Millisekunde high, dann (V)-N high und letztlich (W)-N für eine ms?
Für den Anlauf dann 10kHz PWM, mit 50% Duty, um die Wicklungen beim
Anlauf nicht zu gleich zu grillen (Andy, vielleicht hat genau das dein
Netzteil abgeschossen. So wie ich das verstanden habe, darf man BLDC
Motoren nicht mit voller Leistung anlaufen lassen).
Letztlich würde natürlich alles auf 10kHz fahren. Beim Anlauf (U)-N 1ms
high bei 50% Duty, dann (V)-N 1ms mit 50% etc. Ist der Motor auf
Drehzahl und die EMK folgt dem Drehfeld, könnte man auf 100% Duty gehen.
Könnte das so klappen?
Gruß
1 2 3 4 5 6
U 1 1 0 0 0 1
V 0 1 1 1 0 0
W 0 0 0 1 1 1
sollte laufruhiger sein, da doppeltes, ausgeglicheneres Stepping.
Evtl. auch mehr Drehmoment bei schnell drehendem Motor.
Jo
Lazlo Panaflex schrieb:
> Seh ich das richtig, dass ich bei "Schritt" Eins, einen N-Transistor (U)> zusammen mit den (V) und (W) P-Transistoren schalte?
Ne nicht ganz. Gehen wir mal von der oben verlinkten Schaltung aus:
Transistoren Q1-Q6. Heißt beim ersten Schritt wird Q4 und Q2 geschaltet.
Somit hat man erstmal einen Kreis. Q1 wär ja schwachsinnig und Q3 wird
nicht geschaltet, weil sonst das BEMF gegen Masse geht, ergo nicht
messbar wird.
Zur Frequenz: Ich hab mir das ausgerechnet und bei 6 Spulen, die
Paarweise eine Phase bilden, müsste ich mit einem Intervall von 1ms
schalten, um auf 10krpm zu kommen.
Ach und mir ist noch aufgefallen, dass doppeltes Stepping, wie Jo es
beschrieben hat, bei einem 3-Pin Motor nicht funktionieren kann, da man
keine Zwei Phasen gleichzeitig auf 1 Schalten kann. Das würde nur bei
einem 4-Pinner gehen, weil es da eine gemeinsame Masse gibt.
Also bin ich jetzt so weit, dass ich sagen kann, dass die Pins 14-19
(siehe Link im ersten Post) "normal" geschaltet werden, da PWM irgendwie
nicht viel Sinn macht. Was ich noch nicht weiß, ist, was ich mit Pins 12
und 23-25 mache. 23-25 Analog IN? Aber wozu ist dann 12 gut?
Irgendjemand hatte hier was von einem Analog-Comparator geschrieben,
doch komme ich nicht dahinter, wie das Teil anzuwenden ist.
Ich denke mal, das ist mit dem analogcomparator so gemeint wie in:
http://mikrokopter.de/ucwiki/BrushlessCtrl unter Rotorlageerkennung...
Genaueres dort nachlesen (ich habs auch noch nigcht verstanden ;-) )
Ich wunder mich gerade, warum ich nicht vorher auf die Seite gekommen
bin -.-
Die haben da auch Quellcodes für die Brushless-Controller...die kann man
sich bestimmt anpassen.
Andy schrieb:
> da PWM irgendwie> nicht viel Sinn macht
Hab vorhin diesen Link gefunden.
http://www.aerodesign.de/peter/2001/LRK350/SPEEDY-BL.html#Anker1592725
"Bei Anlauf kann man dem stehenden Motor nicht die volle Akkuspannung
draufknallen. Sonst ist seine Wicklung sofort verbrannt."
Frage ist, ob dies auf alle BLDC zutrifft.
Hallo Andy,
ich stehe gerade vor dem gleichen Problem. Bist du mitlerweile auf eine
Lösung gekommen? Wie bringe ich den Arduino dazu, die BEMF
auszumessen und danach zu schalten? Hast du eventuell auch einen Skript
für den Arduino den du mir mal zeigen könntest? (zum Vergleichen mit
meinem Skript)