Hallo,
wenn ich aber 20*10^6/16 rechne komme ich auf 1,25*10^6,warum bzw. wie kommt Sprut denn auf 312,5kHz (mir ist durchaus bewusst dass ich mich mit dieser Frage wahrscheinlich komplett selbst disqualifiziere aber es muss leider sein)?
Die Frequenz der PWM richtet sich primär nach der Frequenz, die an Timer2 anliegt.
Bei 20Mhz arbeitet der PIC intern mit 5MHz. Durch den Prescalerwert von 16 erhält man 312,5 kHz.
Wenn dein 18F2550 nun mit 48Mhz läuft, ist der interne Takt 12MHz. Bei einem Prescaler von 16 wird der Timer2 mit 750kHz gespeist. Du möchtest beispielsweise 5kHz als PWM Frequenz haben 5kHz. Dazu musst du PR2 mit 750/5 = 150 beschreiben.
der evtl. sogar die gleich hinter dem PLL(also 96?)
Die brauchst du nie.
Und wenn ich jetzt meinen PIC mit 48MHz betreibe aber nur 12MHz einspeise, welche Frequenz muss ich denn da nehmen? die 12 MHz vom Quarz oder immer die MHz mit denen auch die CPU läuft?
Ich persönlich rechne meist mit dem internen Takt, aber manche Formel von Microchip nehmen den Takt des Quarzes. Das erkennt man an dem Faktor "4" der irgendwo auftaucht bzw an Fosc, welches aber immer die Frequenz des Quarzes meinst.
Zitat
Für den PWM-Mode ist CCPxM3=1 und CCPxM2=1 zu setzen.
dann komme ich beim Punkt 5 zu folgendem Ergebnis:
Code:
CCP1CONbits.CCP1M2=1; //5.: CCP1 für PWM konfiguriert
CCP1CONbits.CCP1M3=1;
CCP2CONbits.CCP2M2=1; //CCP2 für PWM konfiguriert
CCP2CONbits.CCP2M3=1;
Ja das kommt zum Schluss. Vorher muss noch der Duty Cycle festgelegt werden. Da kommen jetzt CCPxCON<5:4> ins Spiel.
Wie du siehst, ist die
Auflösung der Frequenz in 255 Schritten der Timerfrequenz einstellbar, also mit 8Bit Auflösung. Im Unterschied dazu besteht die Möglichkeit, den
Dutycycle mit 10Bit Auflösung einzustellen. Die 8 Bits aus CCPR1L stellen nun den Dutycycle ein, mit ihnen ist eine Auflösung von 8Bit möglich, also 1/255 = 0.0039% Schritte. Ist das nicht genau genug, können noch CCPxCON<5:4> herangezogen werden. Sie ermöglichen, den Dutycyle in 1024 Schritten (also 10Bit) einzustellen. Damit sind ca. 0,001% Auflösung für den DC möglich.
Diese 10Bit Auflösung ist möglich, solange die Gleichung 15-3 erfüllt ist, die die mögliche Auflösung angibt.
max. mögl. Auflösung = [log( Fosc/Fpwm)]/log(2),
wobei Fosc = Frequenz Quarz (bei dir 48Mhz) und Fpwm die Frquenz der gewünschten PWM ist.
Bei dir ergibt die obige Formel 11.22, es sind also 10Bit Auflösung möglich.
Wenn ich das richtig verstehe, möchest du einen Motor steuern (also mit PWM->Treiber->MOSFET).
Dazu ist eine 8Bit locker ausreichend. Du kannst also CCPxCON<5:4> einfach löschen.
vielen Dank für die Geduld und die Nerven welche ihr mir opfert
Im Moment bin ich der einzige der opfert :angel1:
Alles klar?
Grüße Stefan