Küsimus:
Miks on mõnel tihvtil erinev PWM-i sagedus?
Peter Bloomfield
2014-02-14 21:08:10 UTC
view on stackexchange narkive permalink

Arduino viite analogWrite () järgi on PWM-i sagedus enamikul tihvtidel ~ 490 Hz. Siiski on see Uno nööpnõelade 5 ja 6 ning Leonardo nööpnõelade 3 ja 11 puhul ~ 980 Hz.

Miks need erinevad? Kas see on tahtlik disainifunktsioon või dikteerib selle kuidagi riistvara?

Kaks vastused:
#1
+24
Ricardo
2014-02-14 22:00:19 UTC
view on stackexchange narkive permalink

Need pole ainsad PWM-signaalide jaoks saadaval olevad sagedused. Need on aga sagedused, mille määrab rakenduskaaler (mida saate hõlpsasti muuta, nagu allpool kirjeldatud).

Kõik kolm PWM-tihvtide paari on seotud ühe taimeriga, millest igaühel on oma põhisagedus järgmiselt:

  • Pistikud 5 ja 6 on paaritatud taimeril 0, baassagedusega 62500Hz
  • Nööpnõelad 9 ja 10 on paaritatud taimeris1, põhisagedusega 31250Hz
  • Taimeril 2 on nööpnõelad 3 ja 11 paaris, põhisagedusega 31250Hz.

Siis on igal nööpnõelakomplektil võimalik valida mitu eelkalkulaatori väärtust, mis jagab selle tihvtipaari baassageduse. Olemasolevad eelskaalingu väärtused on järgmised:

  • Pistikute 5 ja 6 eelskaaleri väärtused on 1, 8, 64, 256 ja 1024
  • Pistikute 9 ja 10 eelskaleri väärtused on 1 , 8, 64, 256 ja 1024
  • Pistikute 3 ja 11 eelskaleri väärtused on 1, 8, 32, 64, 128, 256 ja 1024

erinevad kombinatsioonid annavad antud PWM-tihvtis erinevad sagedused. Pange tähele, et taimeril 2 (seotud tihvtidega 3 ja 11) on rohkem eelskaleri väärtusi, mille tulemuseks on rohkem sagedusi.

Nüüd, miks taimer 2 on erinev, on see eraldi küsimus.

Muuda: Siin on loetelu võimalikest PWM-i sagedustest tihvti kohta ( sellest artiklist):

Pistikute 6 ja 5 (OC0A ja OC0B) puhul:

  • Kui TCCR0B = xxxxx001, on sagedus 64kHz
  • Kui TCCR0B = xxxxx010, on sagedus 8 kHz
  • Kui TCCR0B = xxxxx011, on sagedus 1kHz (see on vaikimisi Diecimila alglaadurist)
  • Kui TCCR0B = xxxxx100, on sagedus 250Hz
  • Kui TCCR0B = xxxxx101, on sagedus 62,5 Hz

Pistikute 9 puhul , 10, 11 ja 3 (OC1A, OC1B, OC2A, OC2B):

  • Kui TCCRnB = xxxxx001, on sagedus 32kHz
  • Kui TCCRnB = xxxxx010, on sagedus 4 kHz
  • Kui TCCRnB = xxxxx011, on sagedus 500 Hz (see on Diecimila alglaadija vaikeväärtus)
  • Kui TCCRnB = xxxxx100, on sagedus 125Hz
  • Kui TCCRnB = xxxxx101, on sagedus 31,25 Hz

TCCRnB on koht, kus määrate taimerile n eelskaala bitid, asendades n väärtusega 0, 1 või 2, sõltuvalt ajastatavast taimerist. Kui te pole veel bitipõhiste toimingute suhtes kindel, lugege seda natuke matemaatika õpetust.

Minu allikad:

Pange tähele, et neis allikates näib olevat lahkarvamusi selles osas, kas tihvtidel 9 ja 10 on sama käitumine kui 5-l ja 6-l või 3-l ja 11-l, kuid idee saate ikkagi. Loen andmebaasi, et proovida, mis on õige või kas see on tahvlite erinevus.

Millisele ATmegale see vastus viitab? Ma ei kontrollinud, kuid vean kihla, et see on kontrolleri kohta veidi erinev.
@jippie Hea punkt! Allikad viitavad ATmega168 ja 328-le.
@jippie Lihtsalt selleks, et minu vastuses selgitada, viitavad pin-numbrid sellele, kuidas nad Uno-plaadil määravad (tihvt 1 tähendab näiteks digitaalset tihvti 1 või D1), mitte IC-d (ATmega328 tihvt 1 lähtestatakse).
Usun, et need detailid muutuvad ka tahvlite, Uno, Duemilanove, Mega, ...
@jippie Kindlasti jah.
See vastus on lihtsalt vale. Taimerid kasutavad sama eelkaaleri seadistust. Ainus erinevus on see, et taimer 1 ja 2 on seatud faasipõhisele PWM-ile, samas kui taimer 0 on seatud kiirele PWM-ile, kahekordistades sagedust.
#2
+8
jippie
2014-02-14 21:57:57 UTC
view on stackexchange narkive permalink

Ma ei ole teadlik disainiga seotud kaalutlustest, kuid kui kontrollite oma Arduino mikrokontrolleri andmelehte, märkate, et PWM-i tihvtid on rühmitatud kokku ja taimeriga ühendatud rühmade kaupa. Taimeri suurendamise kiirus varieerub konfigureeritud eelkalkeri järgi. Kui muudate teatud taimeri eelskaalat, muudate seotud PWM-tihvtide PWM-i sagedust. Usun, et mõned taimerid topelt muudel eesmärkidel, näiteks funktsiooniks millis (); . Kui muudate selle taimeri eelskaalat, lülitatakse väärtused, mille tagastab millis () , sama teguriga välja.

Eeskaleri sätte saate arvutada järgmiselt:

$$ \ text {prescaler} = \ dfrac {f_ {CPU}} {PWMresolution × f_ {PWM}} = \ dfrac {16 \ text {MHz}} {256 × 490} \ umbes 128 $$

prescaler = f [CPU] / (PWMresolution × f [PWM]) = 16000000 / (256 × 490) = umbes 128.

Kontrollige andmeleht ja leiad, et 128 on tõepoolest üks eelkalsieri väärtustest, mille saate valida.

Poiss, kas me igatseme MathJaxi või mis? Loodan, et lubame selle pärast beetaversiooni.
@Ricardo Mul on brauseris nupp MathJax; o) http://meta.arduino.stackexchange.com/questions/13/is-there-an-easy-way-to-enter-formulas-in-questions/51# 51


See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...