Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
CO JE PWM?
STANDARDY PWM PRO MODULACI ŠÍŘKY PULZU je technika, pomocí které se mění šířka pulzu.
Abychom porozuměli tomuto konceptu, jasně zvažte hodinový impuls nebo jakýkoli signál čtvercové vlny, který má 50% pracovní cyklus, což znamená, že doba Ton a Toff je stejná. Celková doba, po kterou byl signál vysoký, a doba, po kterou byl signál nízký, se nazývá celkový časový úsek.
Pro výše uvedený obrázek má tato vlna pracovní cyklus 50%
Pracovní cyklus = (čas zapnutí / celkový čas)*100
ON time - čas, po který byl signál vysoký
VYPNUTÝ čas - časový nepřítel, jehož signál byl nízký Celkový čas - Celkový časový úsek pulzu (čas ZAP i VYP)
Krok 1: Výběr mikrokontroléru
Výběr vhodného mikrokontroléru pro projekt je základní součástí projektu Signály PWM lze generovat v mikrokontrolérech s kanály PWM (registry CCP). Pro tento projekt plánuji zůstat u pic16f877. níže si můžete stáhnout odkaz na datový list
Datový list PIC16F877a klikněte zde
Modul CCP je zodpovědný za produkci signálu PWM. CCP1 a CCP2 jsou multiplexovány s PORTC. PORTC je 8bitový široký obousměrný port. Odpovídající registr směru dat je TRISC. Nastavení TRISC bitu (= 1) způsobí, že se jako vstup použije odpovídající pin PORTC. Vymazáním bitu TRISC (= 0) se příslušný pin PORTC stane výstupem.
TRISC = 0; // Vymazáním tohoto bitu se jako výstup vytvoří PORTC
Krok 2: KONFIGURACE CCP MODULU
CCP - CAPTURE/COMPARE/PWM MODULES
Každý modul Capture/Compare/PWM (CCP) obsahuje 16bitový registr, který může fungovat jako:
• 16bitový registr zachycení
• 16bitový srovnávací registr
• Registr pracovního cyklu PWM Master/Slave
Konfigurujte registr CCP1CON do režimu PWM
Popis registru
CCPxCON Tento registr se používá ke konfiguraci modulu CCP pro provoz Capture/Compare/PWM.
CCPRxL Tento registr uchovává 8-Msb bitů PWM, nižší 2bitové budou součástí registru CCPxCON.
TMR2 Volně běžící čítač, který bude porovnáván s CCPR1L a PR2 pro generování výstupu PWM.
Nyní použiji binární reprezentaci bitů ke konfiguraci registru CCP1CON.
viz obrázek výše.
CCP1CON = 0b00001111;
Můžete také použít hexadecimální formát
CCP1CON = 0x0F; // konfigurace registru CCP1CON pro režim PWM
Krok 3: Konfigurace modulu Timer2 (registr TMR2)
Timer2 je 8bitový časovač s předřazeným a postcalujícím. Lze jej použít jako časovou základnu PWM pro režim PWM modulů CCP. Registr TMR2 je čitelný a zapisovatelný a je vymazán při každém resetu zařízení.
Zobrazí se registr T2CON
Předškála a měřítko upraví výstupní frekvenci generované vlny PWM.
Frequency = taktovací frekvence/(4*předzměňovač*(PR2-TMR2)*postscaler*počet)
Kde Tout = 1/frekvence
T2CON = 0b00000100;
Tím se vygeneruje krystal 2,5 KHz @ 1Mhz nebo 100KHz @ 4MHz (prakticky existuje omezení pro tuto frekvenci PWM, další podrobnosti viz konkrétní list)
hexadecimální zobrazení
T2CON = 0x04; // povolit T2CON bez konfigurace Prescaler a PostScale
Krok 4: Konfigurace PR2 (časový registr Timer2)
Modul Timer2 má 8bitový periodický registr PR2. Časovač 2 se zvyšuje od 00 h, dokud se neshoduje s PR2, a poté se resetuje na 00 h v dalším přírůstkovém cyklu. PR2 je čitelný a zapisovatelný registr. Po resetu je registr PR2 inicializován na FFh.
Nastavení vhodného rozsahu pro PR2 umožní použití ke změně pracovního cyklu generované vlny PWM
PR2 = 100; // Nastavením doby cyklu na 100 se mění pracovní cyklus od 0 do 100
Pro jednoduchost používám PR2 = 100 vytvořením CCPR1L = 80; Lze dosáhnout 80% pracovního cyklu.
Krok 5: Konfigurace modulu CCPR1l
Protože PR2 = 100, lze CCPR1l konfigurovat kdekoli mezi 0-100 a získat požadovaný pracovní cyklus.
Krok 6: Napište na sebe skicu MPLAB X IDE, kód je uveden níže
#zahrnout
void delay (int a) // funkce pro generování zpoždění {
pro (int i = 0; i <a; i ++)
{
pro (int j = 0; j <144; j ++);
}
}
neplatný hlavní ()
{TRISC = 0; // Vymazáním tohoto bitu se jako výstup vytvoří PORTC.
CCP1CON = 0x0F; // konfigurace registru CCP1CON pro režim PWM
T2CON = 0x04; // povolit T2CON bez konfigurace Prescaler a PostScale.
PR2 = 100; // Nastavením doby cyklu na 100 se mění pracovní cyklus od 0 do 100
zatímco (1) {
CCPR1L = 75; // generováno 75% zpoždění pracovního cyklu (1);
}
}
Také jsem provedl malou úpravu kódu, aby frekvence generované vlny PWM
Toto je kód simulovaný v proteusu a výstupní PWM vlna je zobrazena níže. Chcete -li to nahrát na své vývojové desky pro obrázky, použijte #include s vhodnými konfiguračními bity.
Děkuji