www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 3 Phasen PWM - Verständnisfrage


Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jungens,
ich möchte einen 3phasigen Motor ansteuern. Dabei müssen die Ströme in 
allen 3 Phasen ja Sinusförmig sein.
Ich habe mich jetzt mal in das Thema eingelesen (hier im Forum zum 
Beispiel -> Frequenzumrichter mit Raumzeigermodulation). Das erscheint 
mir aber ein bisschen kompliziert, deshalb frage ich mich:
Kann ich nicht an jeder Phase die PWM so machen, dass im Mittel eine 
Sinusförmige Spannung entsteht? Also die 3 Phasen unabhängig von 
einander schalten?
Der Tastgrad wird dann an jeder Phase einfach immer so eingestellt, dass 
sich im Mittel eine Sinusförmige Spannung (und damit ein Sinusförmiger 
Strom) bildet.
Kann sowas funktionieren oder geht das gar nicht?

Grüsse
    Tobias

Autor: Michael S. (michi88)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich kann mir nicht vorstellen, dass das so ohne Weiteres geht, 
sonst würde es auch praktiziert werden.

Bei uns auf Arbeit werden in allen Umrichtern Zwischenkreise verbaut.
Sprich: Wechselspannung gleichrichten und dann den Gleichstrom auf 3 
Phasen pulsen.

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael
Ja, so meine ich das auch!
AC wird gleichgerichtet, sodass ich DC hab. Und mit 6 FET werden dann 
die 3 Phasen geschaltet.
Die PWM-Ansteuerung für jeden FET sieht dann so aus, dass der Tastgrad 
des Signals einfach sinusförmig verändert wird. Im Endeffekt ergeben 
sich dann ja Sinusförmige Spannungen (aus den Mittelwerten der 3 
PWM-Signale).
Ist nicht so einfach zu erklären ;-)

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias Plüss wrote:
> Die PWM-Ansteuerung für jeden FET sieht dann so aus, dass der Tastgrad
> des Signals einfach sinusförmig verändert wird. Im Endeffekt ergeben
> sich dann ja Sinusförmige Spannungen (aus den Mittelwerten der 3
> PWM-Signale).

Ja, kann man machen. Funktioniert auch, der Vorteil von der 
Raumzeigermodulation ist, dass man hier die Spannung besser ausnutzt, 
also mehr Ausgangsspannung bei gleicher Zwischenkreisspannung bekommt. 
Ansonsten ist das Ergebnis aber gleich.

Raumzeigermodulation ist eigentlich auch nicht kompliziert, wenn man das 
ganze nicht so sehr mathematisch betrachtet, sondern grafisch richtig 
veranschaulicht. In irgendeiner AppNote (von Microchip oder Freescale 
war das glaube ich) ist das recht gut erklärt.

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Benedikt,
also ich denke ganz im Grundsatz habe ich die RZM schon verstanden. Der 
Artikel hier auf der Seite ist schon toll.
Ich schalte ja einfach die 3 Phasen des Motors immer entweder auf + oder 
auf 0V. Jetzt frage ich mich: Wie genau berechne ich die Zeit, wie lange 
eine Phase auf + bzw. auf 0V liegen muss?
Dass die einzelnen Zeitabschnitte zueinander Sinusförmig bewertet werden 
müssen, ist mir absolut klar, aber ich muss ja beispielsweise wissen: 
JETZT muss ich die Phase U für 3 us auf 0V legen, nachher muss ich sie 
für 5 us auf + legen und so weiter (so als Beispiel). Die Frage ist 
jetzt, wie ich diese Zeit berechne?
Deshalb wollte ich eigentlich den Umweg über diese PWM machen, da mir 
bei dieser klar ist wie sie funktioniert.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias Plüss wrote:

> JETZT muss ich die Phase U für 3 us auf 0V legen, nachher muss ich sie
> für 5 us auf + legen und so weiter (so als Beispiel). Die Frage ist
> jetzt, wie ich diese Zeit berechne?

Der genaue Wert ist unkritisch, nur das Verhältnis zueinander bestimmt 
die Spannung.
Bei 50:50 Ein und Ausschaltzeit ergibt sich die halbe 
Zwischenkreisspannung, also 0V, wenn alle 3 Kanäle diesen Wert ausgeben.
Wenn du eine 8bit PWM verwendest, dann muss dein Sinus einen 
Wertebereich von 0-255 haben, um am Ausgang einen Sinus mit einer 
Spitze-Spitze Amplitude der Zwischenkreisspannung an jeder der 3 Phasen 
zu erhalten.
Üblicherweise verwendet man etwa 10-50kHz für die PWM Frequenz.

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Benedikt,
Okay das ist mir soweit auch klar. Aber kann ich denn jetzt einfach mal 
festlegen: Ich schalte U für 1 us auf +, nachher für 1 us auf 0, 3 us +, 
3 us 0 .... oder wie?
Hast du mir einen Link wo das ein bisschen erklärt ist? Ich google schon 
seit einiger Zeit, aber das Zeug scheint mir recht schwere Kost zu sein 
;-)

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias Plüss wrote:

> Okay das ist mir soweit auch klar. Aber kann ich denn jetzt einfach mal
> festlegen: Ich schalte U für 1 us auf +, nachher für 1 us auf 0, 3 us +,
> 3 us 0 .... oder wie?

Prinzipiell ja. Allerdings legt man die Zeiten eigentlich nie fest, 
sondern sie ergeben sich aus der PWM Frequenz. Ein Beispiel:
PWM Controller sein ein AT90PWM3, dessen PWM Stufe mit 64MHz läuft und 
12bit Auflösung bietet.
Eine mögliche Frequenz beträgt also z.B. 64MHz/4096=15,625kHz, was ein 
recht brauchbarer Wert ist.
Somit ist die Einschalt+Ausschaltzeit fest auf 64µs festgelegt. Man kann 
nur das Verhältnis Ein/Ausschaltzeit in 4096 Stufen verändern.
Auf Kosten der Auflösung könnte man aber auch jederzeit die Frequenz 
erhöhen.

> Hast du mir einen Link wo das ein bisschen erklärt ist? Ich google schon
> seit einiger Zeit, aber das Zeug scheint mir recht schwere Kost zu sein
> ;-)

Ich kenne das. Vieles ist für den Anfang zu mathematisch erklärt, aber 
wenn man alle AppNotes durch hat, geht es einigermaßen.

http://www.atmel.com/dyn/resources/prod_documents/...
http://www.atmel.com/dyn/resources/prod_documents/...
http://www.freescale.com/webapp/sps/site/overview....
http://www.microchip.com/stellent/idcplg?IdcServic...

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,
drei einzelne, voneinander unabängige PWM´S gehen nicht, da der Strom 
nur fließen kann, wenn mindestens zwei FET´s in benachbarten Halbbrücken 
leiten. Daher müssen die Einschaltdauern syncronisiert sein.


Zweites Problem: Bei einem Drehstrommotor muss die Spannung mit der 
Frequenz proportional sein. Daher darf zu gewisen Zeitanteilen kein 
Strom fließen.

Also die Berechnung:
Ta = Zeit Anfangsvektor = proportional zu: sin (60-omega)* Motorspannung 
in %

Te = Zeit Endvektor = proportional zu: sin (omega)* Motorspannung in %

To = Zeit Nullspannungsvektor = Pulsperiode-(Zeit Anfangsvektor + Zeit 
Endvektor)

in nun wirklich nicht so kompliziert.

Axel

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Axel,
Okay aber was ist denn dann Ta? Was mache ich, wenn ich z.B. weiss: Ta = 
20 us, Te = 50 us, To = 80 us? einfach für 20 us den Anfangsvektor 
asugeben, dann für 80 us den Nullspannungsvektor usw. ? oder wie?
Das finde ich geht leider auch nicht so klar aus dem Artikel hervor :-(
Aber du hast natürlich recht, die Berechnung selber ist nicht schwer.

Autor: Bastler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>mehr Ausgangsspannung bei gleicher Zwischenkreisspannung bekommt.
>Ansonsten ist das Ergebnis aber gleich.

Das stimmt nicht Bennedikt!
Mit einer modifizierten PWM (mit Nullsystem) ist die gleiche Amplitude 
möglich (siehe Anhang).

>drei einzelne, voneinander unabängige PWM´s gehen nicht, da der Strom
>nur fließen kann, wenn mindestens zwei FET´s in benachbarten Halbbrücken
>leiten.

Davon ist zumindest der lezte Teil nicht richtig.
Bei der Raumzeigermodulation z.B. wird der Nullvektor (alle Halbleiter 
sperren) genutzt.
Wenn kein IGBT/FET leitet wird der Strom auf die Dioden kommutieren.
Auch ich kenne nur den Fall, dass alle PWM-Sognale aus der selben Quelle 
stammen und somit zwangsweise synchron sind.
Wie es sich verhält, wenn es einen Versatz gibt, weiß ich auch nicht.

Bastler

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NAchtrag: übrigens könnte der Strom doch auch immer fliessen, wenn ich 3 
voneinander unabhängige PWM's mache. Denn es ist ja immer ein FET 
angesteuert, der die Phase entweder auf Masse oder auf positive 
Betriebsspannung legt.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bastler wrote:
>>mehr Ausgangsspannung bei gleicher Zwischenkreisspannung bekommt.
>>Ansonsten ist das Ergebnis aber gleich.
>
> Das stimmt nicht Bennedikt!
> Mit einer modifizierten PWM (mit Nullsystem) ist die gleiche Amplitude
> möglich (siehe Anhang).

Aber die 3 Phasen sind kein Sinus. Darauf bezog sich das.

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist richtig, aber bei einem Drehstrommotor am Umrichter hast du 
keinen Nulleiter. Der Motor sieht nur die Spannung zwischen den Phasen, 
und die ist sinusförmig! Bei Raumzeigermodulation ist die Phasenspannung 
auch nicht mehr sinusförmig.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mein ich ja (oder habe ich da was falsch verstanden?):
Wenn man die Phasenspannungen so verformt wie in deinem Bild, ist die 
Leiterspannung die der Motor sieht dann höher als wenn die 
Phasenspannungen ein Sinus sind (bei gleichem Spitzenwert)?
Zumindest meine ich sowas mal gelesen zu haben.

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,
„Ta“ bezieht sich auf den Artikel und ist dort erklärt.
http://www.mikrocontroller.net/articles/Frequenzum...


Im Artikel ist weiter von sog. Ausgangsmustern die Rede. Die Treiber- 
Bausteine für die Halbbrücken schalten immer eine der beiden FET´s 
durchgeschaltet. Die Treiber brauchen dann nur noch ein Signal am 
Eingang und Schalten dann immer einen der beiden FET´s durch. Die 
Signale für die drei Brücken ergeben ein Muster.

Nun braucht es ein geschicktes Management der Muster.

Axel

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tobias

Für einen 3-Phasen Motor brauchst Du keine PWM-Modulation, drei um 
jeweils 120° phasenverschobene "Rechtecksignale" ist völlig ausreichend.
Phi [°]  L1   L2   L3
0-30      0   -1    1
30-60     1   -1    0
60-90     1   -1    0
90-120    1    0   -1
120-150   1    0   -1
150-180   0    1   -1
180-210   0    1   -1
210-240  -1    1    0
240-270  -1    1    0
270-300  -1    0    1
300-330  -1    0    1
330-360   0   -1    1

Für L1, L2 und L3 kannst Du irgendwelche IO Port-Pins nehmen, welche Du 
folgendermassen schaltest:

 1 => Output High
 0 => Input (High-Z)
-1 => Output Low

Natürlich werden die IO-Pins des uC zu schwach sein, um einen Motor zu 
treiben, dementsprechend musst Du Dir eine Leistungs Push-Pull Stufe 
bauen, die ebenfalls diese drei Zustände kennt, bzw. noch besser bei 
symetrischer Speisespannung:

 1 => Vs+
 0 => 0V
-1 => Vs-

Oder Du arbeitest mit drei H-Brücken an einer Single PowerSupply und 
koppelst das ganze mit Trafos zusammen,z.B. wenn Du ab einer 12V 
Batterie ein 3x400V Drehstrom generieren möchtest...

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Axel,
ja die Muster sind mir auch bekannt. Vielen Dank trotzdem für deine 
Auskunft.
Genau das "geschickte Management der Muster" ist ja der Knackpunkt. Wie 
bestimme ich, zu welchem Zeitpunkt welches Muster kommen muss, damit 
sich der Motor mit sagen wir 1000 U/min dreht? (das nur als Beispiel).

Gruss

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,
eine Motorumdrehung ist in sechs Teile (Sektoren) aufgeteilt. Jeder 
Sektorgrenze ist ein bestimmtes Muster zugeordnet. dass heist, in jedem 
Sektor gibt es zwei verschiedene Muster (die der Sektorgrenzen) zwischen 
welchen hin und hergeschaltet wird.(siehe Artikel)

Jeder Sektor wird in 60 Teile (=60 Grad) aufgeteilt. Es wird eine 
Variable "Omega" von 0 bis 59 hochgezählt und dann wird der Sektorzähler 
erhöht und Omega wider auf 0 gesetzt.

Entsprechend Omega werden Ta, Te und T0 berechnet.


Axel

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
" Jeder Sektor wird in 60 Teile (=60 Grad) aufgeteilt. Es wird eine
Variable "Omega" von 0 bis 59 hochgezählt und dann wird der Sektorzähler
erhöht und Omega wider auf 0 gesetzt. "

Nimm lieber 64 statt 60, dann brauchst Du nur eine Variable hochzählen.

Omega sind dann die unteren 6 Bits, Sektor die nächsten 3 Bits.



Nebenbei:
Mich wundert es sowieso, warum es noch Schrittmotoren mit 200 / 
Umdrehung gibt. 256 (1,40625° pro Step) ist viel einfacher.

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Axel,
so langsam wird mir die Funktionsweise klar. Vielen Dank für deine 
Erläuterungen!
Also, ich berechne anhand einer Sinusfunktion und anhand von Omega die 
Werte für Ta, Te und To.
Danach schalte ich für die Zeit Ta den Anfangsvektor ein, danach für To 
den Nullspannungsvektor, und dann für Te den Endvektor. Wenn man will, 
kann man dann To noch halbieren, dann muss man:

1. für die Zeit Ta den Anfangsvektor ausgeben,
2. danach für To / 2 Sekunden den Nullvektor,
3, dann für Te den Endvektor, und dann für
4. To / 2 den Nullvektor, und schliesslich
5. für Te Sekunden den Endvektor

an die FETs der Brücke legen. Hab ich das so in etwa richtig verstanden?

@eProfi
ja, das hab ich mir auch grade überlegt.... schön wärs schon, aber wenn 
ein Sektor dann ja 64 Omega-Schritte hat, so hat nachher mein 
Einheitskreis ja 6  64 Grad anstatt 6  60 Grad. Ich weiss nicht, ob 
das dem Motor so gefällt? Irgend einen Nebeneffekt wird das ja sicher 
haben.
Aber ich denke es macht eh nix aus, ob ich jetzt ein paar ns mehr 
Rechenzeit benötigt, weil Omega bis 60 anstatt 64 geht. Ich werd das 
nämlich mit einem grösseren MC lösen, der soll noch andere Aufgaben 
übernehmen (unter anderem will ich mehr oder weniger genaue Rampen 
fahren, die aber leider immer unterschiedlich sind, und solche 
Spässe...).

Und: Ja das mit den Schrittmotoren ist auch so ne Sache. Die Schrittzahl 
sollte wirklich eine Zweierpotenz sein. Warum macht das niemand so?

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,
freut mich wenn es klarer wird.

Die Deine Reihenfolger der Ausgabe der Vektoren ist aber nicht so 
pfiffig.
Bei jeden Schaltvorgang hat ein FET Schaltverluste, weil die 
Schaltflanke nicht unendlich steil ist.


Daher lieber:
Nullspannungsvektor Anfangsvektor Endvektor Nullspannungsvektor 
Nullspannungsvektor Endvektor Anfangsvektor Nullspannungsvektor usw.

Den Nullspannungsvektor kann man mit 000 oder 111 erzeugen.


Das sieht dann beim Muster z.B. so aus:
000   010   110   111   111   110   010   000
hier ist leichter zu erkennen, das sich immer nur eine Halbbrücke 
ändert.

Axel

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Axel,
> Daher lieber:
> Nullspannungsvektor Anfangsvektor Endvektor Nullspannungsvektor
> Nullspannungsvektor Endvektor Anfangsvektor Nullspannungsvektor usw.

Also für Vorwärts drehen erstere Reihenfolge der Muster, für den 
Rückwärtsgang dann die zweite oder? ;-)

Und stimmt das, was ich gesagt habe über die Zeiten jetzt so?

Vielen Dank für deine Hilfestellung. Ich seh schon: Raumzeigermodulation 
ist wirklich nicht so schwer zu verstehen, wie sich das immer anhört 
bzw. liest. ;-)

Schöne Grüsse

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo eProfi,
einen Sektor in 64 Teile zu teilen ist eine gute Idee. Wenn die 
Sinuswerte in de Tabelle genau so berechnet sind geht das genauso, macht 
aber das Programm einfacher.

Nochmal zu Tobias,
Du musst aber sicher sein, dass Dein "größerer" MC auch die Schaltmuster 
dann herausgibt, wenn Du es willst und nicht wenn er meint, dass er Zeit 
dazu hat. Daher habe ich die Aufgaben auf zwei Prozessoren aufgeteilt.


Axel

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

mir hat das folgende Paper von TI sehr geholfen, die 
Raumzeigermodulation zu verstehen:

spru357c.pdf, ab Seite 186
http://focus.ti.com/lit/ug/spru357c/spru357c.pdf

Ab Kapitel 6.7.2 wird einem dann klar, welche Vorteile es hat, wenn der 
Prozessor die Space Vector PWM mit Hardwareunterstützung kann.

Die App.-Notes von Atmel kann ich auch nur empfehlen, wurden oben ja 
auch schon aufgeführt.

Grüße,

Peter

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,
vielen Dank für deinen Link.
Das hilft auch noch ein bisschen weiter.

@Axel Jeromin:
Stimmt das jetzt mit den Zeiten, was ich weiter oben geschrieben habe?
Ich muss nur dafür sorgen, dass jeweils für die Zeit Ta der 
Anfangsvektor an den FETs anliegt, für Te der Endvektor und für To der 
Nullspannungsvektor?
In dem Programmcode vom Artikel sieht das nämlich leider ein bisschen 
komplizierter aus.....


Schöne Grüsse
   Tobias

Autor: Tobias Plüss (hubertus)
Datum:
Angehängte Dateien:
  • preview image for 1.GIF
    1.GIF
    26,5 KB, 1066 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Hey Axel,
ich hab jetzt mal eine kleine quick-and-dirty-Software geschrieben, die 
genau das macht, was ich weiter oben geschrieben habe. Im Anhang mal ein 
Screenshot von meinem Scope, wo man die einzelnen Impulspakete sehen 
kann, die der Microcontroller an seinem Port ausgibt. Kann das so 
stimmen? Sieht irgendwie doch nicht ganz so aus, wie ich mir das 
vorgestellt habe.

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,
so sieht es ganz und gar nicht aus. Diem Bild steht für Deine erste 
Idee, die nicht funktioniert.



Stell Dir vor, Du die Sinushalbwelle in 400µs lange Teile geschnitten.
Dann ist jeder 400µs lange Teil:
000 010 110 111 111 110 010 000 und wieder:000 010 110 111 111 110 010 
000 usw.

Die drei Zahlen in jedem Block stehen für Ausgang 1, 2, 3 und somit für 
Halbbrücke 1,2,3

Das o.g. Beispiel gilt für einen bestimmten Sektor. Der nächste hat 
natürlich andere Anfangs- und Endvektoren.


Axel

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Axel,
Du sagst:
> Dann ist jeder 400µs lange Teil:
> 000 010 110 111 111 110 010 000

Hmm. Wieso kommen denn bei dir hier die Bitmuster 010 und 110 zwei mal 
vor? Hast du da auch aus Optimierungsgründen die Zeit jeweils halbiert 
und die Muster dann zweimal ausgegeben?
Weil: weiter oben haben wir ja gesagt
> Nullspannungsvektor Anfangsvektor Endvektor Nullspannungsvektor

oder?

Also, sehe ich das richtig:
Ich gebe, so lange wie ich im Sektor 1 bin, immer nur die Bitmuster für 
Sektor 1 aus, genau in der oben genannten Reihenfolge. Irgendwann 
(unabhängig vom Timer für die Bitmuster) kommt der Übergang in den 2. 
Sektor, da werden dann die Muster für diesen Sektor ausgegeben, so 
lange, bis der 3. Sektor an die Reihe kommt?
Dann hätte ich wie du in deinem Code auch 2 Timer. Richtig?

Danke & Gruss
     Tobias

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig, die Muster werden in unterschiedlicher Reihenfolge ausgegeben, 
um die Schaltvorgänge zu optimieren. (vier Muster ergeben 400µs, habe 
ich falsch angegeben)


Zweitens: wieder richtig
ein Timer für den Umlaufwinkel Omega(8Bit) und ein Timer(16Bit) für für 
die Schaltzeiten der Muster.

Axel

Autor: Tobias Plüss (hubertus)
Datum:
Angehängte Dateien:
  • preview image for 3.GIF
    3.GIF
    23,1 KB, 721 Downloads

Bewertung
0 lesenswert
nicht lesenswert
@Axel
so, ich hab mich jetzt nochmal lange an das Problem gesetzt.
Ich denke nun funktioniert das Programm einigermassen. Schau dir doch 
nochmal den Scope-Screenshot an!
So sehen die 3 Ausgangssignale meines Microcontrollers aus. Die Pulse 
verändern laufend ihre Breite, genauso soll das ja auch sein oder. Die 
Sinustabelle habe ich jetzt noch ein bisschen abgespeckt, ich denke 32 
Werte sollten auch noch ausreichend sein oder?
Ich will immerhin bis mindestens 120 Hz fahren.
Was meinst du, sieht das jetzt besser aus?

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das mit den 2ms / div stimmt, ist das viel zu langsam.


Nullspannungsvektor Anfangsvektor Endvektor Nullspannungsvektor = 400µs 
bei 2,5Khz Pulsfrequenz.

Wenn Du 120 Hz erzeugen willst, sollten es besser 5Khz Pulsfrequenz 
sein, sonst hast Du einen miserablen Sinus am Ausgang und der Motor 
erwärmt sich.


Axel

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Axel,
ja das mit den 2 ms/Div stimmt leider. Mein uC, den ich momentan 
verwende, ist viel zu langsam für die Anwendung. Ich benutze den nur, 
weil ich grade keinen anderen zur Hand hatte. Ich will damit nur die 
Software entwickeln und testen, nachher kommt das auf einen besseren 
Controller. Ich habe mir so mindestens 10 kHz als Pulsfrequenz 
vorgenommen.

Ist das Bild, was ich gepostet habe, richtig?
Bei mir sind die 3 Phasen einfach Rechtecksignale, deren positiver Puls 
beim gelben Kanal immer Kürzer wird, und entsprechend bei den anderen 
beiden immer länger. Die 3 Pulse sind immer ungefähr übereinander, also 
etwa so:

____----------____
______-----_______
________-_________


oder dann halt so:

________-_________
______-----_______
____----------____

stimmt das?

Grüsse
 Tobias

PS: ein kleiner Motor, den ich angeschlossen habe, dreht sich 
jedenfalls. Macht zwar krach, aber es dreht immerhin ;-) Aber der 
Motorstrom ist nicht wirklich sinusförmig (was aber wohl an der 
Pulsfrequenz liegt, nicht wahr?).

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,
wieso ist das bei Dir so langsam?
Ich habe einen Mega 88 bei 20 Mhz im Einsatz. Damit sollten die 10Khz 
mglich sein. Getestet habe ich das Programm bei 2,5Khz.

Schalte mal einen Shunt in eine Phase und messe den Strom 
(Spannungsabfall) mit dem Ossy.


Axel

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich muss den Thread hier mal wieder aus der Versenkung holen.
Ich habe wieder eine Frage bezüglich der Raumzeigermodulation - welche 
übrigens, Axel, bei mir schon seit langer Zeit erfolgreich läuft. Mit 
Drehstromasynchronmotoren ist das auch nicht weiter schwer, die RZM ist 
recht einfach wenn man das mit diesen Sektoren und Bitmustern usw. mal 
verstanden hat.
So jetzt aber zu meiner eigentlichen Frage. Auf die Idee gekommen bin 
ich durch den Thread "Umrichter für E-Kart Anwendungen", der aber leider 
abgestorben zu sein scheint (der Thread natürlich). Deshalb frage ich 
hier, die Frage passt auch besser hier hin.
Und zwar geht es jetzt nicht um Drehstromasynchronmotoren, sondern um 
bürstenlose DC-Motoren oder Permanentmagneterregte Synchronmotoren, wie 
man die auch immer nennen will.
Einen solchen kann man ja sicher auch mit Raumzeigermodulation ansteuern 
oder? Die Frage ist jetzt: wie muss man die Hallsensor-Signale da 
beachten?
Ich tippe einfach mal darauf, dass die Hallsensoren den "Sektor" der RZM 
vorgeben. Aber wie weiter? Irgendwie muss ich die Bitmuster ja nun in 
einer solchen Geschwindigkeit weiterschalten, dass ich "pünktlich" wenn 
die Hallsensorsignale ändern, im nächsten (richtigen) Sektor bin. Wie 
wird das bewerkstelligt?
Eine weitere Frage wäre dann noch, ob sich ein solcher RZM-Algorithmus 
(egal ob für BLAC, BLDC, PMSM) in einem kleinen FPGA oder CPLD 
implementieren liesse, und der dan unabhängig von einem Rechner einen 
Motor steuern könnte. Der Rechner müsste dann nur noch den 
Frequenzsollwert vorgeben und den Rest erledigt die Hardware.


Ich hoffe ihr könnt mir ein bisschen weiterhelfen,
Viele Grüsse
 Tobias

Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,
solange die Last am Synchronmotor nicht so groß wird, dass der 
Lastwinkel größer 90 Grad wird und die Maschine kippt, kann man auch 
ohne Hallsensor auskommen. (ich kram mal in der Erinnerung an die 
Vorlesung el. Maschinen vor 25 Jahren)


Ich würde mit dem Hallsensor den Lastwinkel zwischen Spannung und 
Rotorlage messen und die Ausgangsfrequenz entsprechen verringen, falls 
der Winkel zu groß wird.


Axel

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
naja ich habe bei ausführlichen Tests herausgefunden, dass es ohne 
Auswertung der Hallsensoren zwar möglich ist, den Motor in Drehun zu 
versetzen, aber

a) der Motor "säuft" Strom ohne Ende
b) das Drehmoment ist nicht allzu hoch
c) bei der Drehzahl ist man auch eingeschränkt.

Mit Hallsensoren hat man all diese Probleme nicht, da wird ja 
bekanntlich der Motor so kommutiert, dass automatisch immer die richtige 
Phase bestromt wird - so kann der Motor nicht aus dem Tritt geraten und 
man hat immer ein maximales Drehmoment.
Ich verwende übrigens solche Motoren:

http://www.ebmpapst.com/media/content/products/dow... 
Typ ECA45.11

oder die EC-Max Typen von Maxon.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.