クラス DAC -- デジタル-アナログ変換¶
DACは、ピン X5 またはピン X6 にアナログ値(特定の電圧)を出力するために使います。電圧は 0~3.3V の範囲になります。
このモジュールは API を変更する予定です。
使用例:
from pyb import DAC
dac = DAC(1) # ピン X5 の DAC 1 を作成
dac.write(128) # DAC に値を書出し(X5 を 1.65V にする)
dac = DAC(1, bits=12) # 12 ビット分解能を使用
dac.write(4095) # 最大値 3.3V を書出し
"サイン波を継続して出力するには次のようにします:
import math
from pyb import DAC
# 正弦波を含むバッファを作成
buf = bytearray(100)
for i in range(len(buf)):
buf[i] = 128 + int(127 * math.sin(2 * math.pi * i / len(buf)))
# 正弦波を 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
# 半ワードサンプルを使って、正弦波を含むバッファを作成
buf = array('H', 2048 + int(2047 * math.sin(2 * math.pi * i / 128)) for i in range(128))
# 正弦波を 400Hz で出力
dac = DAC(1, bits=12)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)
コンストラクタ¶
- class pyb.DAC(port, bits=8, *, buffering=None)¶
新しい DAC オブジェクトを作成します。
port
には、ピンオブジェクト、または整数(1 または 2)を指定できます。DAC(1) は X5 ピン、DAC(2) は X6 ピンです。bits
は分解能を指定する整数で、8 または 12 です。write と write_timed メソッドの最大値は 2**``bits``-1 となります。buffering パラメーターは、DAC オペアンプ出力バッファーの動作を選択します。デフォルトは
None
です(DAC.noise()
,DAC.triangle()
,DAC.write_timed()
ではバッファリングが有効、DAC.write()
では無効)。バッファリングを完全に無効にするにはFalse
、出力バッファリングを有効にするにはTrue
を指定します。バッファリングが有効な場合、DAC ピンは 5KΩ までの負荷を駆動できます。それ以外の場合、出力インピーダンスは最大 15KΩ です: その結果、バッファリングなしで 1% の精度を達成するには、適用される負荷が 1.5MΩ 未満である必要があります。バッファを使うと、特にレンジの極値付近で、精度にペナルティが生じます。
メソッド¶
- DAC.init(bits=8, *, buffering=None)¶
DAC を再初期化します。 bits には 8 または 12 を指定できます。 buffering には
None
,False
,True
を指定できます。このパラメータの意味については、上記のコンストラクタを参照してください。
- DAC.deinit()¶
DAC を解除し、そのピンを他の用途で使えるようにします。
- DAC.noise(freq)¶
擬似ランダムノイズ信号を生成します。新しいランダムサンプルが、指定した周波数で DAC 出力に書き込まれます。
- DAC.triangle(freq)¶
三角波を生成します。DAC 出力の値は指定した周波数で変化し、12ビットのフルレンジで上下します。したがって、三角波の繰り返し自体の周波数は8192分割になります。
- DAC.write(value)¶
DAC 出力へ直接アクセスします。最小値は 0 です。最大値は 2**``bits``-1 です。ここでの bits は DAC オブジェクトの作成時または init メソッドで設定したものです。
- DAC.write_timed(data, freq, *, mode=DAC.NORMAL)¶
DMA 転送を使って RAM から DAC へのバーストを開始します。入力データは 8 ビットモードではバイトの配列として扱われ、12 ビットモードでは符号なし半ワード(配列タイプコード 'H')の配列として扱われます。
freq
には Timer(6) を使って DAC サンプルを書き出す周波数を指定する整数です。または、既に初期化されたタイマーオブジェクトを指定することもでき、DAC サンプルをトリガーするために使います。有効なタイマーは 2、4、5、6、7、8 です。mode
はDAC.NORMAL
またはDAC.CIRCULAR
です2つの 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)
定数¶
- DAC.NORMAL¶
NORMAL モードでは、データバッファ内の波形を1回だけ送信します。
- DAC.CIRCULAR¶
CIRCULAR モードは、データバッファ内の波形を送信し、テーブルの最後に到達するたびにデータバッファの最初に折り返します。