Forum: Mikrocontroller und Digitale Elektronik Probleme mit dem PWM-Ausgang beim XMega


von Nyquist-Shannon (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich hab Probleme mit meinem XMega64A3.
Hab ein Programm, bei dem sich das PWM-Signal am Ausgang des 
Mikrokontrollers etwa 5000 Mal in der Sekunde ändert.

Jedoch erzeugt der XMega eine Störung. Hab ein kleines Testprogramm 
geschrieben um es zu zeigen.


Der Timer des Ausgangs wird initialisiert.
1
void timer1_init(void)
2
{
3
TCE1.CTRLA = 0x01;
4
TCE1.CTRLB = 0xF3;
5
TCE1.PER = 0xC00;
6
}

Das Testprogramm ist schlicht.
1
int i=0;
2
while(1)
3
{
4
wdt_reset();
5
if(i<1){TCE1.CCA=1536;i++;} else{TCE1.CCA=1537;i++;} if(i==2){i=0;}
6
}

Den Ausgang hab ich mit einem Logikanalysator aufgezeichnet um den 
Fehler zu illustrieren (Anhang).


Sieht aus, als ob sich der Timer bei -700us für kurze Zeit aufhängt. 
Warum? Der Aufhänger taucht sporadisch auf und mir ist aufgefallen, je 
schneller ich den Ausgang toggle, desto häufiger tritt der Fehler auf.


Ich bedanke mich schon im voraus.

Gruß, Nyquist-Shannon

von Kakadu (Gast)


Lesenswert?

Bei PWM gibt es ein grundsätzliches Problem, wenn das Compare-Register 
asynchron umgeschaltet wird.

Angenommen man hat einen Zähler, der von 0 - 100 läuft. Der Compare-Wert 
beträgt 70 und der Zähler steht aktuell bei 50. Schreibt man jetzt den 
Compare-Wert auf 30 um, muß der Zähler erst über 100 - 0 - 30 laufen, 
damit der Compare-Wert beachtet wird.

Dies kann man nur vermeiden, wenn der Compare-Wert immer synchron beim 
Überlauf 100 - 0 neu geschrieben wird. Dazu gibt es spezielle PWM-Modi 
und Register. Der XMEGA sollte das auch können.

von Gerd T. (Gast)


Lesenswert?

angeblich sind xmegas ja eine tot-geburt...

von Kakadu (Gast)


Lesenswert?

>angeblich sind xmegas ja eine tot-geburt...

... und die Erde eine Scheibe.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Kakadu schrieb:
> Dies kann man nur vermeiden, wenn der Compare-Wert immer synchron beim
> Überlauf 100 - 0 neu geschrieben wird. Dazu gibt es spezielle PWM-Modi
> und Register. Der XMEGA sollte das auch können.

Die OCR-Register sind, wie beim Mega auch, einfach gepuffert. Es ist 
also Bockwurst, wann das Register geschrieben wird. Die PWM ist auf 
jeden Fall frei von Störungen (Glitches), da immer bei Timer-Top das 
Register übernommen wird. Ich könnte mir nur vorstellen, dass von der 
Firmware auf Portregister geschrieben wird oder Kontrollbits 
gelöscht/gesetzt werden.

von Nyquist-Shannon (Gast)


Lesenswert?

Beim Probieren hab ich festgestellt, dass im Dual Slope Mode keine 
Fehler entstehen. Nur im Single Slope Mode gibt es diese unerwarteten 
Fehler.
Ich muss aber mein Programm im Single Slope Mode betreiben um eine 
Trägerfrequenz von über 10kHz zu haben mit einer Auflösung von 3072.

Gruß, Nyquist-Shannon

von Kakadu (Gast)


Lesenswert?

@Knut Ballhause

Ich versteh Deine Aussage nicht. Ohne Pufferung von OCR müssen Fehler 
entstehen. Typischerweise, wenn der Wert von OCR verringert wird.

@Nyquist-Shannon

Es gibt doch die Register CCBUFx. Sowie ich das Datenblatt verstehe, 
wären das die "richtigen" Register.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Kakadu schrieb:
> Es gibt doch die Register CCBUFx. Sowie ich das Datenblatt verstehe,
> wären das die "richtigen" Register.

Richtig!

von Nyquist-Shannon (Gast)


Lesenswert?

Mit dem Register CCBUFx funktioniert es jetzt einwandfrei.

Danke.

Gruß, Nyquist-Shannon

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.