To nie jedyne częstotliwości dostępne dla sygnałów PWM. Są to jednak częstotliwości określone przez zastosowany preskaler (który można łatwo zmienić, jak opisano poniżej).
Każda z 3 par styków PWM jest powiązana z jednym zegarem, z których każdy ma swoją własną częstotliwość podstawową, jak następuje:
- Piny 5 i 6 są sparowane z zegarem 0, z częstotliwością podstawową 62500 Hz
- Piny 9 i 10 są sparowane z zegarem 1, z częstotliwością podstawową 31250 Hz
- Piny 3 i 11 są sparowane z zegarem 2, z częstotliwością podstawową 31250 Hz
Następnie każdy zestaw pinów ma pewną liczbę wartości preskalera, które można wybrać, które podzielą częstotliwość podstawową tej pary pinów. Dostępne wartości preskalera to:
- Kołki 5 i 6 mają wartości preskalera 1, 8, 64, 256 i 1024
- Piny 9 i 10 mają wartości preskalera 1, 8, 64, 256 i 1024
- Piny 3 i 11 mają wartości preskalera 1, 8, 32, 64, 128, 256 i 1024
Różne kombinacje dają różne częstotliwości w danym pinie PWM. Zauważ, że zegar 2 (związany z pinami 3 i 11) ma więcej dostępnych wartości preskalera, co skutkuje większą liczbą dostępnych częstotliwości.
Dlaczego zegar 2 jest inny, to osobne pytanie.
Edycja: Oto lista możliwych częstotliwości PWM na pin (z tego artykułu ):
Dla styków 6 i 5 (OC0A i OC0B):
- Jeśli TCCR0B = xxxxx001, częstotliwość wynosi 64 kHz
- Jeżeli TCCR0B = xxxxx010, częstotliwość wynosi 8 kHz
- Jeśli TCCR0B = xxxxx011, częstotliwość wynosi 1 kHz (jest to wartość domyślna z programu ładującego Diecimila)
- Jeśli TCCR0B = xxxxx100, częstotliwość wynosi 250 Hz
- Jeśli TCCR0B = xxxxx101, częstotliwość wynosi 62,5 Hz
Dla styków 9, 10, 11 i 3 (OC1A, OC1B, OC2A, OC2B):
- Jeśli TCCRnB = xxxxx001, częstotliwość wynosi 32 kHz
- Jeżeli TCCRnB = xxxxx010, częstotliwość wynosi 4 kHz
- Jeśli TCCRnB = xxxxx011, częstotliwość wynosi 500 Hz (jest to wartość domyślna z programu ładującego Diecimila)
- Jeśli TCCRnB = xxxxx100, częstotliwość wynosi 125 Hz
- Jeżeli TCCRnB = xxxxx101, częstotliwość wynosi 31,25 Hz
TCCRnB
to miejsce, w którym ustawiasz bity preskalera dla timera n
, zastępując n
je 0, 1 lub 2, w zależności od timera, który chcesz ustawić. Jeśli nadal nie masz pewności co do operacji bitowych, przeczytaj ten samouczek matematyki bitowej .
Moje źródła:
Zauważ, że wydaje się, że w tych źródłach istnieje rozbieżność co do tego, czy piny 9 i 10 zachowują się tak samo jak 5 i 6 lub 3 i 11, ale i tak rozumiesz. Czytam dane, aby dowiedzieć się, co jest poprawne, czy też jest to różnica między tablicami.
Nie jestem świadomy rozważań projektowych, ale jeśli sprawdzisz arkusz danych mikrokontrolera w swoim Arduino, zauważysz, że piny PWM są zgrupowane razem i dla każdej grupy podłączonej do timera. Szybkość zwiększania tego czasu zależy od skonfigurowanego preskalera. Jeśli zmienisz preskaler dla określonego timera, zmienisz częstotliwość PWM dla odpowiednich styków PWM. Uważam, że niektóre timery podwajają się w innych celach, takich jak
millis();
funkcja. Jeśli zmienisz preskaler dla tego timera, wartości zwrócone przezmillis()
będą wyłączone o ten sam współczynnik.Możesz obliczyć ustawienie dla preskalera w następujący sposób:
$$ \ text {prescaler} = \ dfrac {f_ {CPU}} {PWMresolution × f_ {PWM}} = \ dfrac {16 \ text {MHz}} {256 × 490} \ ok. 128 $$
Sprawdź arkusz danych, a przekonasz się, że 128 jest rzeczywiście jedną z wartości preskalera, którą możesz wybrać.
źródło