class DAC -- デジタル・アナログ変換¶
DAC は 2 つの STM32 DAC チャンネルのいずれかで 0 V から 3.3 V までのアナログ電圧を出力します。
pyb.DAC を備えるすべての STM32 系 OpenMV Cam(M4 / M7 / H7 / H7 Plus / Pure Thermal)では、チャンネルは次のように配線されています。
DAC チャンネル |
ヘッダーピン |
STM32 ピン |
|---|---|---|
|
(ヘッダー上にはありません) |
|
|
|
|
OpenMV Cam N6 には DAC ペリフェラルがありません。そのボードでは pyb.DAC は利用できません。
使用例:
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
連続した正弦波を出力するには:
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 ビット解像度で連続した正弦波を出力するには:
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)
コンストラクタ¶
- class pyb.DAC(port: int | Pin, bits: int = 8, *, buffering: bool | None = None)¶
新しい DAC オブジェクトを構築します。
portにはPinオブジェクト、または DAC チャンネル 1 か 2 を選択する整数(1または2)を指定できます。各チャンネルがルーティングされる物理ピンは OpenMV Cam によって異なります。bitsは解像度を指定する整数で、8 または 12 を指定できます。write()およびwrite_timed()が受け付ける最大値は(2**bits) - 1です(8 ビットでは 255、12 ビットでは 4095)。buffering パラメータは DAC オペアンプ出力バッファの動作を選択します。このバッファの目的は出力インピーダンスを下げることです。
Noneを指定するとデフォルト(DAC.noise()、DAC.triangle()、DAC.write_timed()ではバッファリング有効、DAC.write()では無効)が選択され、Falseを指定するとバッファリングを完全に無効化し、Trueを指定すると出力バッファリングを有効化します。バッファリングを有効にすると、DAC ピンは 5KΩ までの負荷を駆動できます。それ以外の場合は出力インピーダンスが最大 15KΩ となり、結果としてバッファリングなしで 1% の精度を達成するには、印加する負荷を 1.5MΩ 未満にする必要があります。バッファを使用すると、特に範囲の両端付近で精度が低下するというペナルティが生じます。
メソッド¶
- init(bits: int = 8, *, buffering: bool | None = None) None¶
DAC を再初期化します。bits には 8 または 12 を指定できます。buffering には
None、False、Trueを指定できます。このパラメータの意味については上記のコンストラクタを参照してください。
- triangle(freq: int) None¶
三角波を生成します。DAC 出力の値は指定された周波数で変化し、12 ビットの全範囲を(上下に)ランプします。したがって、繰り返される三角波そのものの周波数は 8192 分の 1 になります。
- write(value: int) None¶
DAC 出力への直接アクセスです。最小値は
0、最大値は(2**bits) - 1で、bitsは DAC オブジェクトの作成時またはinit()で設定されます。
- write_timed(data: bytes | bytearray | 'array.array', freq: int | Timer, *, mode: int = DAC.NORMAL) None¶
DMA 転送を使用して RAM から DAC へのバースト転送を開始します。入力データは、8 ビットモードでは byte の配列として、12 ビットモードでは符号なしハーフワード(配列タイプコード 'H')の配列として扱われます。
freqには、Timer(6) を使用して DAC サンプルを書き込む周波数を指定する整数を指定できます。または、DAC サンプルのトリガーに使用される初期化済みの Timer オブジェクトを指定することもできます。有効なタイマーは 2、4、5、6、7、8 です。modeにはDAC.NORMALまたはDAC.CIRCULARを指定できます。両方の DAC を同時に使用する例:
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)
定数¶