class DAC – digitaali-analogiamuunnos¶
DAC tuottaa analogiajännitteitä välillä 0 V ja 3,3 V toisessa STM32:n kahdesta DAC-kanavasta.
Jokaisessa STM32-pohjaisessa OpenMV Cam -kamerassa, joka tarjoaa pyb.DAC-luokan (M4 / M7 / H7 / H7 Plus / Pure Thermal), kanavat on kytketty seuraavasti:
DAC-kanava |
Liitinnasta |
STM32-nasta |
|---|---|---|
|
(ei liittimessä) |
|
|
|
|
OpenMV Cam N6 -kamerassa ei ole DAC-oheislaitetta; pyb.DAC ei ole käytettävissä tässä laudassa.
Esimerkkikäyttö:
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
Jatkuvan siniaallon tuottamiseksi:
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)
Jatkuvan siniaallon tuottamiseksi 12-bittisellä resoluutiolla:
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)
Konstruktorit¶
- class pyb.DAC(port: int | Pin, bits: int = 8, *, buffering: bool | None = None)¶
Luo uusi DAC-objekti.
portvoi ollaPin-objekti tai kokonaisluku (1tai2), joka valitsee DAC-kanavan 1 tai 2. Fyysinen nasta, johon kukin kanava on reititetty, riippuu OpenMV Cam -kamerasta.bitson kokonaisluku, joka määrittää resoluution, ja se voi olla 8 tai 12. Suurin arvo, jonkawrite()jawrite_timed()hyväksyvät, on(2**bits) - 1(255 8-bittisellä, 4095 12-bittisellä).buffering-parametri valitsee DAC:n operaatiovahvistimen ulostulopuskurin toiminnan, jonka tarkoituksena on pienentää ulostuloimpedanssia. Se voi olla
None, joka valitsee oletuksen (puskurointi käytössä metodeilleDAC.noise(),DAC.triangle()jaDAC.write_timed(), ja pois käytöstä metodilleDAC.write()),False, joka poistaa puskuroinnin kokonaan käytöstä, taiTrue, joka ottaa ulostulopuskuroinnin käyttöön.Kun puskurointi on käytössä, DAC-nasta voi ohjata kuormia aina 5 kΩ:iin asti. Muutoin sen ulostuloimpedanssi on enintään 15 kΩ: tämän vuoksi 1 %:n tarkkuuden saavuttaminen ilman puskurointia edellyttää, että käytetty kuorma on alle 1,5 MΩ. Puskurin käyttö aiheuttaa tarkkuuden heikkenemisen, erityisesti alueen ääripäissä.
Metodit¶
- init(bits: int = 8, *, buffering: bool | None = None) None¶
Alusta DAC uudelleen. bits voi olla 8 tai 12. buffering voi olla
None,FalsetaiTrue; katso tämän parametrin merkitys yllä olevasta konstruktorista.
- noise(freq: int) None¶
Tuota pseudosatunnainen kohinasignaali. DAC:n ulostuloon kirjoitetaan uusi satunnainen näyte annetulla taajuudella.
- triangle(freq: int) None¶
Tuota kolmioaalto. DAC:n ulostulon arvo muuttuu annetulla taajuudella ja kulkee läpi koko 12-bittisen alueen (ylös ja alas). Tästä syystä itse toistuvan kolmioaallon taajuus on 8192 kertaa pienempi.
- write(value: int) None¶
Suora pääsy DAC:n ulostuloon. Pienin arvo on
0; suurin on(2**bits) - 1, jossabitsasetetaan DAC-objektia luotaessa tai metodillainit().
- write_timed(data: bytes | bytearray | 'array.array', freq: int | Timer, *, mode: int = DAC.NORMAL) None¶
Käynnistää RAM-muistista DAC:hen suuntautuvan purskeen DMA-siirtoa käyttäen. Syötedataa käsitellään tavutaulukkona 8-bittisessä tilassa ja etumerkittömien puolisanojen taulukkona (taulukon tyyppikoodi ’H’) 12-bittisessä tilassa.
freqvoi olla kokonaisluku, joka määrittää taajuuden, jolla DAC-näytteet kirjoitetaan käyttäen Timer(6):tta. Tai se voi olla jo alustettu Timer-objekti, jota käytetään DAC-näytteen laukaisemiseen. Kelvolliset ajastimet ovat 2, 4, 5, 6, 7 ja 8.modevoi ollaDAC.NORMALtaiDAC.CIRCULAR.Esimerkki, jossa molempia DAC:eja käytetään samanaikaisesti:
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)
Vakiot¶