class 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 可以是一个引脚对象,也可以是一个整数(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 可以是 NoneFalseTrue;有关此参数的含义,请参阅上述构造函数。

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 样本的频率。或者它可以是已经初始化的 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)

常量

DAC.NORMAL

NORMAL 模式对数据缓冲区中的波形进行单次传输,

DAC.CIRCULAR

CIRCULAR 模式对数据缓冲区中的波形进行传输,并在达到表格末尾时重新回到表格的开头。