类 DAC – 数模转换

DAC 用于在引脚 X5 或引脚 X6 上输出模拟值(特定电压)。电压将在 0 到 3.3V 之间。

该模块将对 API 进行更改。

用法示例:

from pyb import DAC

dac = DAC(1)            # create DAC 1 on pin X5
dac.write(128)          # write a value to the DAC (makes X5 1.65V)

dac = DAC(1, bits=12)   # use 12 bit resolution
dac.write(4095)         # output maximum value, 3.3V

输出连续的正弦波:

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

# create a buffer containing a sine-wave, using half-word samples
buf = array('H', 2048 + int(2047 * math.sin(2 * math.pi * i / 128)) for i in range(128))

# 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, bits=8, *, buffering=None)

构造一个新的 DAC 对象。

port 可以是 pin 对象,也可以是整数(1 或 2)。DAC(1) 位于引脚 X5 上,DAC(2) 位于引脚 X6 上。

bits 是指定分辨率的整数,可以是 8 或 12。 write 和 write_timed 方法的最大值将为 2**``bits``-1。

的缓冲参数选择DAC运算放大器的输出缓存器的行为,其目的是降低输出阻抗。它可以是 None选择默认(启用了缓冲DAC.noise(), DAC.triangle() and DAC.write_timed(), 和用于残疾人 DAC.write()), False完全以禁用缓存,或True 允许输出缓冲。

启用缓冲后,DAC 引脚可将负载驱动至低至 5KΩ。否则,它的输出阻抗最大为 15KΩ:因此,要在没有缓冲的情况下实现 1% 的准确度,需要施加的负载小于 1.5MΩ。使用缓冲区会导致准确性下降,尤其是在接近极限范围时。

方法

DAC.init(bits=8, *, buffering=None)

重新初始化 DAC。 位可以是 8 或 12。 缓冲可以是 None, FalseTrue; 这个参数的含义见上面的构造函数。

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可以是一个整数,指定写入 DAC 样本的频率,使用 Timer(6)。或者它可以是一个已经初始化的 Timer 对象,用于触发 DAC 样本。有效计时器为 2、4、5、6、7 和 8。

mode可以 DAC.NORMALDAC.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)