třída DAC – digitálně-analogový převod¶
DAC vydává analogové napětí mezi 0 V a 3,3 V na jednom ze dvou DAC kanálů STM32.
Na každém STM32 OpenMV Cam, který poskytuje pyb.DAC (M4 / M7 / H7 / H7 Plus / Pure Thermal), jsou kanály zapojeny následovně:
DAC kanál |
Pin na konektoru |
Pin STM32 |
|---|---|---|
|
(není na konektoru) |
|
|
|
|
OpenMV Cam N6 nemá periferii DAC; pyb.DAC na této desce není k dispozici.
Příklad použití:
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
Pro výstup spojité sinusovky:
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)
Pro výstup spojité sinusovky s 12bitovým rozlišením:
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)
Konstruktory¶
- class pyb.DAC(port: int | Pin, bits: int = 8, *, buffering: bool | None = None)¶
Vytvoří nový objekt DAC.
portmůže být objektPinnebo celé číslo (1nebo2), které vybírá DAC kanál 1 nebo 2. Fyzický pin, na který je každý kanál vyveden, závisí na konkrétní OpenMV Cam.bitsje celé číslo udávající rozlišení a může být 8 nebo 12. Maximální hodnota přijímaná metodamiwrite()awrite_timed()je(2**bits) - 1(255 pro 8 bitů, 4095 pro 12 bitů).Parametr buffering vybírá chování výstupního bufferu operačního zesilovače DAC, jehož účelem je snížit výstupní impedanci. Může být
Nonepro výběr výchozího nastavení (buffering povolen proDAC.noise(),DAC.triangle()aDAC.write_timed(), zakázán proDAC.write()),Falsepro úplné zakázání bufferingu, neboTruepro povolení výstupního bufferingu.Když je buffering povolen, může pin DAC budit zátěž až do 5KΩ. Jinak má maximální výstupní impedanci 15KΩ: pro dosažení přesnosti 1 % bez bufferingu je tedy nutné, aby připojená zátěž byla menší než 1,5MΩ. Použití bufferu s sebou nese zhoršení přesnosti, zejména blízko krajních hodnot rozsahu.
Metody¶
- init(bits: int = 8, *, buffering: bool | None = None) None¶
Znovu inicializuje DAC. bits může být 8 nebo 12. buffering může být
None,FalseneboTrue; význam tohoto parametru viz konstruktor výše.
- noise(freq: int) None¶
Generuje pseudonáhodný šumový signál. Na výstup DAC se zadanou frekvencí zapisuje nový náhodný vzorek.
- triangle(freq: int) None¶
Generuje trojúhelníkový průběh. Hodnota na výstupu DAC se mění se zadanou frekvencí a probíhá celým 12bitovým rozsahem (nahoru a dolů). Frekvence samotného opakujícího se trojúhelníkového průběhu je proto 8192krát menší.
- write(value: int) None¶
Přímý přístup k výstupu DAC. Minimální hodnota je
0; maximální je(2**bits) - 1, kdebitsse nastavuje při vytváření objektu DAC nebo přesinit().
- write_timed(data: bytes | bytearray | 'array.array', freq: int | Timer, *, mode: int = DAC.NORMAL) None¶
Zahájí dávkový přenos z RAM do DAC pomocí DMA. Vstupní data jsou v 8bitovém režimu považována za pole bytů a ve 12bitovém režimu za pole bezznaménkových půlslov (typový kód pole ‚H‘).
freqmůže být celé číslo udávající frekvenci, se kterou se zapisují vzorky DAC, s použitím Timer(6). Nebo to může být již inicializovaný objekt Timer, který se použije ke spouštění vzorků DAC. Platné časovače jsou 2, 4, 5, 6, 7 a 8.modemůže býtDAC.NORMALneboDAC.CIRCULAR.Příklad použití obou DAC současně:
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)
Konstanty¶