Genereer PWM Wave met PIC -mikrobeheerder: 6 stappe
Genereer PWM Wave met PIC -mikrobeheerder: 6 stappe
Anonim
Genereer PWM Wave met PIC -mikrobeheerder
Genereer PWM Wave met PIC -mikrobeheerder
Genereer PWM Wave met PIC -mikrobeheerder
Genereer PWM Wave met PIC -mikrobeheerder
Genereer PWM Wave met PIC -mikrobeheerder
Genereer PWM Wave met PIC -mikrobeheerder

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

Kies mikrobeheerder
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

KONFIGUREER CCP -MODULE
KONFIGUREER CCP -MODULE
KONFIGUREER CCP -MODULE
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)

Stel Timer2 -module op (TMR2 -register)
Stel Timer2 -module op (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

Skryf die skets op u MPLAB X IDE die kode word hieronder gegee
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