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
- Väärät tiedot tulevat leikkikentältä .arduino.cc / Code / PwmFrequency . Olen varma, että en ole ainoa käyttäjä, jota on johdettu harhaan. Toinen vastaus julkaisi juuri otteen harhaanjohtavasta dokumentaatiosta.
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? 🙂