3.13. Analogiasignaalin tuottaminen PWM:llä ja RC-suodattimella¶
ADC lukee jännitteitä nastasta. Päinvastainen – välijännitteen tuottaminen nastaan 0 V:n ja Vcc:n väliltä – on vaikeampaa, koska GPIO-lähtö osaa ohjata vain kahta kiskoaan. Vakiokorvike on kytkeä nastaa kiskojen välillä riittävän nopeasti, jotta keskimääräinen jännite on se, mistä välität.
3.13.1. Pulssinleveysmodulaatio¶
Pulssinleveysmoduloitu (PWM) signaali on kanttiaalto kiinteällä taajuudella, jonka ylätila – se osuus jokaisesta jaksosta, joka vietetään Vcc:ssä maan sijaan – asetetaan ohjelmistossa. Tämä osuus on pulssisuhde. Aaltomuodon keskimääräinen jännite on pulssisuhde kertaa Vcc:
V_avg = duty × Vcc
25 %:n pulssisuhde keskiarvoistuu arvoon Vcc / 4; 50 %:n pulssisuhde arvoon Vcc / 2; 75 %:n pulssisuhde arvoon 3 × Vcc / 4.
PWM 25 %:n, 50 %:n ja 75 %:n pulssisuhteella. Keskimääräinen jännite seuraa pulssisuhdetta.¶
Taajuus asetetaan PWM:ää määritettäessä; pulssisuhde on se, mitä ohjelmisto muuttaa lennossa. machine.PWM-luokka kapseloi laitteistoajastimen kanavan, joka tuottaa aaltomuodon ilman suorittimen apua – kerran määritettynä signaali jatkuu valitulla taajuudella ja pulssisuhteella, kunnes sitä muutetaan.
3.13.2. machine.PWM-luokka¶
Luo PWM-instanssi nastalla sekä alkutaajuudella ja -pulssisuhteella:
from machine import PWM, Pin
pwm = PWM(Pin("P7"), freq=20_000, duty_u16=32768)
Tämä käynnistää 20 kHz:n kanttiaallon 50 %:n pulssisuhteella nastassa P7. Kaksi metodia muuttaa lähtöä lennossa:
pwm.duty_u16(16384) # change to 25 % (16384 / 65535)
pwm.freq(5_000) # change to 5 kHz
duty_u16() ottaa etumerkittömän 16-bittisen kokonaisluvun, jossa 0 kuvautuu tilaan ”aina alhaalla” ja 65535 tilaan ”aina ylhäällä”. freq() asettaa kantotaajuuden hertseinä.
Muista
Jokainen samaan laitteistoajastimeen kytketty PWM-kanava jakaa sen taajuuden. freq()-kutsu yhdessä kanavassa muuttaa jokaista muuta samaan ajastimeen liitettyä kanavaa. Käytä eri ajastinten kanavia, kun lähtöjen on toimittava eri taajuuksilla.
Kutsu deinit() vapauttaaksesi ajastimen kanavan, kun lähtöä ei enää tarvita.
3.13.3. Keskiarvoistus RC-alipäästösuodattimella¶
Raaka PWM ei ole tasainen jännite; se on kanttiaalto, jonka keskiarvo on se, mitä haluamme. Tämän keskiarvon erottamiseksi johda PWM alipäästösuodattimen läpi – sama vastus-kondensaattori-yhdistelmä, jota käytettiin kytkimen värähtelynvaimennukseen kohdassa Värähtelyn poisto.
PWM RC-alipäästösuodattimen läpi: kondensaattori keskiarvoistaa kanttiaallon tasajännitteeksi, joka on verrannollinen pulssisuhteeseen.¶
Suodattimen rajataajuus – raja niiden taajuuksien, jotka se päästää läpi, ja niiden, jotka se estää, välillä – määräytyy saman RC-tulon perusteella, joka antoi aikavakion värähtelynvaimennuspiirille:
f_c = 1 / (2π × R × C)
Jotta suodatin erottaisi puhtaan tasajännitteen PWM-tulosta, rajataajuuden on oltava paljon matalampi kuin itse PWM-taajuus. Tasakomponentti (taajuus 0) kulkee läpi muuttumattomana; PWM:n perusyliaalto (PWM-taajuudella) vaimenee suunnilleen suhteessa f_c / f_PWM. Suhde 1 / 200 leikkaa lähdön jäännösaaltoilun noin 0.5 %:iin tulon vaihteluvälistä.
Kohtuullinen lähtökohta hitaasti muuttuvalle asetusarvolle:
PWM-taajuus
f_PWM = 20 kHz– selvästi audion yläpuolella ja ajastimen helppo tuottaa puhtaasti.Suodattimen arvot
R = 1.6 kΩ,C = 1 µF– antaenf_c = 1 / (2π × 1.6 kΩ × 1 µF) ≈ 100 Hz.
200-kertainen vaimennus kantoaallolla pienentää PWM:n täyden vaihteluvälin noin arvoon Vcc / 200 jäännösaaltoilua kohdassa V_out – noin 16 mV jännitteellä 3,3 V.
Kaksi käytännön huomiota:
Suodattimen lähtöimpedanssi on suunnilleen
R. Mikä tahansa alavirtaan oleva kuorma, joka ottaa virtaa, muuttaaR:n ja kuorman jakajaksi, joka vetääV_out-arvon ihanteellisen keskiarvon alapuolelle, aivan kuten Analogisignaalin lukeminen ADC:llä-sivun jakaja. Syötä ADC-nastaa tai korkeaimpedanssista puskuria, älä kuormaa, joka nielee milliampeereja.Kondensaattorilta kestää noin
5 × R × C ≈ 8 msasettua, kun pulssisuhde muuttuu;V_outjää sen verran jälkeen pulssisuhteen asetuksesta. Jos asetusarvon on päivityttävä nopeammin, nosta rajataajuutta (pienempiRtaiC) ja hyväksy enemmän aaltoilua.