Ich muss ein PWM-Signal mit dem Mikrocontroller PIC18F2550 bei fast 20 kHz erzeugen. Ich habe das Datenblatt gelesen, fand es zu komplex und verwirrend, dann habe ich angefangen, im Netz nach einem Beispielcode zu suchen, um endlich dieses PWM-Tool zu sehen .
Ich habe es mit Parametern verwendet =20 MHz und = 20 kHz, um diese beiden unterschiedlichen Codes für entsprechende zwei unterschiedliche Arbeitszyklusprozentsätze zu erzeugen.
// Duty cycle = 0%
PR2 = 0b11111001 ;
T2CON = 0b00000100 ;
CCPR1L = 0b00000000 ;
CCP1CON = 0b00001100 ;
// Duty cycle = 100%
PR2 = 0b11111001 ;
T2CON = 0b00000100 ;
CCPR1L = 0b11111001 ;
CCP1CON = 0b00111100 ;
Das Datenblatt sagt mir, dass das 4. und 5. Bit des CCP1CON-Registers die LSBs des Werts "PWM-Tastverhältnis mit" sind und seine MSBs im CCPR1L-Register gespeichert sind, nicht wahr?
Das bedeutet, dass für ein Tastverhältnis von 0 % das 10-Bit-PWM-Tastverhältnis so ist:
00000000 + 00 = 0x000
Und für 100 % Einschaltdauer,
11111001 + 11 = 0x3E7
Also muss ich laut diesem Tool die Werte zwischen 0x000 und 0x3E7 auf die relevanten PWM-Register setzen, um Arbeitszyklusverhältnisse zwischen 0% und 100% zu haben. An diesem Punkt bin ich verwirrt und folgende Fragen stellen sich mir:
Dies war eine lange Frage, aber es würde mir sehr helfen, wenn mir jemand freundlicherweise die allgemeinen Schritte und die Logik der PWM-Signalerzeugung mit PIC-Mikrocontrollern erklärt.
Danke.
Ich weiß, es ist ein bisschen spät, aber ich habe gerade diese sabischen Zweifel. Nachdem ich mich umgesehen habe, bin ich auf dieses Microchip-Dokument gestoßen , das einige Beispiele zeigt.
Zuerst berechnen wir . Aus dieser Formel
wir bekommen
Wo , Und ist der Timer2-Prescaler-Wert (1, 4 oder 16).
Also, wenn wir wollen , und wählen , wir bekommen . Wir sollten höhere Werte für wählen nur wenn überschreitet 8 Bit ( ) für die gegebene Vorskalierung.
Jetzt berechnen wir die maximale PWM-Auflösung für die gegebene Frequenz:
Das gibt uns Bits (ich weiß, es klingt komisch, aber wir werden es später so verwenden).
Lassen Sie uns nun das PWM-Tastverhältnis berechnen. Sie wird durch den 10-Bit-Wert angegeben , das ist, Bits als wichtigster Teil, und Und (Bits 5 und 4 von ) die niederwertigsten Bits. Nennen wir diesen Wert , oder einfach . (x ist die CCP-Nummer)
Da wir in unserem Fall eine maximale PWM-Auflösung von haben Bits, das PWM-Tastverhältnis (d. h. der Wert von ) muss ein Wert zwischen sein Und . Wenn wir also einen Arbeitszyklus von 50 % wollen, .
Die auf dem Datenblatt angegebene Formel (auch auf dem verlinkten Dokument),
gibt uns die Impulsdauer in Sekunden. In unserem Fall ist es gleich . Seit , ist es offensichtlich, dass wir eine Einschaltdauer von 50 % haben.
Das heißt, DCx in Bezug auf das Tastverhältnis als zu berechnen , wir machen:
Beantwortung Ihrer anderen Fragen:
2) Die Auflösung Ihres PWM-Impulses mit Periode Ist
3) Weil CCPRxL zusammen mit DCxB1 und DCxB0 die Pulsdauer bestimmen. Einstellen von CCPRxL auf einen höheren Wert als bedeutet eine Impulsdauer, die höher als die PWM-Periode ist, und daher erhalten Sie eine Wohnung Signal.
Bei Verwendung eines 1:1-Vorskalars auf TMR2 repräsentiert der CCPR1L-Wert die ganze Anzahl von CPU-Zyklen der "Einschaltzeit" für jeden PWM-Zyklus. Bei einem 4:1-Preskalar stellt es die Anzahl der Vier-Zyklen-Zählungsinkremente usw. dar.
Bit 0 des CCP1CON-Registers verzögert jeden Abschaltzyklus um 1/4 eines Zählinkrements; Bit 1 verzögert es um 1/2. Die Effekte sind kumulativ. Beachten Sie, dass diese Bits bei älteren PICs keine Wirkung haben, wenn CCPR1L null ist; Wenn sich der Ausgang nie einschaltet, hat das Verzögern des Ausschaltens keine Wirkung.
Der Wert in PR2 legt das Intervall zwischen dem Beginn eines PWM-Zyklus und dem Beginn des nächsten fest. Setzt man PR2 auf einen Wert von 99 und wählt einen 1:1-Vorskalar, dann startet alle 100 Taktzyklen ein PWM-Zyklus (einer größer als der programmierte Wert). Wenn man CCPR1L auf 12 setzt und die beiden unteren Bits von CCP1CON auf '1', '0' setzt, dann ist der PWM-Ausgang alle 100 CPU-Zyklen für zwölf volle CPU-Zyklen plus einen zusätzlichen halben Zyklus für einen Nettoarbeitszyklus hoch von 1/8.
noufal
PR2
Registerwerts?