class DAC – dijitalden analoğa dönüştürme¶
DAC, iki STM32 DAC kanalından birinde 0 V ile 3,3 V arasında analog gerilimler üretir.
pyb.DAC özelliğini sunan her STM32 OpenMV Cam (M4 / M7 / H7 / H7 Plus / Pure Thermal) üzerinde kanallar aşağıdaki gibi bağlanmıştır:
DAC kanalı |
Başlık pini |
STM32 pini |
|---|---|---|
|
(başlıkta değil) |
|
|
|
|
OpenMV Cam N6 bir DAC çevre birimine sahip değildir; pyb.DAC o kartta kullanılamaz.
Örnek kullanım:
from pyb import DAC
dac = DAC(1) # create DAC channel 1
dac.write(128) # write a value to the DAC (approximately 1.65 V)
dac = DAC(1, bits=12) # use 12-bit resolution
dac.write(4095) # output maximum value, 3.3 V
Sürekli bir sinüs dalgası üretmek için:
import math
from pyb import DAC
# create a buffer containing a sine-wave
buf = bytearray(100)
for i in range(len(buf)):
buf[i] = 128 + int(127 * math.sin(2 * math.pi * i / len(buf)))
# output the sine-wave at 400Hz
dac = DAC(1)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)
12 bit çözünürlükte sürekli bir sinüs dalgası üretmek için:
import math
from array import array
from pyb import DAC
# 128-sample sine wave, half-word samples centred at 2048 (12-bit mid).
N = 128
buf = array("H", (
2048 + int(2047 * math.sin(2 * math.pi * i / N))
for i in range(N)
))
# Output the sine wave at 400Hz.
dac = DAC(1, bits=12)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)
Yapıcılar¶
- class pyb.DAC(port: int | Pin, bits: int = 8, *, buffering: bool | None = None)¶
Yeni bir DAC nesnesi oluşturur.
portbirPinnesnesi olabilir ya da DAC kanalı 1 veya 2’yi seçen bir tam sayı (1veya2) olabilir. Her kanalın yönlendirildiği fiziksel pin OpenMV Cam’e bağlıdır.bitsçözünürlüğü belirten bir tam sayıdır ve 8 ya da 12 olabilir.write()vewrite_timed()tarafından kabul edilen maksimum değer(2**bits) - 1şeklindedir (8 bit için 255, 12 bit için 4095).buffering parametresi, amacı çıkış empedansını azaltmak olan DAC işlemsel yükselteç çıkış arabelleğinin davranışını seçer. Varsayılanı seçmek için
Noneolabilir (DAC.noise(),DAC.triangle()veDAC.write_timed()için arabellekleme etkin,DAC.write()için devre dışı), arabelleklemeyi tamamen devre dışı bırakmak içinFalseya da çıkış arabelleklemesini etkinleştirmek içinTrueolabilir.Arabellekleme etkin olduğunda DAC pini 5KΩ’a kadar yükleri sürebilir. Aksi takdirde maksimum 15KΩ çıkış empedansına sahiptir: dolayısıyla arabellekleme olmadan %1 doğruluk elde etmek için uygulanan yükün 1.5MΩ’dan küçük olması gerekir. Arabelleğin kullanılması, özellikle aralığın uçlarına yakın yerlerde doğrulukta bir kayba yol açar.
Yöntemler¶
- init(bits: int = 8, *, buffering: bool | None = None) None¶
DAC’ı yeniden başlatır. bits 8 veya 12 olabilir. buffering
None,FalseveyaTrueolabilir; bu parametrenin anlamı için yukarıdaki yapıcıya bakın.
- noise(freq: int) None¶
Sözde rastgele bir gürültü sinyali üretir. Verilen frekansta DAC çıkışına yeni bir rastgele örnek yazılır.
- triangle(freq: int) None¶
Bir üçgen dalga üretir. DAC çıkışındaki değer verilen frekansta değişir ve tam 12 bitlik aralık boyunca (yukarı ve aşağı) rampalanır. Bu nedenle tekrarlanan üçgen dalganın kendi frekansı 8192 kat daha küçüktür.
- write(value: int) None¶
DAC çıkışına doğrudan erişim. Minimum değer
0; maksimum değer(2**bits) - 1şeklindedir; buradabits, DAC nesnesi oluşturulurken veyainit()aracılığıyla ayarlanır.
- write_timed(data: bytes | bytearray | 'array.array', freq: int | Timer, *, mode: int = DAC.NORMAL) None¶
Bir DMA aktarımı kullanarak RAM’den DAC’a bir patlama (burst) başlatır. Giriş verileri 8 bit modunda bir bayt dizisi, 12 bit modunda ise işaretsiz yarım sözcüklerden (dizi tip kodu ‘H’) oluşan bir dizi olarak işlenir.
freq, Timer(6) kullanılarak DAC örneklerinin yazılacağı frekansı belirten bir tam sayı olabilir. Ya da DAC örneğini tetiklemek için kullanılan, önceden başlatılmış bir Timer nesnesi olabilir. Geçerli zamanlayıcılar 2, 4, 5, 6, 7 ve 8’dir.modeDAC.NORMALveyaDAC.CIRCULARolabilir.Her iki DAC’ı aynı anda kullanan örnek:
dac1 = DAC(1) dac2 = DAC(2) dac1.write_timed(buf1, pyb.Timer(6, freq=100), mode=DAC.CIRCULAR) dac2.write_timed(buf2, pyb.Timer(7, freq=200), mode=DAC.CIRCULAR)
Sabitler¶