Používám Arduino Nano jako PWM ovladač pro topné těleso.
V současné době používám D11 (PB3). Mohl bych se změnit, i když se používají všechny piny s PWM, a vyžadoval by přepis a opětovné připojení.
Tím se vytvoří signál při ~ 490 Hz, ale chtěl bych experimentovat se změnou na vyšší frekvenci.
Shrnul jsem, že je možné měnit frekvenci změnou dělitele z výchozí 64.
Můj náčrt používá Používá http://playground.arduino.cc/Main/SevenSegmentLibrary a volá millis () – bude mít změna dělitele PWM dopad na některou z nich?
POZNÁMKA Četl jsem dokumentaci setPwmFrequency
, ale najít „narušuje normální provoz“ neužitečné – vlastně jsem po nějakém vysvětlení konkrétního efektu. Používám pouze millis()
k časovému stisknutí tlačítka a blikání LED, které nejsou časově kritické
Mějte prosím na paměti, že změna frekvence PWM změní Atmega časovače a narušuje normální provoz mnoha funkcí, které se spoléhají na čas (delay (), millis (), servo knihovna).
Dělám nějaké další studie. http://playground.arduino.cc/Code/PwmFrequency stavy Změny na pinech 3, 5, 6 nebo 11 mohou způsobit delay () a millis ( ) funkce přestat fungovat.
Jiné reference říkají 3, 11 použijte timer 2
takže do ovlivňují millis()
nebo ne , jak tvrdí ostatní odkazy timer 0
. / p>
Komentáře
- Ano a ne, v závislosti na použitém časovači pwm.
Odpověď
Nevím, odkud tato dezinformace pochází … Odpověď je no , změna konfigurace časovače 2 ne ovlivnit millis()
ani delay()
, protože tyto funkce se spoléhají na časovač 0. AFAIK jádro Arduina časovač 2 vůbec nepoužívá. Mějte však na paměti, že mohou existovat i jiné knihovny Arduina nebo třetích stran, které spoléhají na časovač 2.
Zde můžete vidět zdrojový kód millis()
a delay()
.
Jak správně uvádí MITU RAJ ve své odpovědi, signál PWM na kolíku 11 poskytuje Časovač 2, abyste jej mohli bezpečně používat.
Komentáře
- Dezinformace pocházejí z hřiště .arduino.cc / Code / PwmFrequency . Jsem si jist, že nejsem jediným uživatelem, který byl uveden v omyl. Druhá odpověď právě zveřejnila výpis zavádějící dokumentace.
Odpověď
Odpověď je NO změna děliče PWM pro pin 11 neovlivní funkci millis()
(ani delay()
).
Vysvětlení:
Arduino Nano používá mikrokontrolér ATMega328P, stejně jako Arduino Uno .
PWM pinu 11 je řízen časovačem 2. Ve výchozím nastavení má časovač 2 předvolbu 64 (tj. nastavení 0x04). Základní frekvence časovače 2 je 31372,55 Hz, což vede k frekvenci 490,2 Hz (tj. 31372.55 / 64 = 490.1961).
Na druhou stranu mikrosekundový časovač (tj. Ten, který používá millis()
, micros()
, delay()
a delayMicroseconds()
) je řízen časovačem 0.
Takže změna předvolby časovače 2 neovlivní millis()
.
Změní se však frekvence PWM kolíku 3.
Zpět na vaši otázku:
Možné frekvence PWM Pin 11 (vyšší než 488 Hz) jsou:
31373/32 = 980,4 Hz
31373/8 = 3921,6 Hz
31373/1 = 31373 Hz
Kde 32, 8, 1 je předvolba.
Což se rovná na hodnotu nastavení 0x03, 0x02 & 0x01.
Přidejte tento řádek kódu:
TCCR2B = TCCR2B & 0b11111000 | setting;
Kde setting
je hodnota nastavení pro příslušný předvolič.
============================================ || Frequency [Hz] || Prescaler || Setting || ============================================ || 31373.55 || 1 || 0x01 || || 3921.57 || 8 || 0x02 || || 980.39 || 32 || 0x03 || || 490.20 || 64 || 0x04 || || 245.10 || 128 || 0x05 || || 122.55 || 256 || 0x06 || || 30.64 || 1024 || 0x07 || ============================================
Zdrojový kód : https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c
Komentáře
- Jen nitpicking ale … časovač ' s základní frekvence v režimu PWM správného fáze je F_CPU / 510 (31373 Hz), ne F_CPU / 512: počítání trvá 255 cyklů F od 0 do 255, poté dalších 255, aby se počítalo zpět na nulu. Srov. rovnice pro frekvenci PWM v datovém listu.
- @EdgarBonet Dobrý bod. Odpověď byla nyní opravena.
- Bylo by možné sestoupit o krok pomaleji na 15,31 HZ?
Odpověď
Závisí na kolíku, který jste použili pro PWM.
Specifikace Arduino UNO / NANO říkají následující věci:
Základní frekvence pro piny 3, 9, 10 a 11 je 31250 Hz.
Základní frekvence pro piny 5 a 6 je 62500 Hz.
Dělitele k dispozici na pinech 5, 6, 9 a 10 jsou: 1, 8, 64, 256 a 1024.
Dělitele dostupné na pinech 3 a 11 jsou: 1, 8, 32, 64, 128, 256 a 1024.
Frekvence PWM jsou spojeny dohromady v párech kolíků. Pokud je jeden v páru změněn, druhý je také změněn tak, aby odpovídal.
Kolíky 5 a 6 jsou spárovány na časovači0.
Kolíky 9 a 10 jsou spárovány na časovači1.
Kolíky 3 a 11 jsou spárovány na časovači 2.
Změny na kolících 3, 5, 6 nebo 11 mohou způsobit zpoždění () a funkce millis (), aby přestala fungovat. Mohou být ovlivněny i další funkce související s časováním.
Komentáře
- Protože ' když cituji specifikace, je ' d hezké, pokud na ně můžete také odkazovat? 🙂