INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
WAT IS PWM?
PWM STANDS VIR PULSBREIDTE MODULASIE is 'n tegniek waarmee die breedte van die pols gewissel kan word.
Om hierdie konsep te verstaan, moet u 'n klokpuls of 'n vierkantgolfsein duidelik verstaan: dit het 'n 50% -siklus, wat beteken dat die tydsduur Ton en Toff dieselfde is. tydsperiode.
Vir die afbeelding hierbo, het hierdie golf 'n werksiklus van 50%
Dienssiklus = (AAN -tyd / totale tyd)*100
AAN tyd - tyd waarvoor die sein hoog was
UIT -tyd - tyd vyand wat laag was Totale tyd - Totale tydsperiode van die pols (beide AAN en UIT)
Stap 1: Kies mikrobeheerder
Deur die geskikte mikrobeheerder vir die projek te kies, is dit die belangrikste deel van die projek. PWM -seine kan gegenereer word in mikrobeheerders met PWM -kanale (CCP -registers). Vir hierdie projek is ek van plan om by pic16f877 te bly. U kan die databladskakel hieronder aflaai
PIC16F877a -gegewensblad, klik hier
CCP -module is verantwoordelik vir die vervaardiging van PWM -sein. CCP1 en CCP2 word met PORTC gemultiplexeer. PORTC is 'n 8-bis wye tweerigting-poort. Die ooreenstemmende datarigtingregister is TRISC. As u TRISC -bit (= 1) instel, neem u die ooreenstemmende PORTC -pen as 'n invoer. Deur 'n TRISC -bit (= 0) skoon te maak, sal die ooreenstemmende PORTC -pen 'n uitset word.
TRISC = 0; // Deur hierdie bietjie uit te vee, sal PORTC as uitset gemaak word
Stap 2: KONFIGUREER CCP -MODULE
CCP - CAPTURE/COMPARE/PWM MODULES
Elke Capture/Compare/PWM (CCP) -module bevat 'n 16-bis-register wat kan funksioneer as:
• 16-bis Opneemregister
• 16-bis Vergelyk register
• PWM Master/Slave Duty Cycle -register
Stel die CCP1CON -register op in die PWM -modus
Register Beskrywing
CCPxCON Hierdie register word gebruik om die CCP -module op te stel vir opname/vergelyking/PWM -werking.
CCPRxL Hierdie register bevat die 8-Msb bisse PWM, onderste 2-bisse sal deel uitmaak van CCPxCON-register.
TMR2 Free running counter wat vergelyk sal word met CCPR1L en PR2 vir die opwekking van die PWM -uitset.
Nou sal ek binêre gebruik om die stukkies voor te stel om die CCP1CON -register op te stel.
verwys na die prent hierbo.
CCP1CON = 0b00001111;
U kan ook u hex -formaat
CCP1CON = 0x0F; // die opstel van CCP1CON -register vir die PWM -modus
Stap 3: Konfigurering van Timer2 -module (TMR2 -register)
Timer2 is 'n 8-bis timer met 'n voorskaler en 'n posskaler. Dit kan gebruik word as die PWM -tydsbasis vir die PWM -modus van die CCP -module (s). Die TMR2 -register is leesbaar en skryfbaar en word op enige toestel herstel.
T2CON -register word getoon
Die voor- en na -skaal pas die uitsetfrekwensie van die gegenereerde PWM -golf aan.
Frekwensie = klokfrekwensie/(4*prescaler*(PR2-TMR2)*Postscaler*telling)
Waar Tout = 1/frekwensie
T2CON = 0b00000100;
Dit sal 2,5 KHz @ 1Mhz of 100KHz @ 4MHz kristal genereer (prakties is daar 'n beperking vir hierdie PWM -frekwensie, verwys na die spesifieke datablad vir meer besonderhede)
heks voorstelling
T2CON = 0x04; // aktiveer T2CON sonder voorafverpakking en na -opstelling
Stap 4: Configuring PR2 (Timer2 Period Register)
Die Timer2-module het 'n 8-bis periodeperiode, PR2. Timer2 neem toe van 00h tot dit by PR2 pas en herstel dan na 00h in die volgende toenemingsiklus. PR2 is 'n leesbare en skryfbare register. Die PR2 -register word by Reset geïnisialiseer na FFh.
Deur 'n geskikte reeks vir PR2 in te stel, kan u die dienssiklus van die gegenereerde PWM -golf verander
PR2 = 100; // Stel die siklustyd in op 100 om die werksiklus van 0-100 te wissel
Vir die eenvoud gebruik ek PR2 = 100 deur CCPR1L = 80 te maak; 80% dienssiklus kan bereik word.
Stap 5: Stel CCPR1l -module op
Aangesien PR2 = 100 CCPR1l oral tussen 0-100 gekonfigureer kan word om die gewenste dienssiklus te kry.
Stap 6: Skryf die skets op u MPLAB X IDE die kode word hieronder gegee
#insluit
leegte vertraging (int a) // funksie om vertraging te genereer {
vir (int i = 0; i <a; i ++)
{
vir (int j = 0; j <144; j ++);
}
}
leegte hoof ()
{TRISC = 0; // Deur hierdie bietjie uit te vee, sal PORTC as uitset gemaak word.
CCP1CON = 0x0F; // die opstel van CCP1CON -register vir die PWM -modus
T2CON = 0x04; // aktiveer T2CON sonder voorafverpakking en na -opstelling.
PR2 = 100; // Stel die siklustyd in op 100 om die werksiklus van 0-100 te wissel
terwyl (1) {
CCPR1L = 75; // gegenereer 75% diens siklus vertraging (1);
}
}
Ek het die kode ook 'n bietjie gewysig sodat die frekwensie van die gegenereerde PWM -golf
Hierdie kode word in proteus gesimuleer en die uitvoer PWM -golf word hieronder getoon Om dit op u ontwikkelingsborde op te laai, gebruik #include met geskikte konfigurasie -stukkies.
Dankie