Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
HVA ER PWM?
PWM STANDS FOR PULSE WIDTH MODULATION er en teknikk der bredden på pulsen varieres.
For å forstå dette konseptet, bør du klart vurdere en klokkepuls eller et firkantbølgesignal. Den har 50% driftssyklus som betyr at Ton og Toff -perioden er den samme. Den totale varigheten som signalet var høyt og varigheten for hvilket signalet var lavt kalles total tidsperiode.
For bildet vist ovenfor har denne bølgen en driftssyklus på 50%
Driftssyklus = (PÅ -tid / total tid)*100
PÅ tid - tid som signalet var høyt
AV -tid - tid fiende som var lavt Total tid -Total tidsperiode for pulsen (både PÅ og AV -tid)
Trinn 1: Velge mikrokontroller
Å velge riktig mikrokontroller for prosjektet, dette er den viktigste delen av prosjektet PWM -signaler kan genereres i mikrokontrollere med PWM -kanaler (CCP -registre). For dette prosjektet planlegger jeg å holde meg til pic16f877. Du kan laste ned databladkoblingen nedenfor
PIC16F877a datablad klikk her
CCP -modulen er ansvarlig for å produsere PWM -signal. CCP1 og CCP2 er multiplekset med PORTC. PORTC er en 8-biters bred toveis port. Det tilhørende dataretningsregisteret er TRISC. Innstilling av TRISC -bit (= 1) vil ta den tilsvarende PORTC -pinnen som en inngang. Hvis du sletter en TRISC -bit (= 0), vil den tilsvarende PORTC -pinnen bli en utgang.
TRISC = 0; // Hvis du sletter denne biten, blir PORTC til utgang
Trinn 2: KONFIGURER CCP -MODUL
CCP - CAPTURE/COMPARE/PWM MODULES
Hver Capture/Compare/PWM (CCP) -modul inneholder et 16-biters register som kan fungere som:
• 16-biters registreringsregister
• 16-biters sammenligningsregister
• PWM Master/Slave Duty Cycle -register
Konfigurer CCP1CON -register til PWM -modus
Registrer beskrivelse
CCPxCON Dette registeret brukes til å konfigurere CCP -modulen for Capture/Compare/PWM -åpning.
CCPRxL Dette registeret inneholder 8-Msb bitene av PWM, nedre 2-bits vil være en del av CCPxCON-registeret.
TMR2 Fritgående teller som vil bli sammenlignet med CCPR1L og PR2 for generering av PWM -utgang.
Nå vil jeg bruke binær for å representere bitene for å konfigurere CCP1CON -registeret.
se bildet ovenfor.
CCP1CON = 0b00001111;
Du kan også hex -format
CCP1CON = 0x0F; // konfigurere CCP1CON -register for PWM -modus
Trinn 3: Konfigurere Timer2 -modul (TMR2 -register)
Timer2 er en 8-biters timer med en forhåndsskaler og en postskaler. Den kan brukes som PWM -tidsbase for PWM -modus for CCP -modulen (e). TMR2 -registeret er lesbart og skrivbart og slettes på alle enheter som tilbakestilles.
T2CON -registeret vises
Forskala og postskala justerer utgangsfrekvensen til den genererte PWM -bølgen.
Frekvens = klokkefrekvens/(4*forhåndsskaler*(PR2-TMR2)*Postskaler*antall)
Hvor Tout = 1/frekvens
T2CON = 0b00000100;
Dette vil generere 2,5 KHz @ 1Mhz eller 100KHz @ 4MHz krystall (praktisk talt er det en begrensning for denne PWM -frekvensen, se det spesifikke databladet for flere detaljer)
hex -representasjon
T2CON = 0x04; // aktiver T2CON uten forhåndskalkulator og postskala -konfigurasjon
Trinn 4: Konfigurering av PR2 (Timer2 Perioderegister)
Timer2-modulen har et 8-biters perioderegister, PR2. Timer2 øker fra 00h til den samsvarer med PR2 og tilbakestilles deretter til 00h i neste trinnsyklus. PR2 er et lesbart og skrivbart register. PR2 -registeret initialiseres til FFh ved tilbakestilling.
Hvis du angir et passende område for PR2, kan du endre driftssyklusen til den genererte PWM -bølgen
PR2 = 100; // Still inn syklustiden til 100 for å variere driftssyklusen fra 0-100
For enkelhets skyld bruker jeg PR2 = 100 ved å lage CCPR1L = 80; 80% driftssyklus kan oppnås.
Trinn 5: Konfigurer CCPR1l -modulen
Siden PR2 = 100 CCPR1l kan konfigureres hvor som helst mellom 0-100 for å få ønsket driftssyklus.
Trinn 6: Skriv skissen på deg MPLAB X IDE Koden er gitt nedenfor
#inkludere
void delay (int a) // funksjon for å generere forsinkelse {
for (int i = 0; i <a; i ++)
{
for (int j = 0; j <144; j ++);
}
}
void main ()
{TRISC = 0; // Hvis du sletter denne biten, blir PORTC til utgang.
CCP1CON = 0x0F; // konfigurere CCP1CON -register for PWM -modus
T2CON = 0x04; // aktiver T2CON uten forhåndskalkulator og postskala -konfigurasjon.
PR2 = 100; // Still inn syklustiden til 100 for å variere driftssyklusen fra 0-100
mens (1) {
CCPR1L = 75; // generert 75% forsinkelse i driftssyklus (1);
}
}
Jeg har også gjort en liten endring av koden slik at frekvensen til den genererte PWM -bølgen
Dette er koden er simulert i proteus og utdata PWM -bølgen er vist nedenfor For å laste dette opp på utviklingsbrettene for bilder, bruk #include med passende konfigurasjonsbiter.
Takk skal du ha