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
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.
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
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.
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
Stichwort Z-Source Inverter hauptsächlich für Systeme mit stark schwankender Quellenspannung(Solar oder BZ Inselsysteme)
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...
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
Die Taktfrequenz soll erst mal bei 20kHz liegen. Wie kann man die Synchronisierung der Timer denn in Software realisieren?
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
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.
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 !
Die Timer hängen alle am gleichen Prescaler der beim Start auf off steht. Alle Timer initialisieren und dann den Prescaler auf Wunschwert stellen.
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.
Ich habe zwar nur eine kleinen Blick ins Datenblatt geworfen aber dabei finde ich nur ein Register "CTRLA" zum Einstellen des Prescalers.
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.
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.