klasa ADC – analogno-digitalna pretvorba¶
Uporaba:
import pyb
adc = pyb.ADC("P6")
val = adc.read()
Pogledajte pyb.ADCAll za istovremeni pristup svakom ADC kanalu te internim senzorima MCU-a za temperaturu čipa, VBAT i VREFINT.
Konstruktori¶
- class pyb.ADC(pin: int | str | Pin)¶
Stvara ADC objekt povezan sa zadanim pinom. To vam omogućuje čitanje analognih vrijednosti na tom pinu.
Metode¶
- read() int¶
Čita vrijednost na analognom pinu i vraća je. Vraćena vrijednost bit će između 0 i 4095.
- read_timed(buf: bytearray | 'array.array', timer: Timer | int) int¶
Čita analogne vrijednosti u
bufbrzinom koju određuje objekttimer.bufmože biti, na primjer, bytearray ili array.array. ADC vrijednosti imaju 12-bitnu razlučivost i pohranjuju se izravno ubufako je veličina njegovih elemenata 16 bita ili više. Akobufima samo 8-bitne elemente (npr. bytearray), tada će razlučivost uzorka biti smanjena na 8 bita.timerbi trebao biti Timer objekt, a uzorak se čita svaki put kada se mjerač vremena okine. Mjerač vremena mora već biti inicijaliziran i raditi na željenoj frekvenciji uzorkovanja.Radi podrške prethodnom ponašanju ove funkcije,
timermože biti i cijeli broj koji određuje frekvenciju (u Hz) na kojoj se uzorkuje. U tom slučaju Timer(6) bit će automatski konfiguriran za rad na zadanoj frekvenciji.Primjer uporabe Timer objekta (preferirani način):
adc = pyb.ADC(pyb.Pin.board.P6) # create an ADC on pin P6 tim = pyb.Timer(6, freq=10) # create a timer running at 10Hz buf = bytearray(100) # buffer to hold the samples adc.read_timed(buf, tim) # sample 100 values, taking 10s
Primjer uporabe cijelog broja za frekvenciju:
adc = pyb.ADC(pyb.Pin.board.P6) # create an ADC on pin P6 buf = bytearray(100) # buffer of 100 bytes adc.read_timed(buf, 10) # read 100 samples at 10Hz (10s total) for val in buf: print(val)
Ova funkcija ne alocira nikakvu heap memoriju. Ima blokirajuće ponašanje: ne vraća se pozivajućem programu dok međuspremnik nije pun.
- static read_timed_multi(adcs: Tuple[ADC, ...], bufs: Tuple[bytearray | 'array.array', ...], timer: Timer) bool¶
Izvlači relativne vremenske podatke ili podatke o fazi iz više ADC-ova.
Čita analogne vrijednosti iz više ADC-ova u međuspremnike brzinom koju određuje objekt timer. Svaki put kada se mjerač vremena okine, uzorak se brzo očita iz svakog ADC-a redom.
Instance ADC-a i međuspremnika prosljeđuju se u n-torkama, pri čemu svaki ADC ima pridruženi međuspremnik. Svi međuspremnici moraju biti istog tipa i duljine, a broj međuspremnika mora biti jednak broju ADC-ova.
Međuspremnici mogu biti, na primjer,
bytearrayiliarray.array. ADC vrijednosti imaju 12-bitnu razlučivost i pohranjuju se izravno u međuspremnik ako je veličina njegovih elemenata 16 bita ili više. Ako međuspremnici imaju samo 8-bitne elemente (npr.bytearray), tada će razlučivost uzorka biti smanjena na 8 bita.timer mora biti Timer objekt. Mjerač vremena mora već biti inicijaliziran i raditi na željenoj frekvenciji uzorkovanja.
STM32 OpenMV Cam kamere izlažu samo jedan pin zaglavlja sposoban za ADC (
P6), pa je na standardnom hardveruread_timed_multikoristan samo s jednim ADC-om. Spojite dodatne analogne ulaze putempyb.Pincpureferenci kako biste ga koristili s više od jednog ADC-a.Primjer čitanja jednog ADC-a:
import array adc = pyb.ADC(pyb.Pin.board.P6) tim = pyb.Timer(8, freq=100) rx = array.array("H", (0 for i in range(100))) # Sample 100 values at 100Hz (takes one second). pyb.ADC.read_timed_multi((adc,), (rx,), tim) for val in rx: print(val)
Ova funkcija ne alocira nikakvu heap memoriju. Ima blokirajuće ponašanje: ne vraća se pozivajućem programu dok međuspremnici nisu puni.
Funkcija vraća
Trueako su svi uzorci prikupljeni s ispravnim vremenskim usklađenjem. Pri visokim brzinama uzorkovanja vrijeme potrebno za prikupljanje skupa uzoraka može premašiti period mjerača vremena. U tom slučaju funkcija vraćaFalse, što označava gubitak preciznosti u intervalu uzorkovanja. U ekstremnim slučajevima uzorci mogu biti propušteni.Maksimalna brzina ovisi o čimbenicima uključujući širinu podataka i broj ADC-ova koji se čitaju. U testiranju su dva ADC-a uzorkovana brzinom mjerača vremena od 210 kHz bez prekoračenja. Uzorci su propušteni na 215 kHz. Za tri ADC-a granica je oko 140 kHz, a za četiri oko 110 kHz. Pri visokim brzinama uzorkovanja onemogućavanje prekida za vrijeme trajanja može smanjiti rizik od sporadičnog gubitka podataka.