Probleme mit dem PWM-Ausgang beim XMega

Gast #2012386
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
Angehängte Dateien:
Gast #2012496
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.
(Firma: TravelRec.) Persönliche Seite #2012754
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.
Gast #2012925
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
Gast #2013074
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren