Inhaltsverzeichnis:
- Schritt 1: Auswahl des Mikrocontrollers
- Schritt 2: CCP-MODUL KONFIGURIEREN
- Schritt 3: Konfigurieren des Timer2-Moduls (TMR2-Register)
- Schritt 4: Konfigurieren von PR2 (Timer2 Periodenregister)
- Schritt 5: CCPR1l-Modul konfigurieren
- Schritt 6: Schreiben Sie die Skizze auf Ihre MPLAB X IDE, der Code wird unten angegeben
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
WAS IST PWM?
PWM STEHT FÜR PULSE WIDTH MODULATION ist eine Technik, mit der die Breite des Impulses variiert wird.
Um dieses Konzept klar zu verstehen, betrachten Sie einen Taktimpuls oder ein beliebiges Rechteckwellensignal, das einen Arbeitszyklus von 50% hat, was bedeutet, dass die Ton- und Toff-Periode gleich sind. Die Gesamtdauer, für die das Signal hoch und die Dauer für das Signal niedrig war, wird als Gesamt bezeichnet Zeitraum.
Für das oben gezeigte Bild hat diese Welle ein Tastverhältnis von 50%
Arbeitszyklus = (ON-Zeit / Gesamtzeit)*100
EIN-Zeit - Zeit, für die das Signal hoch war
AUS-Zeit - Zeit, für die das Signal niedrig war Gesamtzeit -Gesamtzeitdauer des Impulses (sowohl EIN- als auch AUS-Zeit)
Schritt 1: Auswahl des Mikrocontrollers
Die Auswahl des geeigneten Mikrocontrollers für das Projekt ist der wesentliche Teil des Projekts PWM-Signale können in Mikrocontrollern mit PWM-Kanälen (CCP-Registern) erzeugt werden. Für dieses Projekt plane ich, bei pic16f877 zu bleiben. Sie können den Datenblatt-Link herunterladen, der unten angegeben ist
PIC16F877a Datenblatt hier klicken
Das CCP-Modul ist für die Erzeugung des PWM-Signals verantwortlich. CCP1 und CCP2 werden mit PORTC gemultiplext. PORTC ist ein 8-Bit breiter bidirektionaler Port. Das entsprechende Datenrichtungsregister ist TRISC. Durch Setzen des TRISC-Bits (=1) wird der entsprechende PORTC-Pin als Eingang verwendet. Das Löschen eines TRISC-Bits (=0) macht den entsprechenden PORTC-Pin zu einem Ausgang.
TRISC = 0; //Das Löschen dieses Bits macht PORTC als Ausgabe
Schritt 2: CCP-MODUL KONFIGURIEREN
CCP - ERFASSEN/VERGLEICHEN/PWM-MODULE
Jedes Capture/Compare/PWM (CCP)-Modul enthält ein 16-Bit-Register, das als:
• 16-Bit-Capture-Register
• 16-Bit-Vergleichsregister
• PWM-Master/Slave-Tastverhältnisregister
Konfigurieren Sie das CCP1CON-Register auf den PWM-Modus
Registrieren Beschreibung
CCPxCON Dieses Register wird verwendet, um das CCP-Modul für den Capture/Compare/PWM-Betrieb zu konfigurieren.
CCPRxL Dieses Register enthält die 8-Msb-Bits von PWM, die unteren 2-Bits sind Teil des CCPxCON-Registers.
TMR2 Freilaufender Zähler, der mit CCPR1L und PR2 zur Erzeugung des PWM-Ausgangs verglichen wird.
Jetzt werde ich binär verwenden, um die Bits zum Konfigurieren des CCP1CON-Registers darzustellen.
siehe das Bild oben.
CCP1CON = 0b00001111;
Sie können auch das Hex-Format verwenden
CCP1CON = 0x0F; // CCP1CON-Register für PWM-Modus konfigurieren
Schritt 3: Konfigurieren des Timer2-Moduls (TMR2-Register)
Timer2 ist ein 8-Bit-Timer mit einem Prescaler und einem Postscaler. Sie kann als PWM-Zeitbasis für den PWM-Modus des/der CCP-Moduls verwendet werden. Das TMR2-Register ist lesbar und beschreibbar und wird bei jedem Geräte-Reset gelöscht.
T2CON-Register wird angezeigt
Prescale und Postscale passen die Ausgangsfrequenz der erzeugten PWM-Welle an.
Frequenz = Taktfrequenz/(4*Prescaler*(PR2-TMR2)*Postscaler*count)
Wobei Tout = 1/Frequenz
T2CON = 0b00000100;
Dies erzeugt 2,5 KHz @ 1Mhz oder 100KHz @ 4MHz Quarz (praktisch gibt es eine Beschränkung für diese PWM-Frequenz, siehe spezielles Datenblatt für weitere Details)
Hex-Darstellung
T2CON = 0x04; // T2CON ohne Prescaler- und Postscale-Konfiguration aktivieren
Schritt 4: Konfigurieren von PR2 (Timer2 Periodenregister)
Das Modul Timer2 verfügt über ein 8-Bit-Periodenregister PR2. Timer2 inkrementiert von 00h, bis er mit PR2 übereinstimmt, und wird dann beim nächsten Inkrementierungszyklus auf 00h zurückgesetzt. PR2 ist ein lesbares und beschreibbares Register. Das PR2-Register wird beim Zurücksetzen auf FFh initialisiert.
Durch Einstellen eines geeigneten Bereichs für PR2 kann das Tastverhältnis der erzeugten PWM-Welle geändert werden
PR2 = 100; // Stellen Sie die Zykluszeit auf 100 ein, um das Tastverhältnis von 0-100. zu variieren
Der Einfachheit halber verwende ich PR2 = 100, indem ich CCPR1L = 80 mache; 80% Arbeitszyklus kann erreicht werden.
Schritt 5: CCPR1l-Modul konfigurieren
Da PR2 = 100, kann CCPR1l irgendwo zwischen 0-100 konfiguriert werden, um den gewünschten Arbeitszyklus zu erhalten.
Schritt 6: Schreiben Sie die Skizze auf Ihre MPLAB X IDE, der Code wird unten angegeben
#enthalten
void delay(int a) //Funktion zum Erzeugen einer Verzögerung{
for(int i=0; i<a;i++)
{
for(int j=0;j<144;j++);
}
}
void main()
{TRISC = 0; //Das Löschen dieses Bits macht PORTC als Ausgabe.
CCP1CON = 0x0F; // CCP1CON-Register für PWM-Modus konfigurieren
T2CON = 0x04; // T2CON ohne Prescaler- und Postscale-Konfiguration aktivieren.
PR2 = 100; // Stellen Sie die Zykluszeit auf 100 ein, um das Tastverhältnis von 0-100. zu variieren
während(1){
CCPR1L = 75; // erzeugte 75% Arbeitszyklusverzögerung (1);
}
}
Ich habe auch eine kleine Änderung am Code vorgenommen, damit die Frequenz der erzeugten PWM-Welle
Dieser Code wird in Proteus simuliert und die Ausgangs-PWM-Welle wird unten gezeigt. Um dies auf Ihre Bildentwicklungsboards hochzuladen, verwenden Sie #include mit geeigneten Konfigurationsbits.
Dankeschön