klasa DAC – digitalno-analogna pretvorba¶
DAC izlaže analogne napone između 0 V i 3,3 V na jednom od dva STM32 DAC kanala.
Na svakoj STM32 OpenMV Cam kameri koja izlaže pyb.DAC (M4 / M7 / H7 / H7 Plus / Pure Thermal) kanali su ožičeni na sljedeći način:
DAC kanal |
Pin zaglavlja |
STM32 pin |
|---|---|---|
|
(nije na zaglavlju) |
|
|
|
|
OpenMV Cam N6 nema DAC periferiju; pyb.DAC nije dostupan na toj ploči.
Primjer upotrebe:
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
Za izlaz kontinuiranog sinusnog vala:
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)
Za izlaz kontinuiranog sinusnog vala u 12-bitnoj razlučivosti:
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)
Konstruktori¶
- class pyb.DAC(port: int | Pin, bits: int = 8, *, buffering: bool | None = None)¶
Stvara novi DAC objekt.
portmože bitiPinobjekt ili cijeli broj (1ili2) koji odabire DAC kanal 1 ili 2. Fizički pin na koji je svaki kanal usmjeren ovisi o OpenMV Cam kameri.bitsje cijeli broj koji određuje razlučivost i može biti 8 ili 12. Najveća vrijednost koju prihvaćajuwrite()iwrite_timed()jest(2**bits) - 1(255 za 8-bitnu, 4095 za 12-bitnu).Parametar buffering odabire ponašanje izlaznog međuspremnika DAC operacijskog pojačala, čija je svrha smanjiti izlaznu impedanciju. Može biti
Noneza odabir zadane vrijednosti (međuspremnik omogućen zaDAC.noise(),DAC.triangle()iDAC.write_timed(), a onemogućen zaDAC.write()),Falseza potpuno onemogućavanje međuspremnika iliTrueza omogućavanje izlaznog međuspremnika.Kada je međuspremnik omogućen, DAC pin može pokretati terete do 5KΩ. U suprotnom ima izlaznu impedanciju od najviše 15KΩ: posljedično, za postizanje točnosti od 1% bez međuspremnika potrebno je da primijenjeni teret bude manji od 1,5MΩ. Upotreba međuspremnika unosi gubitak u točnosti, osobito blizu krajeva raspona.
Metode¶
- init(bits: int = 8, *, buffering: bool | None = None) None¶
Ponovno inicijalizira DAC. bits može biti 8 ili 12. buffering može biti
None,FalseiliTrue; vidi prethodni konstruktor za značenje ovog parametra.
- noise(freq: int) None¶
Generira pseudoslučajni šumni signal. Novi slučajni uzorak zapisuje se na DAC izlaz na zadanoj frekvenciji.
- triangle(freq: int) None¶
Generira trokutasti val. Vrijednost na DAC izlazu mijenja se na zadanoj frekvenciji i prolazi punim 12-bitnim rasponom (gore i dolje). Stoga je frekvencija samog ponavljajućeg trokutastog vala 8192 puta manja.
- write(value: int) None¶
Izravni pristup DAC izlazu. Najmanja vrijednost je
0; najveća je(2**bits) - 1, gdje sebitspostavlja pri stvaranju DAC objekta ili puteminit().
- write_timed(data: bytes | bytearray | 'array.array', freq: int | Timer, *, mode: int = DAC.NORMAL) None¶
Pokreće rafal iz RAM-a u DAC pomoću DMA prijenosa. Ulazni podaci tretiraju se kao polje bajtova u 8-bitnom načinu rada te kao polje nepredznačenih poluriječi (kod tipa polja ‘H’) u 12-bitnom načinu rada.
freqmože biti cijeli broj koji određuje frekvenciju na kojoj se zapisuju DAC uzorci, koristeći Timer(6). Ili može biti već inicijaliziran Timer objekt koji se koristi za okidanje DAC uzorka. Valjani mjerači vremena su 2, 4, 5, 6, 7 i 8.modemože bitiDAC.NORMALiliDAC.CIRCULAR.Primjer upotrebe oba DAC-a istovremeno:
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)
Konstante¶