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 可以是
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 样本的频率。或者它可以是已经初始化的 Timer 对象,用于触发 DAC 样本。有效的定时器有 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)
常量¶
- DAC.NORMAL¶
NORMAL 模式对数据缓冲区中的波形进行单次传输,
- DAC.CIRCULAR¶
CIRCULAR 模式对数据缓冲区中的波形进行传输,并在达到表格末尾时重新回到表格的开头。