Turinys:

Sukurkite PWM bangą naudodami PIC mikrovaldiklį: 6 žingsniai
Sukurkite PWM bangą naudodami PIC mikrovaldiklį: 6 žingsniai

Video: Sukurkite PWM bangą naudodami PIC mikrovaldiklį: 6 žingsniai

Video: Sukurkite PWM bangą naudodami PIC mikrovaldiklį: 6 žingsniai
Video: Learn Arduino in 30 Minutes: Examples and projects 2024, Lapkritis
Anonim
Sukurkite PWM bangą naudodami PIC mikrovaldiklį
Sukurkite PWM bangą naudodami PIC mikrovaldiklį
Sukurkite PWM bangą naudodami PIC mikrovaldiklį
Sukurkite PWM bangą naudodami PIC mikrovaldiklį
Sukurkite PWM bangą naudodami PIC mikrovaldiklį
Sukurkite PWM bangą naudodami PIC mikrovaldiklį
Sukurkite PWM bangą naudodami PIC mikrovaldiklį
Sukurkite PWM bangą naudodami PIC mikrovaldiklį

KAS YRA PWM?

PWM STANDS PULS WIDTH MODULATION - tai metodas, kuriuo keičiamas pulso plotis.

Norėdami aiškiai suprasti šią sąvoką, pagalvokite apie laikrodžio impulsą arba bet kokį kvadratinių bangų signalą, kurio veikimo ciklas yra 50%, o tai reiškia, kad Tono ir Tofo laikotarpis yra vienodas. laiko tarpas.

Aukščiau pateiktame paveikslėlyje šios bangos veikimo ciklas yra 50%

Darbo ciklas = (įjungimo laikas / visas laikas)*100

ĮJUNGIMO laikas - laikas, kurio signalas buvo didelis

Išjungimo laikas - laikas priešui, kurio signalas buvo žemas

1 žingsnis: mikrovaldiklio pasirinkimas

Mikrovaldiklio pasirinkimas
Mikrovaldiklio pasirinkimas

Pasirinkus projektui tinkamą mikrovaldiklį, tai yra esminė projekto dalis. PWM signalai gali būti generuojami mikrovaldikliuose su PWM kanalais (CCP registrai). Šiam projektui planuoju laikytis pic16f877. Duomenų lapo nuorodą galite atsisiųsti žemiau

PIC16F877a duomenų lapas spustelėkite čia

CCP modulis yra atsakingas už PWM signalo sukūrimą. CCP1 ir CCP2 yra multipleksuojami naudojant PORTC. PORTC yra 8 bitų pločio dvikryptis prievadas. Atitinkamas duomenų krypčių registras yra TRISC. Nustačius TRISC bitą (= 1), bus įvestas atitinkamas PORTC kaištis. Išvalius TRISC bitą (= 0), atitinkamas PORTC kaištis bus išvestis.

TRISC = 0; // Išvalius šį bitą, PORTC bus išvestis

2 veiksmas: sukonfigūruokite CCP modulį

KONFIGURUOTI CCP MODULĮ
KONFIGURUOTI CCP MODULĮ
KONFIGURUOTI CCP MODULĮ
KONFIGURUOTI CCP MODULĮ

CCP - CAPTURE/COMPARE/PWM MODULES

Kiekviename „Capture/Compare“/PWM (CCP) modulyje yra 16 bitų registras, kuris gali veikti kaip:

• 16 bitų fiksavimo registras

• 16 bitų palyginimo registras

• PWM Master/Slave Duty Cycle registras

Konfigūruokite CCP1CON registrą PWM režimu

Registro aprašymas

CCPxCON Šis registras naudojamas sukonfigūruoti CCP modulį Capture/Compare/PWM opertaion.

CCPRxL Šiame registre yra 8 Msb PWM bitai, mažesni 2 bitai bus CCPxCON registro dalis.

TMR2 laisvai veikiantis skaitiklis, kuris bus lyginamas su CCPR1L ir PR2, kad būtų sukurtas PWM išėjimas.

Dabar aš naudosiu dvejetainį, kad pavaizduotų bitus, kad sukonfigūruotų CCP1CON registrą.

žiūrėkite paveikslėlį aukščiau.

CCP1CON = 0b00001111;

Taip pat galite naudoti šešiakampį formatą

CCP1CON = 0x0F; // CCP1CON registro konfigūravimas PWM režimui

3 veiksmas: „Timer2“modulio konfigūravimas (TMR2 registras)

„Timer2“modulio konfigūravimas (TMR2 registras)
„Timer2“modulio konfigūravimas (TMR2 registras)

„Timer2“yra 8 bitų laikmatis su prescaler ir postcaler. Jis gali būti naudojamas kaip PWM laiko bazė CCP modulio (-ų) PWM režimui. TMR2 registras yra skaitomas ir įrašomas, jis pašalinamas bet kuriame įrenginyje.

Rodomas T2CON registras

Išankstinė ir papildoma skalė sureguliuos sukurtos PWM bangos išėjimo dažnį.

Dažnis = laikrodžio dažnis/(4*prescaler*(PR2-TMR2)*Postscaler*skaičius)

Kur Tout = 1/dažnis

T2CON = 0b00000100;

Tai sugeneruos 2,5 KHz @ 1Mhz arba 100KHz @ 4MHz kristalus (praktiškai šiam PWM dažniui yra apribojimų, daugiau informacijos rasite konkrečiame duomenų lape)

šešiakampis vaizdavimas

T2CON = 0x04; // įgalinti T2CON be išankstinio keitiklio ir papildomos skalės konfigūracijos

4 veiksmas: PR2 konfigūravimas (Timer2 periodo registras)

„Timer2“modulis turi 8 bitų laikotarpio registrą PR2. Laikmatis2 didėja nuo 00 val., Kol jis atitinka PR2, o tada kito padidinimo ciklo metu nustatomas į 00 val. PR2 yra skaitomas ir rašomas registras. Iš naujo nustatant PR2 registras inicijuojamas į FFh.

Nustačius tinkamą PR2 diapazoną, bus galima pakeisti sukurtos PWM bangos veikimo ciklą

PR2 = 100; // Nustatykite ciklo laiką iki 100, jei norite pakeisti darbo ciklą nuo 0 iki 100

Paprastumo dėlei naudoju PR2 = 100, darydamas CCPR1L = 80; Galima pasiekti 80% darbo ciklą.

5 veiksmas: sukonfigūruokite CCPR1l modulį

Kadangi PR2 = 100 CCPR1l gali būti sukonfigūruotas bet kur nuo 0 iki 100, kad būtų pasiektas norimas darbo ciklas.

6 veiksmas: parašykite eskizą ant jūsų MPLAB X IDE kodas pateiktas žemiau

Parašykite eskizą ant savęs MPLAB X IDE Kodas pateikiamas žemiau
Parašykite eskizą ant savęs MPLAB X IDE Kodas pateikiamas žemiau

#įtraukti

void delay (int a) // uždelsimo generavimo funkcija {

už (int i = 0; i <a; i ++)

{

už (int j = 0; j <144; j ++);

}

}

void main ()

{TRISC = 0; // Išvalius šį bitą, PORTC bus išvestis.

CCP1CON = 0x0F; // CCP1CON registro konfigūravimas PWM režimui

T2CON = 0x04; // įgalinti T2CON be išankstinio keitiklio ir papildomos skalės konfigūracijos.

PR2 = 100; // Nustatykite ciklo laiką iki 100, jei norite pakeisti darbo ciklą nuo 0 iki 100

nors (1) {

CCPR1L = 75; // sugeneruotas 75% darbo ciklo uždelsimas (1);

}

}

Aš taip pat šiek tiek pakeičiau kodą, kad sukurtos PWM bangos dažnis

Šis kodas yra imituojamas „proteus“, o išvesties PWM banga rodoma žemiau. Norėdami tai įkelti į savo nuotraukų kūrimo lentas, naudokite #include su tinkamais konfigūracijos bitais.

Ačiū

Rekomenduojamas: