Sehr geehrte Forum-Mitglieder,
ich beschäftige mich zur Zeit mit dem Ansteuern eines Festplattenmotors
(BLDC) mit Hilfe eines Brushless Drivers mit der Bezeichnung TDA5241 von
Philips. Zur Steuerung der Ausgangsspannung der Treiberstufe und somit
zur Steuerung der Drehzahl dient ein integrierter Operationsverstärker
mit einem festen Übertragungsfaktor (transfer gain ?!). Die
Ausgangsspannung für die Spulen kann somit linear geregelt werden. Der
entsprechende PIN heißt, wie im Datenblatt zu sehen, "CTLIN". Auf der
Seite 12 ist ein entsprechender Graph abgebildet der die Motorspannung
als Funktion der Eingangsspannung am PIN "CTLIN" darstellt. Ohne ein PWM
Signal läuft der Motor schnell hoch und dreht auch stabil. Als Last
hängen an dem Motor die zwei Festplattendisk und der entsprechende
Distanzring aus Aluminium, sowie der Befestigungsring und nur zwei (180°
zueinander->Vermeidung von Unwucht) von insgesamt acht Schrauben.
Mikrocontroller: Atmega128
Das PWM Signal erzeuge ich in dem Fast-PWM Mode. Der Prozessor läuft auf
14,7456Mhz. Als Prescaler benutze ich 1 und die Auflösung des Timers und
somit des PWM Signals beträgt 8 Bit (256). Zum Testen habe ich ein
Programm in C geschrieben, welches das PWM Signal in 1er Schritten
inkrementiert, so dass der Motor langsam hochfährt. (Rampenfunktion?!).
Nun ist das Problem, dass bei einem OCR Wert ab 100 bis 150 der Motor
hin und her zuckt und nicht mehr ruhig läuft. Das liegt wohl daran, dass
die Restwelligkeit des PWM Signals in diesem Bereich, besonders bei
einem Tastverhältnis von 50%, am größten ist. Als Filter habe ich einen
Tiefpassfilter der ersten Ordnung benutzt mit folgenden Werten:
R=100kOhm
C=100nF (Kerko).
Diese Werte ergaben sich aus den Gleichungen, welche man in dem Dokument
von Herrn K. Albers (An dieser Stelle vielen Dank für das tolle
Dokument!) findet, welches er hier in einem Post zur Verfügung gestellt
hat. Hier sei nochmal der Link zum PDF:
http://www.mikrocontroller.net/attachment/79923/PWM_Tiefpass_Restwelligkeit.pdf.
Leider halfen die anderen Artikel zur Berechnung eines Tiefpasses, die
man hier findet nicht weiter, so dass ich mich nun an euch wende. Wie
sollte ich am besten Vorgehen ? Eine Frage bezüglich des Datenblattes
vom Motortreiber hätte ich noch und zwar was ist mit dem Satz:
"Compensation of the motor pole is done by an external capacitor
(CAP CPC)." auf der Seite 12 direkt unter dem Graphen gemeint ?! Meint
er damit die Versorgung der Spulen, wenn sich der Anker zwischen den
Magnetpolen befindet ?.
Hier ist mein Programmcode:
1
#include<avr/io.h>
2
#include<util/delay.h>
3
//F_CPU=14745600UL wurde bereits in Symbols definiert
Zur Vermeidung des "zuckens" vom Motor, inkrementiere ich in dem
"kritischen" Bereich höher, damit ich aus diesem Bereich schnell
rauskomme, aber das ist ja keine schöne Lösung, vor allem, weil mir dann
dieser Drehzahlbereich des Motors entfällt. Ich bin für jeden Tipp sehr
dankbar.
mfGruß,
opcode
Hi,
frag' mich gerade nur, wie Du das PGIN Signal erzeugt hast, da der
Baustein ja schon etwas älter ist, und neuere Motoren dieses Signal so
zumindest nicht mehr haben. Muß nun zugeben, dass ich den Atmega128
nicht kenne, aber "FAST PWM" hört sich wie Kanonen auf Spatzen an. Ein
paar Kilohertz sollten schon reichen. Wie sieht Deine Schaltung aus?
Hi,
ich kann mir nur schwer vorstellen, dass der Grund für das Problem die
Restwelligkeit der gefilterten PWM ist.
Mach als Test einfach mal ein 2 Filterglied mit 100k und 100nF ran.
Was macht die Schatung jetzt? Natürlich den Problembereich auch wieder
durchfahren :-)
Wie sieht denn Deine Versorgungspannung aus? Ist die gut gefiltert,
woher?
Kannst Du da mal einen Akku/Batterie anschliessen? Was passiert nun?
Was kannst Du wie Messen? Strom, Spannung mit Multimeter oder Oszi?
Gruß,
avrGerd
Hallo,
vielen Dank das Ihr euch so schnell gemeldet habt; da fühlt man sich
schonmal nicht mehr so alleine :-).
Zu Naseweis:
Den PG-IN Signal benutze ich gar nicht. Ich regel nicht die Drehzahl,
sondern steuer Sie einfach durch die Ausgangsspannung der Treiberstufe.
Zu avrGerd:
Die Spannungsversorgung des Motors ist ein Netzteil von einem Drucker
(glaube ich!). Ich habe zur Glättung einfach 100nF gegen Masse
angeschlossen.
Die Spannungsversorgung des AVRs wird durch ein altes Handy-Ladegerät
gewährleistet, welches aber auch wiederum auf der fertigen Platine
gefiltert wird. (Ich habe das atmega128 testboard von avr-tools.com).
Zum Messen habe ich ein Multimeter (UT70B), welches kein billig
10€-Baumarkt Teil ist und ein Oszilloskop habe ich hier auch stehen,
aber leider nur ein analoges mit Baujahr 1975, welches ich von meiner
Hochschule geschenkt bekommen habe, weil es irgendwie ausgesondert
werden sollte. Es ist ein altes Philips 3226P (0-15Mhz).
Du meinst ich solle nun den Tiefpass identisch in Reihe nochmal schalten
und somit einen Filter 2. Ordnung aufbauen ?!. Ich teste das eben aus.
opcode schrieb:> Den PG-IN Signal benutze ich gar nicht. Ich regel nicht die Drehzahl,> sondern steuer Sie einfach durch die Ausgangsspannung der Treiberstufe.
Das musst Du mir mal erklären!
Bitte stell mal einen Schaltplan/Skizze hier rein.
Mit 100nF kannst Du die Ausgangsspannung zwar gegen HF filtern, was ich
meine ist sowas wie eine Stützelko am Ausgang des Netzteils.
Wenn es daren schon hapert kann der Rest nichts sinnvolles machen.
Wenn der Oszi funktioniert, dann ist der gut genug um die
Versorgungsspannungen darzustellen. Mach ein Foto und stell das hier
rein.
avrGerd
Hallo avrGerd,
den Schaltplan mache ich gleich sofort fertig. Nur eine Frage bezüglich
deiner gewünschten Bilder:
Möchtest du die Bilder unter Last, also wenn der Motor sich dreht oder
im Leerlauf, also Netzteil (12V) für Motor direkt an Oszi ?!.
PS: Reicht ein Hand skizzierter Schaltplan ?
Mach erstmal den Schaltplan. Handskizze reicht.
Evtl. ist das Problem dann schon zu "sehen".
Wie ist eigentlich der Aufbau?
Platine Steckbrett?
Auch hier hilft ein Foto.
avrGerd
Hallo avrGerd,
der Schaltplan sowie die Bilder des Aufbaus befinden sich im Anhang. Die
Bilder habe ich in ein RAR Dokument gepackt. Entschuldigt, dass ich den
Schaltplan als JPEG hochgeladen habe,was gegen die Regel ist, aber es
wurde halt eingescannt.
Hallo avrGerd,
Schaltplan der 12V Versorgung ? Die 12V hänge ich direkt an die 12V
Marke im Schaltplan ran. Das ist einfaches Netzteil. Wie ich schon
sagte, dient als Filter nur der 100nF gegen Masse, der von der 12V Marke
abgeht.
Bis Morgen !
Falls Du nicht schlafen kannst:
zum Oszi:
1. Bilder der 12V im Problembereich
2. Bilder Signal CTLIN
3. Bilder PWM im Problembereich
Ist das 12V Netzteil ein Steckernetzteil? Welche Leistung?
Mach mal einen Elko 470uF bis 2200uF nah an den TDA5241.
Wirds besser?
Prüfe mal die GND Verbindungen! Und mach mal eine richtige dicke
Verbindungen rein.
Gute Nacht,
avrGerd
Hallo,
ich habe eben nochmal so wie die Schaltung ist, ein zweites
Tiefpassglied mit 100k und 100nF rangemacht und es läuft schlimmer ;-),
der Motor zuckt hier auch nicht im kritischen Bereich. Ich werde
spätestens morgen die Bilder fertig machen.
Danke für deine Hilfe und angenehme Nachtruhe.
gruß,
opcode
@avrGerd:
Bilder habe ich noch nicht gemacht, aber bei einem Tastverhältnis von
50% (OCR=127) sieht das Spannungssignal der 12V direkt am TDA5241
ziemlich "übel" aus. Es sind sehr viele Störungen drin. Bei Anbringen
von 470uF direkt parallel mit den 100nF Kerko von 12V auf GND läuft der
Motor schon besser, aber er fiept und zuckt noch immer. Die 12V sehen
auf dem Oszi deutlich besser aus, also nahezu glatt. Komisch ist, dass
mit einem anderen 470uF der Motor wieder gefiept hat. Ich muss sagen,
dass bei dem ersten 470uF kurzzeitig ein Funken beim reinstecken kam :/.
Aber genau mit diesem Kondensator läuft der Motor besser. Bei 1000uF
läuft der Motor wieder schlechter.
Hi,
also kein PG Signal. Nun gut.
Wie hast Du die zwei 18nF (bzw. 20nF) bestimmt?
Diese PWM Geschichte macht ja doch einige Schwierigkeiten. Einfach mal
ein Poti anschließen?! Spannung zwischen 0V und ca 4,5V einstellen.
Motoren ohne Last laufen einfach nur anders. Was willst Du letztlich
damit machen? Mit einer gewissen Last wäre besser!
Hallo Naseweis,
bevor ich das mit PWM versucht habe, habe ich natürlich die Spannung
über einen Poti bereitgestellt, was auch wunderbar lief, bis auf, dass
der Poti etwas zu sehr empfindlich war. Als Last möchte ich gerne die
zwei Festplattenscheiben behalten. Ich habe nicht vor eine variable Last
zu nemen. Bezüglich den Kondensatorwerten ist zusagen, dass ich die
Werte aus der Testschaltung aus dem Datenblatt genommen habe. Der Motor
dreht mit diesen Werten ja. Nur bei 50% Tastverhältnis bzw. um den
Bereich gibt es Probleme :-).
Hast Du mal die Masseleitungen geprüft?
Verbinde mal GND uController auf GND TDA und von GND 12V Netzteil zum
GND TDA quasi Sternpunkt.
Bessert sich was?
avrGerd
Hallo avrGerd,
ich bin noch gerade in der Hochschule (Prüfungsphase steht bevor)
Sobald ich heute abend zu Hause bin, werde ich mich melden.
Vielen Dank für die Unterstützung !
gruß,
opcode
Hallo avrGerd,
nun bin ich zu Hause :-). Ich habe das total verdrängt, und ja das ist
mir peinlich, das es an der Spannungsquelle liegen kann, die
höchstwahrscheinlich nicht stabilisiert oder zu wenig stabilisiert ist.
Das Steckernetzteil liefert 1 bis 1.2A. Ich versuche mal ein PC Netzteil
als Spannungsquelle zu nehmen, denn diese sollten doch stabilisiert sein
oder ?
Zur Not muss ich mir eins bauen, da ich zur Zeit kein Geld für ein
vernünftiges Labornetzteil habe. Ich habe hier noch ein 230V/12V Trafo
aus einer alten Halogenlampe mit recht gut dicker Kupferleitung auf der
Sekundärseite rumstehen. Meine Idee war diesen Trafo mit einem "fetten"
Elko und ner Brückenschaltung mit einem LM7812 zu verbinden, aber leider
wird das aufgrund der Spannungen wahrscheinlich nicht gehen, da ich ja
Eingangsseitung etwas mehr Spannung brauch als die geregelten 12V.
Hallo avrGerd,
ich habe nun das PC Netzteil statt des Steckernetzteiles genommen. Des
Weiteren habe ich die 100nF gegen Masse am Versorgungseingang des
TDA5241 entfernt und dort ein 100uF Elko angeschlossen. Der Motor fährt
im kritischen Bereich problemlos an ! Das Spannungssignal am Oszi ist
ebenfalls sehr stabil. Leider schaltet sich das PC Netzteil sofort ab,
sobald keine Last mehr da ist d.h. ich den Festplattenmotor kurz
anhalte. Somit habe ich eine "grundlast" (altes CD ROM Laufwerk) an das
Netzteil angeschlossen und starte es indem ich bei dem großen Stecker
(Name?!) die grüne Ader mit Masse des Netzteiles überbrücke.
PS: Kann man das Steckernetzteil stabilisieren ?!
Was steckt in so einem Steckernetzteil drin ? Nur Trafo,
Gleichrichterbrücke und Elko ?
Hallo opcode,
freut mich dass es nun funktioniert. Die 100nF kannst Du drin lassen,
die blocken hochfrequente Störungen ab.
Ja PC Netzteile brauchen eine Grundlast damit sie stabil arbeiten. Je
nach Netzteil sind das ein paar Watt.
In den einfachen Steckernetzteilen ist nur Trafo, Gleichrichter und Elko
drin.
Kauf Dir vielleicht ein Stecker-Schaltnetzteil. Die kosten bei Pollin,
Reichelt usw. nicht viel Geld und sind stabilisiert.
Bsp.
http://www.pollin.de/shop/suchergebnis.html?S_TEXT=schaltnetzteil&S_TEXT1=&S_WGRUPPE=default&absenden=
Gruß,
avrGerd
Hallo avrGerd,
danke für deine Rückmeldung und für die Links.
Mir ist aufgefallen, dass wenn man den Motor von niedrigen PWM
Spannungen (kurze Tastverhältnisse) auf größere PWM Spannungen bringt,
dass dieser im Bereich von OCR=90-120 wieder zuckt, aber bei 127 also
bei DC=50% wieder hochläuft (dabei fiept er bischen aber er kommt hoch).
Von höheren PWM Spannungen auf niedrige klappt bei jedem OCR Wert
problemlos. Liegt wahrscheinlich an der rotierenden Masse /
Trägheitsmasse, dass er problemlos von höheren PWM Spannungen somit
höheren Drehzahlen und Trägheitskräften auf niedrige PWM SPannungen
fahren kann ?!
Wie gesagt gabe ich einen 100uF benutzt. Bei 470uF geht gar nichts und
bei 220uF ebenfalls nicht. Bei 47uF und 10uF ist es auch ganz schlimm...
Den 100nF Kerko habe ich wieder dran. Das wöre ja eine Parallelschaltung
von 100nF und 100uF ?!
Nachtrag:
Habe das PWM Signal in 1sek Schritten jeweils um eins inkrementiert.
Sehr schön hochgelaufen hmm.. mit 100ms gibts wieder schwierigkeiten,
wahrscheinlich braucht es eine gewisse Zeit (wegen der Induktivität des
Motors ? => Zeitkonstante ?!)
Hi,
ja sowas habe ich mir schon gedacht. Die Reduzierung der Geschwindigkeit
beim Drehzahlwechsel wäre dann mein nächster Vorschlag gewesen, aber Du
hast das ja schon probiert.
Da Du kein Signal von der jeweiligen Position des Motors auswertest,
musst Du selber etwas experimentieren wie schnell Du die Drehzahl ändern
kannst.
Theoretisch sollte man sowas auch berechnen können, da kann ich dir
allerdings nun nicht mehr helfen.
Es gibt aber recht viele Unterlagen zu BLDC und den Prinzipien dahinter.
Nachtrag:
Wenn das Netzteil die geforderte Leistung für den Motor und Elektronik
liefern kann, dann sollte die Größe des Elko's keine Auswirkungen auf
die Stabilität haben. Ich vermute daher andere Effekte, vor allem den
Steckbrettaufbau sollte man kurzfristig mal durch eine Platine ersetzen,
das hilf manchmal Wunder!
Viel Spaß noch!
avrGerd
Hallo avrGerd,
danke für deine Unterstützung :-).
Gibt es vielleicht eine Möglichkeit E-Mails auszutauschen ? Ich könnte
dich dann ja auf dem Laufenden halten :-), falls es dich interessiert.
Hier im Forum kann man sich schnell verlieren (meine Meinung).
Den Steckbrettaufbau werde ich sowie so schnell wie es geht durch eine
Platine ersetzen, werde dann aber die Kondensatoren icht direkt auflöten
sondern vielleicht kleine Buchsen auf die Platine löten, wo ich die
Kondensatoren "kurzbeinig" drauf Stecken kann. So wäre ein spätere
Austausch von Kondensatoren einfacher. Spricht dem etwas dagegen ?
Der Steckbrettaufbau und die langen Leitungen sind wahrscheinlich sehr
empfindlich gegenüber elektromagnetische Wellen des Motors, vor allem
durch die langen Drahtverbindungen, die ja wie Antennen wirken. Oder
übertreibe ich da ?
Ich wünsche noch einen schönen Tag
mfGruß,
opcode
Die Kondensatoren kannst Du sockeln. Nimm hier aber Präzisionsbuchsen.
Die sind zwar etwas teurer, aber haben einen guten Kontakt. Sonst sind
wir wieder auf Steckbrettniveau.
Antenne hin, Antenne her. Das ist schwer zu beurteilen. Wichtig ist
sowas auf jedenfall bei empfindlichen Eingängen.
Wenn Du mir eine PM schickst, dann bekommst Du meine email Adresse.
Dazu must Du Dich aber im Forum anmelden soweit ich weiss.
Gruß,
avrGerd
Danke für die Erklärung, es hat alles geklappt.
Dazu habe mit PIC16F1939: PWM, Drehzahlmesser eingebaut. Kann den
Treiber TDA5241 mit HDD Motor steuern.
Geschrieben habe mit:
* PIC16F1939
* MPLAB X IDE v5.25
* XC8 v1.45
Datei mit Bild Drehzahlmesser.X.zip ist eingehängt.