Arduino Nano PWM -taajuus

Olen käyttänyt Arduino Nanoa PWM-ohjaimena lämmityselementille.

Käytän tällä hetkellä D11 (PB3). Voisin vaihtaa, vaikka kaikki PWM: llä varustetut nastat ovat käytössä, ja vaatisin uudelleenkirjoittamista ja uudelleenjohtoa.

Tämä tuottaa signaalin ~ 490 Hz: n tahdissa, mutta haluaisin kokeilla vaihtaa sen korkeampi taajuus.

Minulla on mahdollista muuttaa taajuutta muuttamalla jakajaa oletusasetuksestaan 64.

Luonnokseni käyttää Käyttää http://playground.arduino.cc/Main/SevenSegmentLibrary ja kutsuu millis () – vaikuttavatko PWM-jakajan muuttaminen kumpaankin näistä?

HUOMAUTUS Olen lukenut setPwmFrequency -dokumentaation, mutta löytää ”häiritsee normaalia toimintaa” ei ole hyödyllistä – olen itse asiassa selittänyt konkreettisia vaikutuksia. Käytän vain millis() -painiketta aikapainikkeen painamiseen ja LED-valon vilkkumiseen, jotka eivät ole aikakriittisiä.

Muista, että PWM-taajuuden muuttaminen muuttaa Atmegan ajastimet ja häiritsee useiden toimintojen, jotka perustuvat ajallaan (viive (), millit (), Servokirjasto), normaalia toimintaa.

Olen tehnyt jonkin verran lisätutkimusta. http://playground.arduino.cc/Code/PwmFrequency tilat Muutokset nastoihin 3, 5, 6 tai 11 voivat aiheuttaa viiveen () ja millis ( ) toiminnot lopettaa toiminnan.

Muut viitteet sanovat 3, 11 käyttävät timer 2 joten tee ne vaikuttavat millis() vai eivät , koska muihin viitteisiin timer 0 käytetään näitä.

Kommentit

  • Kyllä ja ei käytetyn pwm-ajastimen mukaan.

Vastaa

En tiedä mistä tämä väärä tieto tulee … Vastaus on no , ajastimen 2 uudelleenmääritys ei ei vaikuttaa millis() eikä delay(), koska nämä toiminnot perustuvat ajastimeen 0. AFAIK Arduino-ydin ei käytä ollenkaan ajastinta 2. Huomaa kuitenkin, että voi olla muita Arduino- tai kolmannen osapuolen kirjastoja, jotka tukeutuvat ajastimeen 2.

Täältä löydät -lähdekoodin millis() ja delay() .

Kuten MITU RAJ toteaa vastauksessaan oikein, tapin 11 PWM-signaalin tarjoaa Ajastin 2, joten voit käyttää sitä turvallisesti.

Kommentit

Vastaus

Vastaus on NO , tapin 11 PWM-jakajan muuttaminen ei vaikuta funktioon millis() (eikä delay()).


Selitys:
Arduino Nano käyttää ATMega328P-mikrokontrolleria, sama kuin Arduino Uno .

Nasta 11: n PWM: ää ohjaa ajastin 2. Oletusarvoisesti ajastimen 2 esiasetus on 64 (eli asetus 0x04). Ajastimen 2 perustaajuus on 31372,55 Hz, mikä johtaa taajuuteen 490,2 Hz (ts. 31372.55 / 64 = 490.1961).

Toisaalta mikrosekunnin ajastin (ts. millis(), micros(), delay() ja delayMicroseconds()) ohjaa ajastin 0.

Joten Ajastimen 2 esiasteen muuttaminen ei vaikuta kohtaan millis().

Se kuitenkin muuttaa nastan 3 PWM-taajuutta.


Takaisin kysymykseesi:
Nastan 11 mahdolliset PWM-taajuudet (yli 488 Hz) ovat:

31373/32 = 980,4 Hz
31373/8 = 3921,6 Hz
31373/1 = 31373 Hz

Missä 32, 8, 1 ovat esivalitsimet.
Mikä vastaa asetusarvoon 0x03, 0x02 & 0x01.

Lisää tämä koodirivi:

TCCR2B = TCCR2B & 0b11111000 | setting; 

Missä setting on vastaavan esilaajennuksen asetuksen arvo.

============================================ || 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 || ============================================ 

Lähdekoodi : https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c

Kommentit

  • Pelkkä nippaus, mutta … ajastimen ' perustaajuus vaiheen oikeassa PWM-tilassa on F_CPU / 510 (31373 Hz), ei F_CPU / 512: laskemiseen tarvitaan 255 jaksoa f rom 0-255, sitten 255 lisää laskeaksesi takaisin nollaan. C.f. taulukon PWM-taajuuden yhtälö.
  • @EdgarBonet Hyvä piste. Vastaus on nyt korjattu.
  • olisiko mahdollista mennä hitaammin alaspäin arvoon 15,31 HZ?

vastaus

Riippuu PWM: ssä käytetystä PIN-koodista.

Arduino UNO / NANO -tekniset tiedot sanovat seuraavat asiat:

Nastojen 3, 9, 10 ja 11 perustaajuus on 31250 Hz.

Nastojen 5 ja 6 perustaajuus on 62500 Hz.

Saatavilla olevat jakajat nastoilla 5, 6, 9 ja 10 ovat: 1, 8, 64, 256 ja 1024.

Nastoilla 3 ja 11 olevat jakajat ovat: 1, 8, 32, 64, 128, 256 ja 1024.

PWM-taajuudet on sidottu toisiinsa nastapareina. Jos toinen parista muutetaan, myös toinen muutetaan vastaamaan.

Nastat 5 ja 6 paritetaan ajastimessa0.

Nastat 9 ja 10 paritetaan ajastimessa1.

Nastat 3 ja 11 paritetaan ajastimessa 2.

Muutokset nastoihin 3, 5, 6 tai 11 voivat aiheuttaa viiveen () ja millis () -toiminnot lopettaa toiminnan. Tämä voi vaikuttaa myös muihin ajoitukseen liittyviin toimintoihin.

Kommentit

  • Koska sinä ' lainaamalla tekniset tiedot, se ' olisi mukava, jos voisit myös linkittää niihin? 🙂

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *