Forum: Mikrocontroller und Digitale Elektronik 6 synchrone PWM-Kanäle


von Alexander R. (slider-al)


Lesenswert?

Hallo,

ich habe vor 3 Wochen ein Projekt an meiner Uni begonnen: Es soll ein 
Steuergerät für eine neue Umrichter-Topologie mit einem Mirkocontroller 
entworfen werden. In Sachen Mikrocontroller bin ich noch ein Neuling.

Nun meine Frage:

Ich benötige 6 synchrone PWM-Kanäle. Ich werde für diese Aufgabe den AVR 
XMEGA128A verwenden. Da sollten dann 2 Timer für die 6 PWMs reichen. Ich 
frage mich nun bloß, wie ich die Timer gleichzeitig loslaufen lasse.
Eigentlich hätte ich die beiden Timer hintereinander initialisiert, aber 
zwischen den Initialisierungen vergeht ja Zeit.

Die XMEGA Familie bestizt nun ein Event-System und ich habe 
aufgeschnappt, dass dies mein Problem wohl lösen könnte. Nachdem ich mir 
das Datenblatt angeschaut hab, weiß ich aber nicht, wie mir das 
Event-System weiterhilft.

Hat jmd eine Idee, wie ich 2 Timer so synchron wie mölgich loslaufen 
lassen kann?

Danke schon mal vorab

von Marvin M. (marvin)


Lesenswert?

Sind ein paar µs wirklich ein Problem?

von Oha (Gast)


Lesenswert?

Abgesehen davon, dass die XMega nicht lieferbar sind...

von Alexander R. (slider-al)


Lesenswert?

Also den mikrocontroller hab ich schon. Ich hab ihn aber nicht selber 
besorgt. Ich kann mich aber mal schlau machen wo er aufgetrieben wurde 
wenn interesse besteht...

und us wären auf jeden Fall problematisch. Etwas im Bereich 100ns wär 
wohl ok, aber besser wäre auf jeden Fall, wenn die Timer komlpett 
synchron loslaufen würden.

von Patrick W. (seennoob)


Lesenswert?

Naja mal Assembler würd ich empfehlen dann einen der 2 Timer mit einem 
Wert vor initialisieren und dann haben sie nach dem Start des 2 Timers 
beide den gleichen Wert.

Wenn ich fragen darf warum muss dass so zeitkritisch sein ?

MFG Patrick

von Alexander R. (slider-al)


Lesenswert?

oh oh. ich wollte das eigentlich in C programmieren und mich vor 
Assembler drücken. Hmmm. mal kucken.

Der Clue bei dem Umrichter is, dass der Zwischenkreis absichtlich 
kurzgeschlossen wird. Eine Drossel begrenzt den Stromanstieg. So kann 
die Zwischenkreisspannung am Kondensator höher werden als die 
gleichgerichtete Netzspannung. Mann will aber natürlich nicht zu lange 
Kurzschließen, da die Drossel ja irgendwann in Sättigung geht. Die 
Kurzschluss-Zeiten sollen vorgegeben werden und können auch sehr kurz 
sein. Deswegen sind synchrone PWMs schon wünschenswert.

von Patrick W. (seennoob)


Lesenswert?

Das hört sich ja fast so an wie ein Aufwärtswandler als Zwischenkreis. 
Das eigentliche Leistungsteil soll dann auf den Takt des Wandlers 
synchronisiert werden ?

Was soll der Sinn des ganzen sein ?
Das ersetzen eines PFC vielleicht ?

MFG Patrick

von Gast (Gast)


Lesenswert?

Stichwort Z-Source Inverter
hauptsächlich für Systeme mit stark schwankender Quellenspannung(Solar 
oder BZ Inselsysteme)

von Alexander R. (slider-al)


Lesenswert?

Der Umrichter ist hauptsächlich dafür gedacht, Netzspannungseinbrüche zu 
kompensieren, also eine Last (z.B. Motor) trotz zu geringer Netzspannung 
im Nennpunkt zu betreiben. Eine Lsg. dazu ist ein Active-Front-End 
Umrichter(AFE), bei dem der Gleichrichter als Hochsetzsteller fungieren 
kann. Der Umrichter, um den es bei mir geht (Z-Source-Umrichter) soll 
eine alternative dazu sein. Die Drossel im ZK hat auch den angenehmen 
Nebeneffekt, dass Kurzschlüsse des ZK keine Zerstörung der Transistoren 
und Elkos mit sich bringen.

Die Frage mit der Synchronisation hab ich nicht verstanden. Es werden 6 
Transitoren durch die PWM-Signale angesteuert. Die PWM-Signale hängen 
von dem gewünschtem Betriebspunkt (Spannung und Frequenz), von der 
ZK-Spannung, sowie von Netzstrom und Netzspannung ab.

Kann es sein, dass ich die Timer beim XMEGA durch ein Event starten 
kann, und sie desewgen gleichzeitig loslaufen? Ich werd einfach nicht 
schlau aus diesem Datenblatt...

von Ak T. (aktronik)


Lesenswert?

Wie hoch ist denn die maximale PWM-Frequenz?
Wenn Sie deutlich unter 1MHz oder gar bei 100kHz liegt, kannst Du es mit 
einem AVR in Software realisieren und nach der Sysnchronisirung alle 6 
Kanäle an einem Port ausgeben.

MfG
Ak Tronik

von Alexander R. (slider-al)


Lesenswert?

Die Taktfrequenz soll erst mal bei 20kHz liegen. Wie kann man die 
Synchronisierung der Timer denn in Software realisieren?

von Ak T. (aktronik)


Lesenswert?

Ups, hab mich verrechnent.
Bei 20Mhz und 8Bit Auflösung bei 6 Kanälen geht ca. 10kHz.

>Wie kann man die Synchronisierung der Timer denn in Software realisieren?

Du brauchst nur einen Timer-Interrupt der Deine PWM-Funktion aufruft, in 
der Du den aktuellen Zustand deiner PWM-Kanäle in einem Byte ablegst und 
mit OUT in den Ausgangs-PORT schiebst.

MfG
Ak Tronik

von Simon K. (simon) Benutzerseite


Lesenswert?

Um mal zu deiner Ausgangsfrage zurückzukehren:
Mit dem Event System kannst du (sofern ich weiß) ein Event mit dem Timer 
Reset verknüpfen. Der Eventkanal hat also keine Source und 2 Sinks. 
Ausgelöst wird das Event durch das Setzen eines Bits im Event System 
selber.

von Josef (Gast)


Lesenswert?

Also fuer Umrichterapplikationen wuerde ich eher einen Controller 
verwenden, der besser fuer Signalverarbeitung optimiert ist. 
Insbesondere passende A/D converter und PWM-Aufloesung.
siehe PICCOLO -> 
http://www.ti.com/corp/docs/landing/f280xx-piccolo/index.htm
Besitzt einen sogenannten Action-Qualifier mit dem man verschiedene 
Ereignisse ohne CPU Einwirkung miteinander zu verschalten kann. Die PWM 
hat eine Aufloesung von 150ps !

von Henry (Gast)


Lesenswert?

Die Timer hängen alle am gleichen Prescaler der beim Start auf off 
steht.
Alle Timer initialisieren und dann den Prescaler auf Wunschwert stellen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Henry wrote:
> Die Timer hängen alle am gleichen Prescaler der beim Start auf off
> steht.
> Alle Timer initialisieren und dann den Prescaler auf Wunschwert stellen.

Welche Timer? Beim ATxmega hat jeder Timer einen eigenen Prescaler. Man 
kann aber nicht in zwei Registern den Prescaler zum gleichen Zeitpunkt 
setzen und deswegen hat man so keine synchronen PWMs.

von Henry (Gast)


Lesenswert?

Ich habe zwar nur eine kleinen Blick ins Datenblatt geworfen aber dabei 
finde ich nur ein Register "CTRLA" zum Einstellen des Prescalers.

von Simon K. (simon) Benutzerseite


Lesenswert?

Henry wrote:
> Ich habe zwar nur eine kleinen Blick ins Datenblatt geworfen aber dabei
> finde ich nur ein Register "CTRLA" zum Einstellen des Prescalers.

Jaha, aber jeder Timer hat (s)ein CTRLA Register. Und der Threadopener 
braucht halt mehrere Timer um 6 PWM Signale erzeugen zu können.

von Alexander R. (slider-al)


Lesenswert?

Also so wie ich das jetzt sehe funktioniert das mit dem Eventsystem. 
Erst initialisiere ich die Timer. Dann kann ich durch ein Event, die 
Timer neu starten. Wenn der Neustart von zwei Timern durch das gleiche 
Event erzeugt wird laufen diese dann hoffentlich auch gleichzeitig 
wieder los. Wenn ich so weit bin werd ich mal ein Feedback geben obs 
geklappt hat.

@ Josef: ich bin mir sicher, dass es Mikrokontroller gibt, die für die 
Aufgabenstellung viel besser geeignet sind. Mit nem DSP wäre das ganze 
wohl auch noch besser zu realisieren.
Nachdem ich aber ein blutiger Anfänger bin wollt ich in C programmieren 
und vorzugweise auch mit einem AVR-Controller, da ich von Atmel bisher 
nur gutes gehört hab und das AVR-Studio für Anfänger einfach genial is. 
Ob das ganze dann mit dem XMEGA gut funtionieren wird kann ich gar nicht 
einschätzen. Ich werds aber rausfinden :)

von sam (Gast)


Lesenswert?

ich habe eine software pwm mit 6 kanälen und ca 33kHz auf einem ATTiny 
2313 realisiert (auflösung ist aber nur knapp 7 bit, sprich 0...99)

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.