Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
Szukam jakiś przykładów na generator częstotliwośći w arduino i nie znajduję o ile znajduję generator PWM czyli zabawy z wypełnieniem, a mi chodzi o możliwość zmiany częstotliwości w zakresie 0-300Hz na dwóch kanałach z wypełnieniem stałym. W ogóle czy arduinio ma możliwość wygenerowania na dwóch pinach inne częstotliwości?
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
11-11-2018, 12:44
(Ten post był ostatnio modyfikowany: 11-11-2018, 12:48 przez es2.)
AVR ma taką możliwość. Wystarczy przeczytać w nocie katalogowej układu dział poświęcony timerom. Fmax to F/ckl/2. Na Mega324 uzyskałem 10MHz
http://avt.4ra.pl/viewtopic.php?id=14
Jaki krok częstotliwości Cię zadowala?
Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
Taki co 5Hz już jest zadowalający dla mnie.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
Wyszło mi, że przy preskalerze 1024, krok to ok 0,01Hz. Niestety, przy 16MHz, Fmin,to ok 15Hz. Musisz więc, połączyć timery kaskadowo. Dodatkowy podział przez 32 daje Fmin ok 0,47Hz, fmax 488Hz, krok ok 0,0005.
Zamiast łączyc timery kaskadowo, można zmniejszyć taktowanie uC.. Niestety, AVR to nie ARM (nieliczne AVR mają PLL), gdzie rdzeń można taktować inną częstotliwością niż peryferia. Zresztą w ARM nie trzeb by tego robić, tam timery są 16-bit (czasem 32) ponadto, w kaskadę można je łączyć programowo.
Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
(11-11-2018, 20:04)kaczakat napisał(a): Wystarczy skorzystać z gotowych funkcji Arduino (i odpowiednio zapytać google - "arduino pwm frequency control"):
https://playground.arduino.cc/Code/PwmFrequency
Kod:
// Set pin 9's PWM frequency to 3906 Hz (31250/8 = 3906)
// Note that the base frequency for pins 3, 9, 10, and 11 is 31250 Hz
setPwmFrequency(9, 8);
// Set pin 6's PWM frequency to 62500 Hz (62500/1 = 62500)
// Note that the base frequency for pins 5 and 6 is 62500 Hz
setPwmFrequency(6, 1);
// Set pin 10's PWM frequency to 31 Hz (31250/1024 = 31)
setPwmFrequency(10, 1024);
Jak widać można ustawiać częstotliwość w zakresie częstotliwości bazowych.
Czestotliwości mają byc od 0 do 300 z krokiem min5Hz. Jak
uzyska 5Hz?