Inhaltsverzeichnis:

PWM-Welle mit PIC-Mikrocontroller generieren - Gunook
PWM-Welle mit PIC-Mikrocontroller generieren - Gunook

Video: PWM-Welle mit PIC-Mikrocontroller generieren - Gunook

Video: PWM-Welle mit PIC-Mikrocontroller generieren - Gunook
Video: PIC_Lecture 12 : PWM signal generation using CCP block of PIC | DC motor speed control | 2024, November
Anonim
Generieren Sie PWM-Wellen mit PIC-Mikrocontroller
Generieren Sie PWM-Wellen mit PIC-Mikrocontroller
Generieren Sie PWM-Wellen mit PIC-Mikrocontroller
Generieren Sie PWM-Wellen mit PIC-Mikrocontroller
Generieren Sie PWM-Wellen mit PIC-Mikrocontroller
Generieren Sie PWM-Wellen mit PIC-Mikrocontroller
Generieren Sie PWM-Wellen mit PIC-Mikrocontroller
Generieren Sie PWM-Wellen mit PIC-Mikrocontroller

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

Auswahl des Mikrocontrollers
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-MODUL KONFIGURIEREN
CCP-MODUL KONFIGURIEREN
CCP-MODUL KONFIGURIEREN
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)

Konfigurieren des Timer2-Moduls (TMR2-Register)
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

Schreiben Sie die Skizze auf Ihre MPLAB X IDE, der Code wird unten angegeben
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

Empfohlen: