Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
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
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
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)
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
#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