Forum: Mikrocontroller und Digitale Elektronik PWM Signal + Filter + Brushless Driver


von opcode (Gast)


Angehängte Dateien:

Lesenswert?

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
4
int main(void)
5
{
6
  
7
  int ocrwert=0;
8
  DDRB |=(1<<PB4);
9
        TCCR0 |= (1<<WGM00) | (1<<WGM01) |(1<<COM01)|(1<<CS00);
10
11
       while(1)
12
       {
13
    if (ocrwert<=250)
14
    {
15
      _delay_ms(200);
16
      ocrwert = ocrwert +1;
17
      if(ocrwert>=100 && ocrwert <=150)
18
      {
19
      ocrwert = ocrwert +50;  
20
      }
21
      OCR0=ocrwert;
22
    }
23
    else
24
    {
25
      OCR0=255;
26
    }
27
       }
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

von Naseweis (Gast)


Lesenswert?

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?

von avrGerd (Gast)


Lesenswert?

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

von opcode (Gast)


Lesenswert?

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.

von avrGerd (Gast)


Lesenswert?

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

von opcode (Gast)


Lesenswert?

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 ?

von avrGerd (Gast)


Lesenswert?

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

von opcode (Gast)


Angehängte Dateien:

Lesenswert?

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.

von avrGerd (Gast)


Lesenswert?

Schön.

Und jetzt den Schaltplan der 12V Versorgung.


avrGerd

Den Rest dann morgen ...

von opcode (Gast)


Lesenswert?

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 !

von avrGerd (Gast)


Lesenswert?

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

von opcode (Gast)


Lesenswert?

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

von opcode (Gast)


Lesenswert?

@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.

von opcode (Gast)


Lesenswert?

Also ohne Last, also ohne Festplattendisk etc. läuft der Motor immer 
gut.
Es scheint auch, dass er im kritischen Bereich des PWMs gut läuft.

von Naseweis (Gast)


Lesenswert?

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!

von opcode (Gast)


Lesenswert?

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 :-).

von Gerd M. (avrgerd)


Lesenswert?

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

von opcode (Gast)


Lesenswert?

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

von opcode (Gast)


Lesenswert?

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.

von opcode (Gast)


Lesenswert?

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 ?

von avrGerd (Gast)


Lesenswert?

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

von opcode (Gast)


Lesenswert?

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 ?!

von opcode (Gast)


Lesenswert?

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 ?!)

von Gerd M. (avrgerd)


Lesenswert?

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

von opcode (Gast)


Lesenswert?

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

von Gerd M. (avrgerd)


Lesenswert?

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

von t. ö. (opcode)


Lesenswert?

Hallo avrGerd,
nun bin ich angemeldet :-). Ich habe dir eine PM geschickt !

von Dmitrij (Gast)


Angehängte Dateien:

Lesenswert?

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.

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.