Wygeneruj falę PWM za pomocą mikrokontrolera PIC: 6 kroków
Wygeneruj falę PWM za pomocą mikrokontrolera PIC: 6 kroków
Anonim
Generuj falę PWM za pomocą mikrokontrolera PIC
Generuj falę PWM za pomocą mikrokontrolera PIC
Generuj falę PWM za pomocą mikrokontrolera PIC
Generuj falę PWM za pomocą mikrokontrolera PIC
Generuj falę PWM za pomocą mikrokontrolera PIC
Generuj falę PWM za pomocą mikrokontrolera PIC

CO TO JEST PWM?

STANOWISKO PWM DO MODULACJI SZEROKOŚCI IMPULSU to technika, dzięki której zmienia się szerokość impulsu.

Aby zrozumieć tę koncepcję, należy wyraźnie rozważyć impuls zegarowy lub dowolny sygnał fali prostokątnej, który ma 50% współczynnik wypełnienia, co oznacza, że okres Ton i Toff jest taki sam. okres czasu.

Dla obrazu pokazanego powyżej ta fala ma współczynnik wypełnienia 50%

Cykl pracy = (czas włączenia / czas całkowity)*100

ON time - czas, przez który sygnał był wysoki

Czas wyłączenia - czas, w którym sygnał był niski. Całkowity czas - Całkowity czas trwania impulsu (zarówno czas załączenia, jak i wyłączenia)

Krok 1: Wybór mikrokontrolera

Wybór mikrokontrolera
Wybór mikrokontrolera

Dobór odpowiedniego mikrokontrolera do projektu to istotna część projektu Sygnały PWM mogą być generowane w mikrokontrolerach z kanałami PWM (rejestry CCP). Do tego projektu zamierzam trzymać się pic16f877. możesz pobrać link do arkusza danych podany poniżej

Arkusz danych PIC16F877a kliknij tutaj

Moduł CCP jest odpowiedzialny za wytwarzanie sygnału PWM. CCP1 i CCP2 są multipleksowane z PORTC. PORTC to dwukierunkowy port o szerokości 8 bitów. Odpowiednim rejestrem kierunku danych jest TRISC. Ustawienie bitu TRISC (=1) spowoduje przyjęcie odpowiedniego pinu PORTC jako wejścia. Wyczyszczenie bitu TRISC (=0) spowoduje, że odpowiedni pin PORTC stanie się wyjściem.

TRISC = 0; //Wyczyszczenie tego bitu spowoduje, że PORTC stanie się wyjściem

Krok 2: SKONFIGURUJ MODUŁ CCP

KONFIGURUJ MODUŁ CCP
KONFIGURUJ MODUŁ CCP
KONFIGURUJ MODUŁ CCP
KONFIGURUJ MODUŁ CCP

CCP - PRZECHWYTY / PORÓWNAJ / MODUŁY PWM

Każdy moduł Capture/Compare/PWM (CCP) zawiera 16-bitowy rejestr, który może działać jako:

• 16-bitowy rejestr przechwytywania

• 16-bitowy rejestr porównawczy

• Rejestr cyklu pracy PWM Master/Slave

Skonfiguruj rejestr CCP1CON w trybie PWM

Rejestr Opis

CCPxCON Rejestr ten służy do konfiguracji modułu CCP do obsługi przechwytywania/porównania/PWM.

CCPRxL Rejestr ten przechowuje 8-Msb bitów PWM, niższe 2 bity będą częścią rejestru CCPxCON.

TMR2 Licznik swobodnego biegu, który będzie porównywany z CCPR1L i PR2 w celu wygenerowania wyjścia PWM.

Teraz użyję binarnych do reprezentowania bitów do konfiguracji rejestru CCP1CON.

patrz obrazek powyżej.

CCP1CON = 0b00001111;

Możesz także formatować szesnastkowo

CCP1CON = 0x0F; //konfiguracja rejestru CCP1CON dla trybu PWM

Krok 3: Konfiguracja modułu Timer2 (rejestr TMR2)

Konfiguracja modułu Timer2 (rejestr TMR2)
Konfiguracja modułu Timer2 (rejestr TMR2)

Timer2 to 8-bitowy timer z preskalerem i postskalerem. Może być używany jako podstawa czasu PWM dla trybu PWM modułu(ów) CCP. Rejestr TMR2 jest odczytywalny i zapisywalny i jest usuwany na każdym urządzeniu Reset.

Wyświetlany jest rejestr T2CON

Prescale i postscale dostosują częstotliwość wyjściową generowanej fali PWM.

Częstotliwość = częstotliwość taktowania/(4*preskaler*(PR2-TMR2)*postskaler*liczba)

Gdzie Tout = 1/częstotliwość

T2CON = 0b00000100;

Spowoduje to wygenerowanie kryształu 2,5 KHz przy 1 MHz lub 100 KHz przy 4 MHz (praktycznie istnieje ograniczenie dla tej częstotliwości PWM, aby uzyskać więcej informacji, patrz konkretny arkusz danych)

reprezentacja szesnastkowa

T2CON = 0x04; // włącz T2CON bez konfiguracji preskalera i postskalowania

Krok 4: Konfiguracja PR2 (rejestr okresów Timer2)

Moduł Timer2 posiada 8-bitowy rejestr okresowy PR2. Timer2 narasta od 00h do momentu dopasowania PR2, a następnie resetuje się do 00h w następnym cyklu przyrostowym. PR2 to rejestr czytelny i zapisywalny. Rejestr PR2 jest inicjowany do FFh po zresetowaniu.

Ustawienie odpowiedniego zakresu dla PR2 pozwoli na zmianę współczynnika wypełnienia generowanej fali PWM

PR2 = 100; // Ustaw czas cyklu na 100, aby zmienić cykl pracy od 0-100

Dla uproszczenia używam PR2=100, tworząc CCPR1L = 80; Można osiągnąć 80% cyklu pracy.

Krok 5: Skonfiguruj moduł CCPR1l

Ponieważ PR2 = 100 CCPR1l można skonfigurować w dowolnym miejscu w zakresie od 0 do 100, aby uzyskać żądany cykl pracy.

Krok 6: Napisz szkic na sobie MPLAB X IDE kod jest podany poniżej

Napisz szkic o sobie MPLAB X IDE kod jest podany poniżej
Napisz szkic o sobie MPLAB X IDE kod jest podany poniżej

#włączać

void delay(int a) //funkcja generowania opóźnienia{

for(int i=0; i<a;i++)

{

for(int j=0;j<144;j++);

}

}

nieważne główne ()

{ TRISC = 0; //Wyczyszczenie tego bitu spowoduje, że PORTC stanie się wyjściem.

CCP1CON = 0x0F; //konfiguracja rejestru CCP1CON dla trybu PWM

T2CON = 0x04; // włącz T2CON bez konfiguracji preskalera i postskalowania.

PR2 = 100; // Ustaw czas cyklu na 100, aby zmienić cykl pracy od 0-100

póki(1){

CCPR1L = 75; //generowane 75% opóźnienia cyklu pracy(1);

}

}

Zrobiłem też małą modyfikację w kodzie, aby częstotliwość generowanej fali PWM

Ten kod jest symulowany w proteusie, a wyjściowa fala PWM jest pokazana poniżej. Aby przesłać to na swoje tablice rozwojowe do zdjęć, użyj #include z odpowiednimi bitami konfiguracyjnymi.

Dziękuję Ci