Arduino Nano-t használtam PWM vezérlőként egy fűtőelemhez.
Jelenleg a D11 (PB3). Megváltoztathatnám, bár az összes PWM-es pin van használatban, és újraírást és újracsatlakozást igényelne.
Ez ~ 490Hz-en hoz létre jelet, de szeretnék kísérletezni ennek megváltoztatására: magasabb frekvenciát.
Összegyűjtem, hogy a frekvencia megváltoztatható úgy, hogy megváltoztatom az osztót az alapértelmezett 64-ből.
A vázlatom a http://playground.arduino.cc/Main/SevenSegmentLibrary és meghívja a millist () – hatással lesz-e ezek egyikére a változó PWM osztó?
MEGJEGYZÉS Elolvastam a setPwmFrequency
dokumentációt, de a find “megzavarja a normál működést” haszontalan – valójában a konkrét hatás magyarázatát követem. Csak a millis()
-et használom időzítésre és egy LED villogására, amelyek nem kritikusak az időnek.
Ne feledje, hogy a PWM frekvencia megváltoztatása megváltoztatja a Az Atmega időzítői, és megzavarják az idő függvényében működő sok funkció (késleltetés (), millis (), Servo könyvtár) normál működését.
További tanulmányokat folytattam. http://playground.arduino.cc/Code/PwmFrequency állapot A 3., 5., 6. vagy 11. érintkező változásai késleltetést () és millis ( ) funkciók a működés leállításához.
Más hivatkozások szerint a 3., 11. a timer 2
szóval do hatással vannak a millis()
-re, vagy nem a -re, mivel ezekre más hivatkozásokat hivatkoznak. / p>
megjegyzések
- igen és nem, a használt pwm időzítőtől függően.
válasz
Nem tudom, honnan származik ez a félretájékoztatás … A válasz no , a 2. időzítő újrakonfigurálása nem befolyásolja millis()
és delay()
, mivel ezek a funkciók a 0-as időzítőre támaszkodnak. De vegye figyelembe, hogy lehetnek más Arduino vagy harmadik fél könyvtárai, amelyek a Timer 2-re támaszkodnak.
Itt láthatja a és delay()
.
Ahogy MITU RAJ helyesen állítja válaszában, a PWM jelet a 11. tűn a 2. időzítő, így biztonságosan használhatja.
Megjegyzések
- A félretájékoztatás a játszótérről származik .arduino.cc / Code / PwmFrequency . Biztos vagyok abban, hogy nem én vagyok az egyetlen felhasználó, akit megtévesztettek. A másik válasz éppen közzétette a megtévesztő dokumentumok kivonatát.
Válasz
A válasz NO , a 11. érintkező PWM osztójának megváltoztatása nem befolyásolja a millis()
függvényt (sem a delay()
).
Magyarázat:
Az Arduino Nano az ATMega328P mikrovezérlőt használja, ugyanaz, mint az Arduino Uno .
A 11-es érintkező PWM-jét a 2-es időzítő vezérli. Alapértelmezés szerint a 2-es időzítő előskálája 64 (azaz 0x04 beállítás). A 2. időzítő alapfrekvenciája 31372,55 Hz, ami 490,2 Hz (azaz. 31372.55 / 64 = 490.1961).
Másrészt a mikroszekundumos időzítő (vagyis az, amelyet millis()
, micros()
, delay()
és delayMicroseconds()
) a 0 időzítő vezérli.
Tehát A 2. időzítő előmérőjének megváltoztatása nem érinti a millis()
elemeket.
Ez azonban megváltoztatja a 3. tű PWM frekvenciáját.
Vissza a kérdésedre:
A 11. érintkező lehetséges PWM frekvenciái (488 Hz felett):
31373/32 = 980,4 Hz
31373/8 = 3921,6 Hz
31373/1 = 31373 Hz
Ahol 32, 8, 1 az előmérő.
Ami egyenlő 0x03, 0x02 & 0x01 beállítási értékre.
Adja hozzá ezt a kódsort:
TCCR2B = TCCR2B & 0b11111000 | setting;
Ahol setting
az adott preskaler beállításának értéke.
============================================ || 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 || ============================================
Forráskód : https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c
Megjegyzések
- Csak szúrás, de … az időzítő ' alapfrekvenciája a fázis helyes PWM módban F_CPU / 510 (31373 Hz), nem F_CPU / 512: 255 ciklus szükséges a számláláshoz f rom 0-tól 255-ig, majd még 255-vel visszaszámlálás nullára. C.f. az adatlapon szereplő PWM frekvencia egyenlete.
- @EdgarBonet Jó pont. A választ most kijavították.
- lehetséges-e lassabban lemenni 15,31 HZ-ig?
Válasz
A PWM-hez használt PIN-kódtól függ.
Arduino UNO / NANO specifikációi a következőket mondják:
A 3., 9., 10. és 11. érintkezők alapfrekvenciája 31250 Hz.
Az 5. és 6. érintkezők alapfrekvenciája 62500 Hz.
A rendelkezésre álló osztók az 5., 6., 9. és 10. érintkezőkön: 1, 8, 64, 256 és 1024.
A 3. és 11. érintkezőkön elérhető osztók: 1, 8, 32, 64, 128, 256 és 1024.
A PWM frekvenciák csappárokba vannak kötve. Ha az egyik párban megváltozik, akkor a másik is megváltozik, hogy megfeleljen.
Az 5. és 6. érintkező párosítva van a timer0-on.
A 9. és 10. érintkező párosítva van az 1. időzítőn. p>
A 3. és a 11. érintkező párosítva van a 2. időzítőn.
A 3., 5., 6. vagy 11. érintkező változásai késleltetést okozhatnak () és millis () függvények a működés leállításához. Egyéb időzítéssel kapcsolatos funkciók is érintettek lehetnek.
Megjegyzések
- Mivel Ön ' újból idézve a specifikációkat, ' jó lenne, ha linkelni is tudnál rájuk? 🙂