Forum: Mikrocontroller und Digitale Elektronik Arduino und Festplattenmotor


von Andy (Gast)


Lesenswert?

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

von Düsendieb (Gast)


Lesenswert?

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

von Andy (Gast)


Lesenswert?

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.

von Düsendieb (Gast)


Lesenswert?

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

von Andy (Gast)


Lesenswert?

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

von Düsendieb (Gast)


Lesenswert?

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

von Andy (Gast)


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

Schon mal überlegt den original motor-Treiber der Festplatte zu benutzen 
(falls das ein extra IC ist)?
möglicherweise kann man sich da dran hängen.

von Andy (Gast)


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von Andy (Gast)


Lesenswert?

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.

von Lazlo Panaflex (Gast)


Lesenswert?

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ß

von Jo (Gast)


Lesenswert?

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

von Andy (Gast)


Lesenswert?

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.

von Lazlo Panaflex (Gast)


Lesenswert?

Q4 zusammen mit Q2 macht Sinn, danke. Die Spannung fließt demnach bei U 
rein, durch die Spule und bei V wieder raus gegen Masse.

von Andy (Gast)


Lesenswert?

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.

von Bernhard M. (boregard)


Lesenswert?

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 ;-) )

von Andy (Gast)


Lesenswert?

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.

von Lazlo Panaflex (Gast)


Lesenswert?

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.

von Lukas (Gast)


Lesenswert?

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)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.