ADC osztály – analóg-digitális átalakítás¶
Használat:
import pyb
adc = pyb.ADC("P6")
val = adc.read()
Lásd a pyb.ADCAll osztályt az összes ADC-csatorna, valamint az MCU belső lapkahőmérséklet-, VBAT- és VREFINT-érzékelőinek egyidejű eléréséhez.
Konstruktorok¶
- class pyb.ADC(pin: int | str | Pin)¶
Létrehoz egy adott lábhoz társított ADC objektumot. Ez lehetővé teszi, hogy analóg értékeket olvass be az adott lábon.
Metódusok¶
- read() int¶
Beolvassa az analóg lábon lévő értéket és visszaadja azt. A visszaadott érték 0 és 4095 között lesz.
- read_timed(buf: bytearray | 'array.array', timer: Timer | int) int¶
Analóg értékeket olvas be a
bufpufferbe atimerobjektum által beállított sebességgel.A
buflehet például bytearray vagy array.array. Az ADC-értékek 12 bites felbontásúak, és közvetlenül abufpufferbe kerülnek tárolásra, ha annak elemmérete 16 bit vagy nagyobb. Ha abufcsak 8 bites elemekből áll (pl. egy bytearray), akkor a minta felbontása 8 bitre csökken.A
timeregy Timer objektum kell legyen, és minden alkalommal beolvasásra kerül egy minta, amikor az időzítő kivált. Az időzítőnek már inicializálva és a kívánt mintavételezési frekvencián futnia kell.A függvény korábbi viselkedésének támogatása érdekében a
timerlehet egész szám is, amely a mintavételezési frekvenciát (Hz-ben) adja meg. Ebben az esetben a Timer(6) automatikusan a megadott frekvencián való futásra lesz konfigurálva.Példa Timer objektum használatával (ajánlott módszer):
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
Példa a frekvenciához egész szám használatával:
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)
Ez a függvény nem foglal le heap memóriát. Blokkoló viselkedésű: nem tér vissza a hívó programhoz, amíg a puffer meg nem telik.
- static read_timed_multi(adcs: Tuple[ADC, ...], bufs: Tuple[bytearray | 'array.array', ...], timer: Timer) bool¶
Relatív időzítési vagy fázisadatok kinyerése több ADC-ből.
Analóg értékeket olvas be több ADC-ből pufferekbe a timer objektum által beállított sebességgel. Minden alkalommal, amikor az időzítő kivált, gyorsan beolvasásra kerül egy-egy minta sorban minden ADC-ből.
Az ADC- és pufferpéldányokat tuple-ökben adjuk át, ahol minden ADC-hez egy társított puffer tartozik. Minden puffernek azonos típusúnak és hosszúságúnak kell lennie, és a pufferek számának meg kell egyeznie az ADC-k számával.
A pufferek lehetnek például
bytearrayvagyarray.arraytípusúak. Az ADC-értékek 12 bites felbontásúak, és közvetlenül a pufferbe kerülnek tárolásra, ha annak elemmérete 16 bit vagy nagyobb. Ha a pufferek csak 8 bites elemekből állnak (pl. egybytearray), akkor a minta felbontása 8 bitre csökken.A timer egy Timer objektum kell legyen. Az időzítőnek már inicializálva és a kívánt mintavételezési frekvencián futnia kell.
Az STM32 OpenMV Cam kamerák csak egyetlen ADC-képes fejléclábat (
P6) tesznek elérhetővé, így a gyári hardveren aread_timed_multicsak egyetlen ADC-vel hasznos. További analóg bemeneteketpyb.Pincpuhivatkozásokon keresztül vezethetsz be, hogy egynél több ADC-vel használhasd.Példa egy ADC beolvasására:
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)
Ez a függvény nem foglal le heap memóriát. Blokkoló viselkedésű: nem tér vissza a hívó programhoz, amíg a pufferek meg nem telnek.
A függvény
Trueértéket ad vissza, ha minden minta helyes időzítéssel került beolvasásra. Magas mintavételezési sebességeknél egy mintakészlet beolvasásához szükséges idő meghaladhatja az időzítő periódusát. Ebben az esetben a függvényFalseértéket ad vissza, ami a mintavételezési intervallum pontosságának elvesztését jelzi. Szélsőséges esetekben minták kimaradhatnak.A maximális sebesség olyan tényezőktől függ, mint az adatszélesség és a beolvasott ADC-k száma. Tesztelés során két ADC-t 210 kHz-es időzítősebességgel mintavételeztek túlcsordulás nélkül. 215 kHz-en minták maradtak ki. Három ADC esetén a határ körülbelül 140 kHz, négy esetén pedig körülbelül 110 kHz. Magas mintavételezési sebességeknél a megszakítások időtartamra történő letiltása csökkentheti az alkalmi adatvesztés kockázatát.