Hi @ all. Ich weiß nicht, ob ihr mir weiterhelfen könnt, wäre aber um jede ernst gemeinte Antwort dankbar. Vorab: Ich beschäftige mich gerade mit einem Freescale MCS12XE uC und dessen PWM-Register. Ich habe ein 16-bit PWM Signal. Dieses erzeuge ich mir, indem ich Kanal 0 und Kanal 1 "verkette" (concatenation of two 8-bit channels.). Problem ist nun, dass der 8-bit PWM Kanal 2 nicht synchron mit Kanal01 ist. Das hätte ich aber gerne für meine Anwendung. Damit meine ich, dass die rising edge bzw. falling edge der beiden Signale immer einen gewissen Offset hat. PWM Duty-Cycle und Frequenz habe ich vorab entsprechend eingestellt, hier besteht also sicher keine Fehlerquelle. Ich kann mir das irgendwie nicht erklären. Eigentlich stammen ja alle PWM Kanäle von der selben Bus Clock ab und somit sollten ja die Flanken eigentlich synchron sein. Lediglich die aller erste Flanke beim Einschalten der PWM ist synchron, danach stellt sich ein konstanter Offset sein. Mal noch zum Vergleich: Wenn ich zwei 8-bit Kanäle miteinander vergleiche habe ich die Synchronität. Also hier bestätigt sich der Gedanke, dass ja mehrere PWMs im Endeffekt von der selben Clock abstammen. Vielleicht hat jemand von euch schon mal einen ähnlichen Fall gehabt? Würde mich interessieren, was ihr dazu denkt. Vielen vielen Dank und ein schönes Wochenende ;-)
@ Siggi G. (bize) >Problem ist nun, dass der 8-bit PWM Kanal 2 nicht synchron mit Kanal01 >ist. Das hätte ich aber gerne für meine Anwendung. >Damit meine ich, dass die rising edge bzw. falling edge der beiden >Signale immer einen gewissen Offset hat. Damit sind sie synchron, nur halt phasenverschoben. >Ich kann mir das irgendwie nicht erklären. Eigentlich stammen ja alle >PWM Kanäle von der selben Bus Clock ab und somit sollten ja die Flanken Früher (tm) hieß das einfach Takt. >Lediglich die aller erste Flanke beim Einschalten der PWM ist synchron, >danach stellt sich ein konstanter Offset sein. Siehe oben. >Mal noch zum Vergleich: Wenn ich zwei 8-bit Kanäle miteinander >vergleiche habe ich die Synchronität. Also hier bestätigt sich der >Gedanke, dass ja mehrere PWMs im Endeffekt von der selben Clock >abstammen. Nö, die beiden PWMs greifen auf den gleichen 8-Bit Zähler zu. Wahrscheinlich liegt dein Problem bei einer ungünstigen Initialisierung des 8 Bit und 16 Bit Zählers. Beide müssen bei Null starten.
> Falk Brunner schrieb: > @ Siggi G. (bize) > >>Problem ist nun, dass der 8-bit PWM Kanal 2 nicht synchron mit Kanal01 >>ist. Das hätte ich aber gerne für meine Anwendung. >>Damit meine ich, dass die rising edge bzw. falling edge der beiden >>Signale immer einen gewissen Offset hat. > > Damit sind sie synchron, nur halt phasenverschoben. ok, stimmt sie sind synchron. Mein Problem ist damit die verschobene Phase. > >>Ich kann mir das irgendwie nicht erklären. Eigentlich stammen ja alle >>PWM Kanäle von der selben Bus Clock ab und somit sollten ja die Flanken > > Früher (tm) hieß das einfach Takt. > >>Lediglich die aller erste Flanke beim Einschalten der PWM ist synchron, >>danach stellt sich ein konstanter Offset sein. > > Siehe oben. > >>Mal noch zum Vergleich: Wenn ich zwei 8-bit Kanäle miteinander >>vergleiche habe ich die Synchronität. Also hier bestätigt sich der >>Gedanke, dass ja mehrere PWMs im Endeffekt von der selben Clock >>abstammen. > > Nö, die beiden PWMs greifen auf den gleichen 8-Bit Zähler zu. > Wahrscheinlich liegt dein Problem bei einer ungünstigen Initialisierung > des 8 Bit und 16 Bit Zählers. Beide müssen bei Null starten. hmm also grundsätzlich habe ich es im C-Code so gemacht, dass ich beide Timer auf 0x0000 bzw. 0x00 setze und im nächsten Schritt über "PWME = 0x06;" dann den 16-bit und den 8-bit Kanal gleichzeitig aktiviere. Hmm
Vielleicht werden die beiden Timer von verschiedenen Vorteilern gespeist. Die müsste man reseten/synchronisieren. Versuch mal beide Timer mit maximalem Takt ohne Vorteiler zu betreiben. Ist der Phasenversatz immer gleich, wenn du dein Programm neu startest?
Falk Brunner schrieb: > Vielleicht werden die beiden Timer von verschiedenen Vorteilern > gespeist. Ja, die zwei Timer werden von verschiedenen Prescalern gespeist. >Die müsste man reseten/synchronisieren. Das habe ich schon versucht: PWME = 0x00; (Alle Counter aus) PWMCNT01 = 0x0000; (16 bit Counter) PWMCNT2 = 0x00; (8 bit Counter) PWME = 0x06; (Counter01 und Counter2 anschalten) Hat aber nicht viel geholfen leider. > Versuch mal beide > Timer mit maximalem Takt ohne Vorteiler zu betreiben. > Ist der Phasenversatz immer gleich, wenn du dein Programm neu startest? Nein ist er nicht. schwer zu erklären, aber ich würde einfach mal sagen er pendelt um einen mittleren phasenversatz. würde ich sagen, dass der phasenversatz immer innerhalb eines gewissen bereichs liegt, in etwas 25% plus minus 5%.
@ Siggi G. (bize) >Ja, die zwei Timer werden von verschiedenen Prescalern gespeist. Dann versuch mal sie von einem Prescaler zu speisen oder ganz ohne Prescaler. >>Die müsste man reseten/synchronisieren. >Das habe ich schon versucht: >PWME = 0x00; (Alle Counter aus) >PWMCNT01 = 0x0000; (16 bit Counter) >PWMCNT2 = 0x00; (8 bit Counter) >PWME = 0x06; (Counter01 und Counter2 anschalten) >Hat aber nicht viel geholfen leider. Und wo ist der Prescaler Reset? >> Ist der Phasenversatz immer gleich, wenn du dein Programm neu startest? >Nein ist er nicht. schwer zu erklären, aber ich würde einfach mal sagen >er pendelt um einen mittleren phasenversatz. würde ich sagen, dass der >phasenversatz immer innerhalb eines gewissen bereichs liegt, in etwas >25% plus minus 5%. Klingt nach prescaler.
Falk Brunner schrieb: > @ Siggi G. (bize) > >>Ja, die zwei Timer werden von verschiedenen Prescalern gespeist. > > Dann versuch mal sie von einem Prescaler zu speisen oder ganz ohne > Prescaler. > >>Die müsste man reseten/synchronisieren. >Das habe ich schon versucht: >PWME = 0x00; (Alle Counter aus) >PWMCNT01 = 0x0000; (16 bit Counter) >PWMCNT2 = 0x00; (8 bit Counter) >PWME = 0x06; (Counter01 und Counter2 anschalten) >Hat aber nicht viel geholfen leider. > > Und wo ist der Prescaler Reset? > > Klingt nach prescaler. Was ist ein Prescaler Reset? Ich dachte ein Prescaler ist nur ein Wert den man irgendwo setzt??
@ Siggi G. (bize) >Was ist ein Prescaler Reset? Ein Reset des Prescalers. >Ich dachte ein Prescaler ist nur ein Wert den man irgendwo setzt?? Das ist die Einstellung des Prescalers. Ein Prescaler ist ein Stück Hardware, das den Takt teilt, je nach Einstellung. Damit werden u.a. Timer getaktet. Wenn es mehr als einen Prescaler (Hardware!) gibt, kann es passieren, dass die zwar mit dem gleichen Eingangstakt laufen, aber der interne Zählwert nicht die gleiche Phase hat. Das passiert, wenn man einen mal anhält und den anderen nicht. Wie das genau bei deinem Prozessor ist, musst du im Datenblatt GENAU nachlesen.
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.