luokka ADC – analogia-digitaalimuunnos¶
Käyttö:
import pyb
adc = pyb.ADC("P6")
val = adc.read()
Katso pyb.ADCAll, jos haluat samanaikaisen pääsyn jokaiseen ADC-kanavaan sekä MCU:n sisäisiin sirun lämpötila-, VBAT- ja VREFINT-sensoreihin.
Konstruktorit¶
- class pyb.ADC(pin: int | str | Pin)¶
Luo annettuun nastaan liitetty ADC-objekti. Tämä mahdollistaa analogisten arvojen lukemisen kyseisestä nastasta.
Metodit¶
- read_timed(buf: bytearray | 'array.array', timer: Timer | int) int¶
Lue analogisia arvoja puskuriin
bufnopeudella, jonkatimer-objekti määrittää.bufvoi olla esimerkiksi bytearray tai array.array. ADC-arvot ovat 12-bittisellä resoluutiolla ja ne tallennetaan suoraan puskuriinbuf, jos sen alkion koko on 16 bittiä tai enemmän. Jos puskurissabufon vain 8-bittisiä alkioita (esim. bytearray), näytteen resoluutio pienennetään 8 bittiin.timertulee olla Timer-objekti, ja näyte luetaan aina, kun ajastin laukeaa. Ajastimen on jo oltava alustettu ja käynnissä halutulla näytteenottotaajuudella.Tämän funktion aiemman toiminnan tukemiseksi
timervoi olla myös kokonaisluku, joka määrittää näytteenottotaajuuden (hertseinä). Tässä tapauksessa Timer(6) konfiguroidaan automaattisesti toimimaan annetulla taajuudella.Esimerkki Timer-objektin käytöstä (suositeltu tapa):
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
Esimerkki kokonaisluvun käytöstä taajuutena:
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)
Tämä funktio ei varaa lainkaan keomuistia. Sillä on estävä toiminta: se ei palaa kutsuvaan ohjelmaan ennen kuin puskuri on täynnä.
- static read_timed_multi(adcs: Tuple[ADC, ...], bufs: Tuple[bytearray | 'array.array', ...], timer: Timer) bool¶
Pura suhteellinen ajoitus- tai vaihetieto useista ADC:istä.
Lukee analogisia arvoja useista ADC:istä puskureihin nopeudella, jonka timer-objekti määrittää. Aina kun ajastin laukeaa, jokaisesta ADC:stä luetaan vuorollaan nopeasti yksi näyte.
ADC- ja puskuri-instanssit välitetään monikoissa siten, että jokaisella ADC:llä on siihen liitetty puskuri. Kaikkien puskureiden on oltava samaa tyyppiä ja samanpituisia, ja puskureiden määrän on oltava yhtä suuri kuin ADC:iden määrä.
Puskurit voivat olla esimerkiksi
bytearraytaiarray.array. ADC-arvot ovat 12-bittisellä resoluutiolla ja ne tallennetaan suoraan puskuriin, jos sen alkion koko on 16 bittiä tai enemmän. Jos puskureissa on vain 8-bittisiä alkioita (esim.bytearray), näytteen resoluutio pienennetään 8 bittiin.timer tulee olla Timer-objekti. Ajastimen on jo oltava alustettu ja käynnissä halutulla näytteenottotaajuudella.
STM32 OpenMV Cam -laitteet tarjoavat vain yhden ADC-yhteensopivan liitinnastan (
P6), joten vakiolaitteistossaread_timed_multion hyödyllinen vain yhdellä ADC:llä. Kytke lisää analogisia tulojapyb.Pincpu-viittausten kautta käyttääksesi sitä useamman kuin yhden ADC:n kanssa.Esimerkki yhden ADC:n lukemisesta:
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)
Tämä funktio ei varaa lainkaan keomuistia. Sillä on estävä toiminta: se ei palaa kutsuvaan ohjelmaan ennen kuin puskurit ovat täynnä.
Funktio palauttaa
True, jos kaikki näytteet kerättiin oikealla ajoituksella. Korkeilla näytteenottotaajuuksilla näytejoukon keräämiseen kuluva aika voi ylittää ajastimen jakson. Tässä tapauksessa funktio palauttaaFalse, mikä ilmaisee tarkkuuden menetystä näytteenottovälissä. Ääritapauksissa näytteitä voi jäädä saamatta.Maksiminopeus riippuu tekijöistä kuten datan leveydestä ja luettavien ADC:iden määrästä. Testeissä kahta ADC:tä näytteistettiin 210 kHz:n ajastinnopeudella ilman ylivuotoa. 215 kHz:llä näytteitä jäi saamatta. Kolmella ADC:llä raja on noin 140 kHz ja neljällä noin 110 kHz. Korkeilla näytteenottotaajuuksilla keskeytysten poistaminen käytöstä keräyksen ajaksi voi vähentää satunnaisen datahäviön riskiä.