Obsah:
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
ČO JE PWM?
STANDARDY PWM NA MODULÁCIU ŠÍRKY PULZU je technika, pomocou ktorej sa mení šírka impulzu.
Aby sme pochopili tento koncept, jasne zvážte hodinový impulz alebo akýkoľvek signál štvorcovej vlny, ktorý má 50% pracovný cyklus, čo znamená, že perióda Ton a Toff je rovnaká. Celková doba trvania signálu, ktorá bola vysoká, a doby, počas ktorej bol signál nízky, sa nazýva celková. časový úsek.
Pre obrázok zobrazený vyššie má táto vlna pracovný cyklus 50%
Pracovný cyklus = (čas zapnutia / celkový čas)*100
Čas zapnutia - čas, počas ktorého bol signál vysoký
Čas vypnutia - časový nepriateľ, ktorého signál bol nízky Celkový čas - Celkový časový úsek impulzu (čas zapnutia aj vypnutia)
Krok 1: Výber mikrokontroléra
Výber vhodného mikrokontroléra pre projekt je základnou súčasťou projektu Signály PWM je možné generovať v mikrokontroléroch s kanálmi PWM (registre CCP). V prípade tohto projektu plánujem držať sa pic16f877. odkaz na technický list si môžete stiahnuť nižšie
Dátový list PIC16F877a kliknite sem
Modul CCP je zodpovedný za produkciu signálu PWM. CCP1 a CCP2 sú multiplexované s PORTC. PORTC je 8-bitový obojsmerný port. Zodpovedajúci register smeru údajov je TRISC. Nastavením bitu TRISC (= 1) sa príslušný vstup PORTC použije. Vymazaním bitu TRISC (= 0) sa príslušný pin PORTC stane výstupom.
TRISC = 0; // Vymazaním tohto bitu sa stane PORTC ako výstup
Krok 2: KONFIGURUJTE MODUL CCP
CCP - CAPTURE/COMPARE/PWM MODULES
Každý modul Capture/Compare/PWM (CCP) obsahuje 16-bitový register, ktorý môže fungovať ako:
• 16-bitový register Capture
• 16-bitový porovnávací register
• Register pracovného cyklu Master/Slave PWM
Nakonfigurujte register CCP1CON na režim PWM
Popis registra
CCPxCON Tento register sa používa na konfiguráciu modulu CCP na prevádzku Capture/Compare/PWM.
CCPRxL Tento register pojme 8-Msb bitov PWM, nižšie 2-bity budú súčasťou registra CCPxCON.
TMR2 Voľne bežiaci čítač, ktorý bude porovnávaný s CCPR1L a PR2 na generovanie výstupu PWM.
Teraz použijem binárne súbory na konfiguráciu registra CCP1CON.
pozri obrázok vyššie.
CCP1CON = 0b00001111;
Môžete tiež použiť hexadecimálny formát
CCP1CON = 0x0F; // konfigurácia registra CCP1CON pre režim PWM
Krok 3: Konfigurácia modulu Timer2 (register TMR2)
Timer2 je 8-bitový časovač s predzváračom a postcalerom. Môže byť použitý ako časová základňa PWM pre režim PWM modulov CCP. Register TMR2 je čitateľný a zapisovateľný a je vymazaný pri každom resete zariadenia.
Zobrazí sa register T2CON
Prescale a postcale upraví výstupnú frekvenciu generovanej vlny PWM.
Frekvencia = taktovacia frekvencia/(4*predzvárač*(PR2-TMR2)*postscaler*počet)
Kde Tout = 1/frekvencia
T2CON = 0b00000100;
Výsledkom bude generovanie kryštálu 2,5 KHz @ 1 Mhz alebo 100 KHz @ 4 MHz (prakticky existuje obmedzenie pre túto frekvenciu PWM, ďalšie podrobnosti nájdete v konkrétnom technickom liste)
hexadecimálna reprezentácia
T2CON = 0x04; // povoľte T2CON bez konfigurácie Prescaler a PostScale
Krok 4: Konfigurácia PR2 (časový register Timer2)
Modul Timer2 má 8-bitový periodický register PR2. Časovač 2 sa zvyšuje od 00 h, kým sa nezhoduje s PR2, a potom sa resetuje na 00 h v nasledujúcom prírastkovom cykle. PR2 je čitateľný a zapisovateľný register. Register PR2 sa po resetovaní inicializuje na FFh.
Nastavenie vhodného rozsahu pre PR2 umožní použitie na zmenu pracovného cyklu generovanej vlny PWM
PR2 = 100; // Nastavte čas cyklu na 100 pre zmenu pracovného cyklu od 0 do 100
Pre jednoduchosť používam PR2 = 100 vytvorením CCPR1L = 80; Je možné dosiahnuť 80% pracovný cyklus.
Krok 5: Konfigurujte modul CCPR1l
Pretože PR2 = 100 CCPR1l je možné nakonfigurovať kdekoľvek od 0 do 100, aby sa dosiahol požadovaný pracovný cyklus.
Krok 6: Napíšte náčrt na seba MPLAB X IDE Kód je uvedený nižšie
#zahrnúť
void delay (int a) // funkcia na generovanie oneskorenia {
pre (int i = 0; i <a; i ++)
{
pre (int j = 0; j <144; j ++);
}
}
neplatné hlavné ()
{TRISC = 0; // Vymazaním tohto bitu sa stane PORTC ako výstup.
CCP1CON = 0x0F; // konfigurácia registra CCP1CON pre režim PWM
T2CON = 0x04; // povoľte T2CON bez konfigurácie Prescaler a PostScale.
PR2 = 100; // Nastavte čas cyklu na 100 pre zmenu pracovného cyklu od 0 do 100
pričom (1) {
CCPR1L = 75; // generované 75% oneskorenie pracovného cyklu (1);
}
}
Tiež som vykonal malú úpravu kódu, aby frekvencia generovanej vlny PWM
Toto je kód simulovaný v proteuse a výstupná vlna PWM je zobrazená nižšie. Ak to chcete nahrať na svoje vývojové dosky pre obrázky, použite #include s vhodnými konfiguračnými bitmi.
Ďakujem