3.13. Generiranje analognog signala pomoću PWM-a i RC filtra¶
ADC čita napone na pinu. Suprotno – proizvodnja međunapona između 0 V i Vcc na pinu – teže je, jer GPIO izlaz zna samo pokretati svoje dvije razine napajanja. Standardna zamjena je prebacivanje pina između razina napajanja dovoljno brzo da prosječni napon bude ono što vas zanima.
3.13.1. Pulsno-širinska modulacija¶
Pulsno-širinski modulirani (PWM) signal je pravokutni val na fiksnoj frekvenciji čije visoko vrijeme – udio svakog ciklusa provedenog na Vcc umjesto na masi – postavlja se u softveru. Taj udio je radni ciklus. Prosječni napon valnog oblika je radni ciklus pomnožen s Vcc:
V_avg = duty × Vcc
Radni ciklus od 25 % daje prosjek Vcc / 4; radni ciklus od 50 % daje Vcc / 2; radni ciklus od 75 % daje 3 × Vcc / 4.
PWM s radnim ciklusom od 25 %, 50 % i 75 %. Prosječni napon prati radni ciklus.¶
Frekvencija se postavlja pri konfiguraciji PWM-a; radni ciklus je ono što softver mijenja u hodu. Klasa machine.PWM obuhvaća kanal hardverskog mjerača vremena koji generira valni oblik bez pomoći CPU-a – nakon konfiguracije signal se nastavlja na odabranoj frekvenciji i radnom ciklusu dok se ne promijeni.
3.13.2. Klasa machine.PWM¶
Stvorite instancu PWM s pinom te početnom frekvencijom i radnim ciklusom:
from machine import PWM, Pin
pwm = PWM(Pin("P7"), freq=20_000, duty_u16=32768)
To pokreće pravokutni val od 20 kHz s 50 % radnog ciklusa na P7. Dvije metode mijenjaju izlaz u hodu:
pwm.duty_u16(16384) # change to 25 % (16384 / 65535)
pwm.freq(5_000) # change to 5 kHz
duty_u16() uzima neoznačeni 16-bitni cijeli broj koji preslikava 0 na „uvijek nisko”, a 65535 na „uvijek visoko”. freq() postavlja frekvenciju nosioca u hercima.
Napomena
Svaki PWM kanal na istom hardverskom mjeraču vremena dijeli njegovu frekvenciju. Pozivanje freq() na jednom kanalu mijenja svaki drugi kanal vezan uz taj mjerač vremena. Koristite kanale različitih mjerača vremena kada izlazi moraju raditi na različitim frekvencijama.
Pozovite deinit() da biste oslobodili kanal mjerača vremena kada izlaz više nije potreban.
3.13.3. Usrednjavanje pomoću RC niskopropusnog filtra¶
Sirovi PWM nije glatki napon; to je pravokutni val čiji je prosjek ono što želimo. Da biste izdvojili taj prosjek, propustite PWM kroz niskopropusni filtar – istu kombinaciju otpornika i kondenzatora koja se koristi za uklanjanje podrhtavanja prekidača u Uklanjanje podrhtavanja (debouncing).
PWM kroz RC niskopropusni filtar: kondenzator usrednjava pravokutni val u istosmjerni napon proporcionalan radnom ciklusu.¶
Granična frekvencija filtra – granica između frekvencija koje propušta i onih koje blokira – određena je istim umnoškom RC koji je dao vremensku konstantu za sklop za uklanjanje podrhtavanja:
f_c = 1 / (2π × R × C)
Da bi filtar izdvojio čisti istosmjerni napon iz PWM ulaza, granična frekvencija mora biti mnogo niža od same PWM frekvencije. Istosmjerna komponenta (frekvencija 0) prolazi nepromijenjena; osnovni harmonik PWM-a (na PWM frekvenciji) prigušuje se otprilike za f_c / f_PWM. Omjer od 1 / 200 smanjuje preostalo valovljenje na izlazu na oko 0.5 % ulaznog raspona.
Razumna polazna točka za sporo promjenjivu zadanu vrijednost:
PWM frekvencija
f_PWM = 20 kHz– znatno iznad zvučnog raspona i laka za mjerač vremena da je čisto generira.Vrijednosti filtra
R = 1.6 kΩ,C = 1 µF– dajuf_c = 1 / (2π × 1.6 kΩ × 1 µF) ≈ 100 Hz.
Prigušenje od 200× na nosiocu smanjuje puni raspon PWM-a na otprilike Vcc / 200 preostalog valovljenja na V_out – oko 16 mV pri 3,3 V.
Dvije praktične napomene:
Izlazna impedancija filtra približno je
R. Bilo koje silazno opterećenje koje vuče struju pretvaraRi opterećenje u razdjelnik koji povlačiV_outispod idealnog prosjeka, baš kao razdjelnik na stranici Čitanje analognog signala pomoću ADC-a. Napajajte ADC pin ili visokoimpedancijski međuspremnik, a ne opterećenje koje troši miliampere.Kondenzatoru je potrebno oko
5 × R × C ≈ 8 msda se ustali kada se radni ciklus promijeni;V_outkasni za postavkom radnog ciklusa za toliko. Za zadanu vrijednost koja se mora brže ažurirati, podignite graničnu frekvenciju (manjiRiliC) i prihvatite više valovljenja.