Forum: Mikrocontroller und Digitale Elektronik AVR: PWM mit Phase


von Heinz (Gast)


Lesenswert?

Hallo,

ich möchte (mehrere verschiedene) Signale nach folgendem Muster 
generieren:
1
       _______
2
______|       |_______________
3
0     ON      OFF            TOP

TOP kann gerne ein Wert 2^N sein (N >= 10bit)

Das ganze sieht zunächst aus wie eine PWM, ich benötige aber mehrere von 
diesen Signalen die gegeneinander phasenverschoben sind.
Dazu ist es notwendig dass die Werte für ON/OFF doppelt gepuffert bei 
z.b. TOP übernommen werden.

Frequenz des ganzen 20-100kHz

Welcher AVR hat diese Funktion? Habe schon mit einigen gearbeitet, dort 
gibt es aber als PWM Mode immer nur phase-correct oder center-aligned 
PWM.

Gruß,
Heinz

von Jobst M. (jobstens-de)


Lesenswert?

Heinz schrieb:
> Frequenz des ganzen 20-100kHz

Soll das die Taktfrequenz des Timers sein oder die Ausgangsfrequenz?
Mehr als 20kHz Ausgangsfrequenz bei 10 Bit Auflösung wird nicht möglich 
sein.

Sollte dies die Bedingung sein, dann besteht die einzige Möglichkeit 
darin, dies unter geschickter Ausnutzung des Timer-Interupts zu 
bewerkstelligen. Allerdings wird es eine gewisse Totzeit zwischen zwei 
Ereignissen geben:

Beispiel
1
                  _______________________________
2
Out 1   _________/                               \________________
3
                                  ________________________________
4
Out 2   _________________________/
5
                 |               |               |
6
                 |     Tmin      |     Tmin      |

Dies ist die Abarbeitungszeit für die ISR


Hardware gibt es dafür in den mir bekannten AVR nicht.


Gruß

Jobst

von H.Joachim S. (crazyhorse)


Lesenswert?

"mehrere" ist relativ ungenau....

von Wolfgang (Gast)


Lesenswert?

H.joachim Seifert schrieb:
> "mehrere" ist relativ ungenau....
Bei "..100 kHz" und ">= 10 Bit" macht das keinen Unterschied, da der 
max. mögliche Timer-Clock eines AVR sowieso schon zu langsam ist, um ein 
einziges Signal mit der Spezifikation zu erzeugen.

Es sei denn, der TO meint mit der Frequenz die Taktfrequenz des Timers, 
i.e. eine PWM Frequenz im Bereich <100Hz.

von temp (Gast)


Lesenswert?

Da haben nur sehr wenige MCs was an Bord. Atmel nicht. Insbesondere bei 
den dsPics gibts dafür Unterstützung. (dspic33fj16gs502 z.B.) Die haben 
Auflösungen der PWM von etwas über 1ns und können mehrere PWM Kanäle 
phasenverschoben generieren. Das was man bei Multiphasenwandlern braucht 
oder Wandlern nach der Phaseshiftmethode. Der o.g. hat 4 Kanäle es gibt 
aber welche mit mehr. Ich habe bisher 8051, avr und CortexM gemacht. 
Eine ähnliche Problemstellung hat es geschafft, dass ich auch noch in 
die PIC-Welt eingestiegen bin.

von s.j. (Gast)


Lesenswert?

Bei einer PWM Frequenz von 100kHz und 10 Bit Auflösung muss der PWM 
Zähler mit einem Takt von etwas mehr als 100MHz laufen. Meiner nicht 
100% kompetenten Meinung spricht das gegen einen AVR.
Wenn es um maximal 3 Channel geht kann man das unter anderem mit der 
LPC1700er Serie lösen. Ansonsten mal genauer bei den Herstellern suchen.

von Mark W. (Gast)


Lesenswert?

die ATxmega AU können einen PWM Takt auf 4x der CPU Clock = 32x4 =128MHz 
erzeugen, ich glaube das was du suchst ist die dual slope pwm, schaumal 
im Xmega AU Datenblatt S.178.
Die PWM Resolution kann zw. 2-16bit sein.

Mit der Hi-Res extension soll CPU Clock x 8 = 256MHz möglich sein

von Troll (Gast)


Lesenswert?

100 oder 128MHz erreichen die zwar nicht, aber es gibt spezielle AVRs, 
die eine interne PLL zur Erzeugung eines <= 64MHz Zählertaktes haben.
Ich frage mich immer, warum die so unbekannt sind:

Z.B. ATtiny85 (8 Pins, eher spartanisch) oder AT90PWM316 (32 Pins), mit 
vielen PWM-Ausgängen, teils mit komplementären Ausgängen und 
programmierbarer Totzeit.

An der Verfügbarkeit wirds nicht liegen. Den ATtiny85 gibt es sogar bei 
Reichelt für 1,35 und der AT90PWM316 kostet bei ebay 1,88.

von Julian B. (julinho)


Lesenswert?

Die TinyX5 haben zwar ein PLL, aber nur einen Timer dafür,d.h. ich kann 
zwar drei PWM-Signale erzeugen, aber die Phasenlage ist immer gleich.

Vielleicht hat der AT90PWM316 da mehr Möglichkeiten.
Die Phasenlage dynamisch zu ändern stelle ich mir mit einem AVR 
schwierig vor, da auch TOP ständig geändert werden müßte oder evt. ein 
TIMER Reset!?

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Heinz schrieb:
> ich möchte (mehrere verschiedene) Signale nach folgendem Muster
> generieren:
>
>
1
>        _______
2
> ______|       |_______________
3
> 0     ON      OFF            TOP
4
>
>
> TOP kann gerne ein Wert 2^N sein (N >= 10bit)
>
> Das ganze sieht zunächst aus wie eine PWM, ich benötige aber mehrere von
> diesen Signalen die gegeneinander phasenverschoben sind.
> Dazu ist es notwendig dass die Werte für ON/OFF doppelt gepuffert bei
> z.b. TOP übernommen werden.
>
> Frequenz des ganzen 20-100kHz

Hallo Heinz, sowas schaffst du nur durch direkte Programmierung. Dann 
läuft allerdings nichts anderes mehr auf dem AVR.
Mit einem ATmega328 z.B. sind bei 8 Kanälen und jeweils 1024 Werten (10 
Bit Auflösung) maximal ca. 30 kHz möglich. Per Interrupt (aber ohne 
Hauptprogramm) vielleicht 25 kHz. Per Interrupt normal vielleicht grade 
noch 10 kHz.

Die Maximalwerte gelten allerdings ohne die Berücksichtigung, dass du ab 
und zu die Flankenzeitpunkte ändern willst.

Mit dem oben vorgeschlagenen ATtiny85 kommst du tatsächlich auf über 60 
kHz – allerdings nur für einen Kanal (der interne Timer läuft per PLL 
mit 64 MHz). Der Mikrocontroller ist aber wirklich klein und billig, so 
dass du den auch mehrfach verbauen kannst (unter einem Euro pro Stück).

Grüße
Markus

von Max_123 (Gast)


Lesenswert?

Vielleich geht es doch mit einem AVR.

1. 8.Bit PWM verwenden und in der ISR PWM-Wert umschalten.
   z.B. PWM drei mal 200 und ein mal 201 als Tastverhältnis.
   Das ergibt 200,25 als Tastverhältnis.
2. Die Phasenverschiebung könnte man auch erreichen.
   Man könnte 2 PWM-Signale erzeugen und mit Exclusiv-Oder verknüpfen.

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.