类 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()
andDAC.write_timed()
, 和用于残疾人DAC.write()
),False
完全以禁用缓存,或True
允许输出缓冲。启用缓冲后,DAC 引脚可将负载驱动至低至 5KΩ。否则,它的输出阻抗最大为 15KΩ:因此,要在没有缓冲的情况下实现 1% 的准确度,需要施加的负载小于 1.5MΩ。使用缓冲区会导致准确性下降,尤其是在接近极限范围时。
方法¶
-
DAC.
init
(bits=8, *, buffering=None)¶ 重新初始化 DAC。 位可以是 8 或 12。 缓冲可以是
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
可以是一个整数,指定写入 DAC 样本的频率,使用 Timer(6)。或者它可以是一个已经初始化的 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)