Generera PWM Wave med PIC -mikrokontroller: 6 steg
Generera PWM Wave med PIC -mikrokontroller: 6 steg
Anonim
Generera PWM Wave med PIC -mikrokontroller
Generera PWM Wave med PIC -mikrokontroller
Generera PWM Wave med PIC -mikrokontroller
Generera PWM Wave med PIC -mikrokontroller
Generera PWM Wave med PIC -mikrokontroller
Generera PWM Wave med PIC -mikrokontroller

VAD ÄR PWM?

PWM STANDS FÖR PULSBREIDMODULATION är en teknik med vilken pulsbredden varieras.

För att förstå detta koncept tydligt överväga en klockpuls eller någon fyrkantvågssignal, den har 50% arbetscykel vilket betyder att Ton och Toff -perioden är densamma, den totala varaktighet för vilken signalen var hög och varaktigheten för vilken signalen var låg kallas total tidsperiod.

För bilden som visas ovan har denna våg en arbetscykel på 50%

Driftcykel = (PÅ -tid / total tid)*100

ON -tid - tid för vilken signal var hög

AV -tid - tid fiende som var låg signal Total tid -Total tidsperiod för pulsen (både PÅ och AV -tid)

Steg 1: Välja mikrokontroller

Väljer mikrokontroller
Väljer mikrokontroller

Att välja lämplig mikrokontroller för projektet är detta den väsentliga delen av projektet PWM -signaler kan genereras i mikrokontroller med PWM -kanaler (CCP -register). För detta projekt planerar jag att hålla mig till pic16f877. du kan ladda ner databladlänken nedan

PIC16F877a datablad klicka här

CCP -modulen är ansvarig för att producera PWM -signal. CCP1 och CCP2 är multiplexerade med PORTC. PORTC är en 8-bitars bred dubbelriktad port. Motsvarande datariktningsregister är TRISC. Att ställa in TRISC -bit (= 1) kommer att ta motsvarande PORTC -stift som en ingång. Om du rensar en TRISC -bit (= 0) kommer motsvarande PORTC -stift att bli en utgång.

TRISC = 0; // Om du rensar denna bit kommer PORTC att bli utdata

Steg 2: KONFIGURERA CCP -MODUL

KONFIGURERA CCP -MODUL
KONFIGURERA CCP -MODUL
KONFIGURERA CCP -MODUL
KONFIGURERA CCP -MODUL

CCP - Fånga/Jämför/PWM -MODULER

Varje Capture/Compare/PWM (CCP) -modul innehåller ett 16-bitars register som kan fungera som:

• 16-bitars registreringsregister

• 16-bitars Jämför register

• PWM Master/Slave Duty Cycle -register

Konfigurera CCP1CON -registret till PWM -läge

Registrera beskrivning

CCPxCON Detta register används för att konfigurera CCP -modulen för Capture/Compare/PWM -drift.

CCPRxL Detta register innehåller 8-Msb-bitarna i PWM, de lägre 2-bitarna kommer att ingå i CCPxCON-registret.

TMR2 Free running counter som jämförs med CCPR1L och PR2 för att generera PWM -utgången.

Nu kommer jag att använda binärt för att representera bitarna för att konfigurera CCP1CON -registret.

se bilden ovan.

CCP1CON = 0b00001111;

Du kan också du hex -format

CCP1CON = 0x0F; // konfigurera CCP1CON -register för PWM -läge

Steg 3: Konfigurera Timer2 -modul (TMR2 -register)

Konfigurera Timer2 -modul (TMR2 -register)
Konfigurera Timer2 -modul (TMR2 -register)

Timer2 är en 8-bitars timer med en förskalare och en postskalare. Den kan användas som PWM -tidsbas för PWM -läget för CCP -modulerna. TMR2 -registret är läsbart och skrivbart och rensas på alla enheter som återställs.

T2CON -register visas

Förskalningen och efterskalningen justerar utmatningsfrekvensen för den genererade PWM -vågen.

Frekvens = klockfrekvens/(4*förskalare*(PR2-TMR2)*Postskalare*antal)

Var Tout = 1/frekvens

T2CON = 0b00000100;

Detta kommer att generera 2,5 KHz @ 1Mhz eller 100KHz @ 4MHz kristall (praktiskt taget finns det en begränsning för denna PWM -frekvens, se särskilt datablad för mer information)

hex -representation

T2CON = 0x04; // aktivera T2CON utan förskalare och efterskalningskonfiguration

Steg 4: Konfigurera PR2 (Timer2 Period Register)

Timer2-modulen har ett 8-bitars periodregister, PR2. Timer2 ökar från 00h tills den matchar PR2 och återställs sedan till 00h i nästa ökningscykel. PR2 är ett läsbart och skrivbart register. PR2 -registret initieras till FFh vid återställning.

Om du ställer in ett lämpligt intervall för PR2 kan du ändra arbetscykeln för den genererade PWM -vågen

PR2 = 100; // Ställ in cykeltiden till 100 för att variera arbetscykeln från 0-100

För enkelhetens skull använder jag PR2 = 100 genom att göra CCPR1L = 80; 80% arbetscykel kan uppnås.

Steg 5: Konfigurera CCPR1l -modulen

Eftersom PR2 = 100 CCPR1l kan konfigureras var som helst mellan 0-100 för att få önskad driftscykel.

Steg 6: Skriv skissen på dig MPLAB X IDE Koden ges nedan

Skriv skissen på dig MPLAB X IDE Koden ges nedan
Skriv skissen på dig MPLAB X IDE Koden ges nedan

#omfatta

void delay (int a) // funktion för att generera fördröjning {

för (int i = 0; i <a; i ++)

{

för (int j = 0; j <144; j ++);

}

}

void main ()

{TRISC = 0; // Om du rensar denna bit kommer PORTC att bli utdata.

CCP1CON = 0x0F; // konfigurera CCP1CON -register för PWM -läge

T2CON = 0x04; // aktivera T2CON utan förskalare och efterskalningskonfiguration.

PR2 = 100; // Ställ in cykeltiden till 100 för att variera arbetscykeln från 0-100

medan (1) {

CCPR1L = 75; // genererade 75% fördröjningscykelfördröjning (1);

}

}

Jag har också gjort en liten ändring av koden så att frekvensen för den genererade PWM -vågen

Detta är koden simuleras i proteus och utmatningen PWM -våg visas nedan För att ladda upp detta på dina bildutvecklingskort använder #include med lämpliga konfigurationsbitar.

Tack