Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
MIKÄ ON PWM?
PWM STANDS PULSE WIDTH MODULATION on pulssin leveyttä säätelevä tekniikka.
Tämän käsitteen ymmärtämiseksi harkitse selvästi kellopulssia tai mitä tahansa neliöaaltosignaalia, jonka käyttöjakso on 50%, mikä tarkoittaa, että Ton- ja Toff -aika ovat samat. ajanjakso.
Yllä olevassa kuvassa tämän aallon käyttöjakso on 50%
Toimintasykli = (ON -aika / kokonaisaika)*100
ON -aika - aika, jonka signaali oli korkea
POIS -aika - aika, jonka signaali oli alhainen
Vaihe 1: Mikro -ohjaimen valinta
Sopivan mikro -ohjaimen valitseminen projektille tämä on olennainen osa projektia PWM -signaaleja voidaan tuottaa PWM -kanavilla varustetuissa mikro -ohjaimissa (CCP -rekisterit). voit ladata taulukon linkin alla
PIC16F877a -tietolomake napsauta tätä
CCP -moduuli vastaa PWM -signaalin tuottamisesta. CCP1 ja CCP2 multipleksoidaan PORTC: llä. PORTC on 8-bittinen kaksisuuntainen portti. Vastaava datasuuntarekisteri on TRISC. Kun asetat TRISC -bitin (= 1), tuloksi otetaan vastaava PORTC -nasta. Jos poistat TRISC -bitin (= 0), vastaava PORTC -nasta on ulostulo.
TRISC = 0; // Tämän bitin tyhjentäminen tekee PORTC: stä tuloksen
Vaihe 2: MÄÄRITÄ CCP -MODUULI
CCP - CAPTURE/COMPARE/PWM MODULES
Jokainen Capture/Compare/PWM (CCP) -moduuli sisältää 16-bittisen rekisterin, joka voi toimia seuraavasti:
• 16-bittinen sieppausrekisteri
• 16-bittinen vertailurekisteri
• PWM Master/Slave Duty Cycle -rekisteri
Määritä CCP1CON -rekisteri PWM -tilaan
Rekisterin kuvaus
CCPxCON Tätä rekisteriä käytetään CCP -moduulin määrittämiseen Capture/Compare/PWM -toiminnolle.
CCPRxL Tämä rekisteri sisältää PWM: n 8 Mb: n bitit, alemmat 2-bitit ovat osa CCPxCON-rekisteriä.
TMR2 Vapaakäyntilaskuri, jota verrataan CCPR1L: ään ja PR2: een PWM -lähdön tuottamiseksi.
Nyt käytän binaaria edustamaan bittejä CCP1CON -rekisterin määrittämiseen.
katso yllä oleva kuva.
CCP1CON = 0b00001111;
Voit myös käyttää hex -muotoa
CCP1CON = 0x0F; // CCP1CON -rekisterin määrittäminen PWM -tilaa varten
Vaihe 3: Timer2 -moduulin määrittäminen (TMR2 -rekisteri)
Ajastin2 on 8-bittinen ajastin, jossa on esiasetin ja jälkikäyttö. Sitä voidaan käyttää PWM -aikapohjana CCP -moduulin (-moduulien) PWM -moodille. TMR2 -rekisteri on luettavissa ja kirjoitettavissa, ja se tyhjennetään millä tahansa laitteella.
T2CON -rekisteri näkyy
Esiasteikko ja jälkiasteikko säätävät muodostetun PWM -aallon lähtötaajuutta.
Taajuus = kellotaajuus/(4*esiskaalain*(PR2-TMR2)*Jälkiaskelkaasu*määrä)
Missä Tout = 1/taajuus
T2CON = 0b00000100;
Tämä tuottaa 2,5 KHz @ 1Mhz tai 100KHz @ 4MHz kristallin (käytännössä tälle PWM -taajuudelle on rajoitus, katso tarkemmat tiedot)
heksadesimaatio
T2CON = 0x04; // ota T2CON käyttöön ilman esiasetinta ja jälkiasteikkoa
Vaihe 4: PR2: n määrittäminen (Timer2 -jaksorekisteri)
Timer2-moduulissa on 8-bittinen jaksorekisteri PR2. Ajastin2 kasvaa 00h: sta, kunnes se vastaa PR2: ta, ja palautuu sitten 00h: ksi seuraavan lisäysjakson aikana. PR2 on luettava ja kirjoitettava rekisteri. PR2 -rekisteri alustetaan FFh: ksi nollaushetkellä.
Kun asetat sopivan alueen PR2: lle, voit muuttaa muodostetun PWM -aallon toimintajaksoa
PR2 = 100; // Aseta sykliaika 100, jos haluat muuttaa käyttöjaksoa 0-100
Yksinkertaisuuden vuoksi käytän PR2 = 100 tekemällä CCPR1L = 80; 80% käyttöjakso voidaan saavuttaa.
Vaihe 5: Määritä CCPR1l -moduuli
Koska PR2 = 100 CCPR1l voidaan konfiguroida missä tahansa välillä 0-100 halutun käyttöjakson saavuttamiseksi.
Vaihe 6: Kirjoita luonnos sinulle MPLAB X IDE Koodi annetaan alla
#sisältää
void delay (int a) // funktio viiveen luomiseksi {
(int i = 0; i <a; i ++)
{
for (int j = 0; j <144; j ++);
}
}
void main ()
{TRISC = 0; // Tämän bitin tyhjentäminen tekee PORTC: stä tuloksen.
CCP1CON = 0x0F; // CCP1CON -rekisterin määrittäminen PWM -tilaa varten
T2CON = 0x04; // ota T2CON käyttöön ilman esiasetinta ja jälkiasteikkoa.
PR2 = 100; // Aseta työkiertoaika 100, jos haluat muuttaa käyttöjaksoa 0-100
samalla (1) {
CCPR1L = 75; // tuotti 75%: n käyttöjakson viiveen (1);
}
}
Olen myös tehnyt pieniä muutoksia koodiin niin, että generoidun PWM -aallon taajuus
Tämä koodi on simuloitu proteuksessa ja lähtö PWM -aalto näkyy alla. Lähetä tämä kuva -kehityskorteillesi käyttämällä #include sopivilla kokoonpanobiteillä.
Kiitos