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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.