[PRZYKŁADY] Nowe peryferia w mikrokontrolerach Microchipa, czyli jak ponownie polubić 8-bitowce [2]

Jak temu zapobiec? Nieoczekiwanie i wbrew intuicji poprzez zmniejszenie częstotliwości taktowania na przykład z 16 MHz do 1MHz. Wykres zależności rozdzielczości od współczynnika wypełnienia został pokazany na rysunku 18. Można też zwiększyć rozdzielczość przez zanegowanie sygnału PWM, kiedy osiągnie wypełnienie 50% – rysunek 19

 

 

Rys. 18. zależność rozdzielczości bitowej od współczynnika wypełnienia dla Fpwm=3kHz i Fosc=1MHz

 

 

Rys. 19. Zwiększenie rozdzielczości bitowej przez negowanie sygnału PWM

 

Jeszcze ciekawiej się robi, kiedy zwiększy się częstotliwość sygnału PWM. Na rysunku 20 pokazano zależność rozdzielczości od współczynnika wypełnienia dla częstotliwości PWM równej 500kHz i częstotliwości taktowania równej 16MHz. W tym przypadku rozdzielczość w całym zakresie zmienia się do 15 bitów do 17 bitów, czyli jest bardzo wysoka. 

 

 

Rys. 20. Zależność rozdzielczości bitowej od współczynnika wypełnienia dla Fpwm=500kHz i Fosc=16MHz

 

Praktyczną implementację modułu PWM zaczniemy od skonfigurowania źródła sygnału Timing Source z rysunku 16. Timing Source jest sygnałem, który wyznacza częstotliwość okres sygnału PWM, tak jak to zostało pokazane na rysunku 15 (Period Generator). Źródła tego sygnału mogą być różne, a ja do testów wybrałem moduł PWM2. Przy pomocy MPLAB Code Configurator z okna zasobów Service Resources wybieramy i konfigurujemy PWM2 tak by jego częstotliwość była równa na przykład 10kHz i wypełnienie wynosiło 1%.

 

 

Rys. 21. Konfiguracja TMR2

 

Częstotliwość pracy modułu PWM określa wartość wpisana do rejestru PR2 licznika TMR2. Dlatego przy wyborze PWM2 Code Configurator automatycznie dołącza konfigurację licznika TMR2. Licznik jest taktowany częstotliwością 16MHz/4 =4MHz. Żeby uzyskać 10kHz trzeba ta częstotliwość podzielić przez 4, a potem przez 100 – rysunek 21.

 

 

Rys. 22. Konfiguracja modułu PWM2

 

Potem konfigurujemy przebieg PWM o częstotliwości 10kHz i wypełnieniu 1% – rysunek 22. Funkcje konfiguracyjnie wygenerowane przez MPLAB Code Configurator zostały pokazane na listingach 5 i 6.

 

List. 5. Konfiguracja timera TMR2

List. 6. Konfiguracja PWM2

Zgodnie z tym co wcześniej napisaliśmy, czas trwania duty cycle jest określony przez okres sygnału z generatora NCO. Dla PWM o częstotliwości 10kHz i współczynnika wypełnienia 50% częstotliwość pracy NCO będzie równa 20kHz. Jeżeli popatrzymy na przykład na rysunek 17, to widać, że dla małych wypełnień częstotliwość NCO musi być dużo większa od częstotliwości 10kHz (dlatego tam rozdzielczość jest największa), a dla wypełnienia dążącego do 100% będzie się zbliżać do wartości 10kHz. Jeżeli przyjmiemy współczynnika wypełnienia 50%, to dla 10KHz Tpwm= 100us, a Tdc=50us. Czyli częstotliwość pracy NCO musi wynieść 20kHz i taką częstotliwość ustawimy. Oprócz częstotliwości pracy zgodnie z tym co zostało powiedziane wcześniej NCO musi być ustawione w tryb pracy PF, a sygnał wyjściowy musi być zanegowany. Konfiguracja modułu została pokazana na rysunku 23, a funkcja konfiguracyjna wygenerowana przez MPLAB Code Configurator na listingu 7.

 

 

Rys. 23. Konfiguracja NCO

 

List. 7. konfiguracja NCO

Skonfigurowane moduły PWM i NCO trzeba teraz połączyć między sobą według schematu z rysunku 16. D tego celu wykorzystamy moduł makroceli CLC (Configuration Logic Cell), który szczegółowo przedstawimy w kolejnym odcinku kursu.

O autorze