Mitä taajuutta Arduinos käyttää normaalille PWM: lle, kun käytät analogWrite () -ominaisuutta?
Ja onko se erilainen eri Arduino-malleissa? Olen kiinnostunut erityisesti Mega 2560: sta, mutta haluan myös tietää, onko se yhdenmukainen mallien välillä.
Olen nähnyt ohimennen viitteitä Arduinoon, joka käyttää 500 Hz: n taajuutta, mikä vaikuttaa todella hitaalta.
Kommentit
- Se riippuu myös käyttämästäsi nastasta.
Vastaa
PWM-signaalin tuottavat AVR-sirujen ajastimet. Jokainen ajastin voi tuottaa PWM-signaalin kahdella tai kolmella eri nastalla. Jokaisella nastalla voi olla oma toimintajaksonsa, mutta he jakavat PWM-taajuuden. Voit muuttaa PWM-taajuutta muuttamalla ajastinten kellolähdettä. Oletuksena he käyttävät suorittimen kelloa jaettuna 64: llä, ts. Heidän esihalkija on asetettu arvoon 64 Arduino-alustuskoodilla. Sekoittamaan asioita enemmän on kaksi erilaista PWM-tilaa: nopea PWM ja vaiheen oikea PWM. Nopeassa PWM: ssä ajastin laskee 255: een, sitten ylittää ja aloittaa 0: sta (256 eri tilaa). Vaiheen oikeassa PWM: ssä ajastin laskee 255: een, muuttaa sitten suuntaa ja laskee alaspäin nollaan, muuttaa suuntaa ja niin edelleen (510 eri tilaa).
Arduino Megalla on 5 ajastinta, ajastin0 – ajastin4. Koska ajastinta 0 käytetään myös milli- ja mikrotoimintoihin, se käyttää nopeaa PWM: ää, kun taas muut ajastimet on määritetty vaihe-oikeelle PWM: lle. Tämä johtaa eri taajuuksiin eri nastoilla:
-
Nastat 4 ja 13, ajastimen 0 ohjaamana:
16 Mhz / 64/256 = 976,56 Hz -
Muut ajastimen1-4 ohjaamat PWM-nastat:
16 Mhz / 64/510 = 490,20 Hz
Laskelma on: Kello / Prescaler / PWM-tilassa tilojen lukumäärä
Tilanne on sama kaikilla muilla tuntemillani Arduino-levyillä, paitsi että niillä on vähemmän ajastimia, jotka yhdistävät eri nastat.
Voit muuttaa PWM-taajuus vaihtamalla ajastimen esiasteikkoa. Katso tämä sivu: http://playground.arduino.cc/Main/TimerPWMCheatsheet
On myös mahdollista saada ajastimet laskemaan eri arvo kuin 255. 8-bittisissä ajastimissa menetät ulostulotapin, mutta 16-bittisissä ajastimissa voit määrittää tulonsiirtorekisterin avulla TOP-arvon. Syötön sieppaustoiminto on ominaisuus, jota Arduino-yhteisössä käytetään harvoin, joten et todennäköisesti menetä sitä.
Arduino-kirjastot sallivat sinun käyttää vain 8-bittistä tarkkuutta jopa 16-bittisissä ajastimissa. jos haluat suuremman tarkkuuden, sinun on kirjoitettava oma analogWrite tai käytettävä tähän tarkoitukseen tehtyä kirjastoa. Arduino Mega -ajastimessa0 ja ajastimessa 2 on 8-bittinen, kun taas loput ovat 16-bittisiä.
Muuttamalla 16-bittisten ajastimien tila täyden resoluution hyödyntämiseksi yhdessä escalkalin ja TOP-arvon muuttamisen kanssa voi saavuttaa erittäin laajan PWM-taajuuksien alueen.
Suurin taajuus, jonka voit saavuttaa on kello / 4 asettamalla esivalitsimen arvoksi 1 ja TOP arvoksi 3 nopeassa PWM-tilassa – pienempi arvo ei ole sallittu. Tämä antaa sinulle 4 MHz: n PWM: n 2-bittisellä tarkkuudella. Se voi olla 0%, 25%, 50% tai 75% ajasta. Suurempi TOP-arvo antaa sinulle suuremman tarkkuuden matalammalla taajuudella.
Katso pidempi selitys lukemalla tämä artikkeli tai tutustumalla tietolomake .
Ajastimen0 esiasteen, PWM-tilan tai TOP-arvon muuttaminen sekoittaa millis()
ja micros()
.
Kommentit
- Kerään siis, että nopein taajuus, jonka saat PWM: lle on 16Mhz / 256 (prescaler = 1) tai 62,5Khz?
- Ja lisäksi, että PWM-taajuuden on oltava tasainen kerroin 62,5KHz? Joku toisella ketjulla halusi hallita 4-napaisen PC-tuulettimen tuulettimen nopeutta. Ilmeisesti se haluaa 25 kHz: n PWM-ohjaussignaalin. 62,5 / 25 on 2,5, joka ei ole kokonaisluku.
- Päivitin vastauksen tarkentamaan tarkemmin mahdollisuuksia saavuttaa tiettyjä taajuuksia.
- Matalan taajuuden päässä voit esiasetetaan 16-bittinen ajastin vaiheenkorjaustilassa 1024-esijärjestelmällä, jotta saadaan 16e6 / 1024/2 ^ 16/2 = 0,119 Hz tai 7,1 jaksoa / minuutti. Pienempää varten sinun on vaihdettava bittiä milliksen () perusteella. Tai ehkä laukaise laskuri ulkoisesta tulotapista T ?.