class ADC – analogdan dijitale dönüşüm¶
Kullanım:
import pyb
adc = pyb.ADC("P6")
val = adc.read()
Her ADC kanalına ve ayrıca MCU’nun dahili çip sıcaklığı, VBAT ve VREFINT sensörlerine eşzamanlı erişim için pyb.ADCAll sınıfına bakın.
Yapıcılar¶
- class pyb.ADC(pin: int | str | Pin)¶
Verilen pin ile ilişkili bir ADC nesnesi oluşturur. Bu, daha sonra o pin üzerindeki analog değerleri okumanıza olanak tanır.
Metotlar¶
- read() int¶
Analog pin üzerindeki değeri okur ve döndürür. Döndürülen değer 0 ile 4095 arasında olacaktır.
- read_timed(buf: bytearray | 'array.array', timer: Timer | int) int¶
Analog değerleri
timernesnesi tarafından belirlenen bir hızdabufiçine okur.buförneğin bytearray veya array.array olabilir. ADC değerleri 12 bit çözünürlüğe sahiptir ve eleman boyutu 16 bit veya daha büyükse doğrudanbufiçine kaydedilir.bufyalnızca 8 bitlik elemanlara sahipse (örneğin bir bytearray) örnekleme çözünürlüğü 8 bite düşürülür.timerbir Timer nesnesi olmalıdır ve zamanlayıcı her tetiklendiğinde bir örnek okunur. Zamanlayıcı önceden başlatılmış ve istenen örnekleme frekansında çalışıyor olmalıdır.Bu fonksiyonun önceki davranışını desteklemek için,
timerörnekleme yapılacak frekansı (Hz cinsinden) belirten bir tam sayı da olabilir. Bu durumda Timer(6) verilen frekansta çalışacak şekilde otomatik olarak yapılandırılır.Bir Timer nesnesi kullanan örnek (tercih edilen yol):
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
Frekans için bir tam sayı kullanan örnek:
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)
Bu fonksiyon herhangi bir yığın (heap) belleği ayırmaz. Engelleyici davranışa sahiptir: arabellek dolana kadar çağıran programa dönmez.
- static read_timed_multi(adcs: Tuple[ADC, ...], bufs: Tuple[bytearray | 'array.array', ...], timer: Timer) bool¶
Birden fazla ADC’den göreceli zamanlama veya faz verisi çıkarır.
Birden fazla ADC’den analog değerleri timer nesnesi tarafından belirlenen bir hızda arabelleklere okur. Zamanlayıcı her tetiklendiğinde her ADC’den sırayla hızla bir örnek okunur.
ADC ve arabellek örnekleri, her ADC’nin ilişkili bir arabelleği olacak şekilde demetler (tuple) halinde geçirilir. Tüm arabellekler aynı tür ve uzunlukta olmalıdır ve arabellek sayısı ADC sayısına eşit olmalıdır.
Arabellekler örneğin
bytearrayveyaarray.arrayolabilir. ADC değerleri 12 bit çözünürlüğe sahiptir ve eleman boyutu 16 bit veya daha büyükse doğrudan arabelleğe kaydedilir. Arabellekler yalnızca 8 bitlik elemanlara sahipse (örneğin birbytearray) örnekleme çözünürlüğü 8 bite düşürülür.timer bir Timer nesnesi olmalıdır. Zamanlayıcı önceden başlatılmış ve istenen örnekleme frekansında çalışıyor olmalıdır.
STM32 OpenMV Cam’ler yalnızca bir ADC özellikli başlık pini (
P6) sunar, bu nedenle standart donanımdaread_timed_multiyalnızca tek bir ADC ile kullanışlıdır. Birden fazla ADC ile kullanmak için ek analog girişleripyb.Pincpureferansları aracılığıyla bağlayın.Bir ADC okuma örneği:
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)
Bu fonksiyon herhangi bir yığın (heap) belleği ayırmaz. Engelleyici davranışa sahiptir: arabellekler dolana kadar çağıran programa dönmez.
Tüm örnekler doğru zamanlamayla alındıysa fonksiyon
Truedöndürür. Yüksek örnekleme hızlarında bir örnek kümesini almak için geçen süre zamanlayıcı periyodunu aşabilir. Bu durumda fonksiyonFalsedöndürerek örnekleme aralığında bir hassasiyet kaybı olduğunu belirtir. Aşırı durumlarda örnekler kaçırılabilir.Maksimum hız; veri genişliği ve okunan ADC sayısı gibi faktörlere bağlıdır. Testlerde iki ADC, taşma olmadan 210kHz’lik bir zamanlayıcı hızında örneklendi. 215kHz’de örnekler kaçırıldı. Üç ADC için sınır yaklaşık 140kHz, dört ADC için yaklaşık 110kHz’dir. Yüksek örnekleme hızlarında bu süre boyunca kesmeleri devre dışı bırakmak, ara sıra meydana gelen veri kaybı riskini azaltabilir.