PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit PIC18F4550



MHK
16.01.2007, 09:25
Hallo zusammen!
Ich habe folgendes Problem mit einem PIC18F4550:
Ich nutze den PWM- Ausgang, also den Timer3 und möchte eine PWM-
Frequenz von 20kHz erzeugen. OSzillator ist ein 20MHz- Quarz. Es ist
kein Vorteiler eingestellt, sodass bei der Einstellung des Registers PR2
= 255 eigentlich die Frequenz von 20kHz erreicht werden sollte (20MHz/4
= 5MHz; 5MHz/(255+1) = 19,53kHz) aber das gemessene PWM- Signal besitzt
eine Frequenz, die nur ein viertel dessen beträgt, also 4,88kHz. Woran
kann das liegen?

orph
16.01.2007, 12:16
Hi

PICs sind so konstruiert, dass der Interne Arbeitstakt, als auch der Takt mit dem der Timer aufgefüllt wird, ein Viertel vom externen Takt beträt.
Mehr dazu sollte im Datenblatt stehen.

greez

MHK
16.01.2007, 13:07
Das ist klar. Wie du in der Berechnung sehen kannst ist der Oszilator- Takt durch vier geteilt, was dann den Arbeitstakt des PIC darstellt. Diese 5MHz geteilt durch den Wert, der im PR2- Register des Timers steht sollte die Frequenz der PWM ergeben... ist es aber nicht. Wo könnte der Fehler liegen?

phaidros
16.01.2007, 14:06
Es gibt noch einen Post-Scaler. Zumindest beim 18F452. Vielleicht ist der bei dir gesetzt?

MHK
16.01.2007, 16:04
Nein. Dieser wird außerdem nicht für die PWM benutzt.

phaidros
16.01.2007, 23:07
Du schriebst:
Ich nutze den PWM- Ausgang, also den Timer3 ...

PWM benutzt aber Timer 2. Liegt es daran?

MHK
17.01.2007, 07:26
ja natürlich... ich benutze den Timer2, habe mich nur vertippt

phaidros
17.01.2007, 13:34
OK.
Kannst du mal den Code (oder den entsprechenden Ausschnitt) posten.

Mir fällt keine einfache Lösung mehr ein.

MHK
17.01.2007, 14:01
Hier der Code um die nötigen Register zu setzen:

CCP2CON = 0b00001100;
T2CON = 0b00000100;
TRISD = 0b11111110;
TRISC = 0b11111101;
PR2 = 0b11111111;

phaidros
17.01.2007, 21:16
Wie setzt du das CCPR2L Register ?

MHK
18.01.2007, 07:39
Das spielt für die Periode doch gar keine Rolle! Egal welche Einstellung das CCPR2L- Register hat, es sind immer nur knapp 5kHz.

Mobius
18.01.2007, 11:21
Hum, stimmt, das müsste ein PWM von knapp 20KHz ergeben und die Register sind auch richtig gesetzt, also an dem Modul kann es mMn nicht liegen (außer es ist irgendwo im Chip ein Hardware-Fehler, was ich SEHR stark bezweifle).

Nach meiner Rechnung (fpwm*256*4=fosc) müsste dein µC eigentlich mit knapp über 5MHz laufen. Schau mal nach, ob der PIC wirklich mit 20MHz getaktet wird, also lass ein IO-Pin toggeln und miss mit einem Oscilloscope die Frequenz der Rechtecksspannung von einer steigenden zu einer Flanke.
Meine Idee wäre, dass der Chip nicht mit dem externen, sondern mit dem internen Oscillator läuft. Also mit anderen Worten, ob deine Oscillator-Einstellungen stimmen (vor allem, ob du den 48MHz-PLL abgeschalten hast), den der PIC hat die Möglichkeit bei einer fehlerhaften externen Quelle auf den internen Oscillator umzuschalten (kannst auch mal das Bit OSCFIF im PIR2 anschauen).

MfG
Mobius

kalledom
18.01.2007, 16:18
Vielleicht schwingt der Quarz nur auf einer 1/4 Grundwelle ?
Ist der korrekt mit 2 mal 22p nach GND beschaltet mit ganz kurzen Verbindungen zum PIC ?