01缘起
为什么要讨论电子电位器?
为什么要讨论使用一个作为电位器呢?主要原因如下:
- 在信号源的驱动下,使用电位器可以很容易地形成振幅值可调的交流信号源。与使用通常的可编程直流电源或DAC在输出电压方面,输出是范围可变的交流信号源,可用于许多自动测量环节。
- 为什么不直接使用?改变信号源的振幅值?另一个原因是信号的振幅值自动可编程。
- 现在有数字电位器,比如,等等,为什么不用它们来实现正确改变幅值怎么样?其中一个主要原因是设备1问题。与机械电位器相比,这些电子电位器(变阻器)工作频带宽度相对较窄,不适合高频信号。
▲ 重要的人,不能忘记的人,不想忘记的人,你是谁?
2.为什么要用?DAC做电位器?
- DAC用作电位器改变交流信号的原理是什么?
- 使用DAC分压交流信号的优点是什么?
- 能否克服前数字电位器频带过窄的问题?
利用DAC当做通过改变交流信号的振幅,可以进行相关讨论 来看到。
写这些话的时候,我还不知道具体的答案。让我们通过实验来验证它们。
02构建基础实验电路
最近刚买了几片16bit的DAC芯片(价格6.6),具有SPI基于此的界面DAC验证以前想法的可行性。
1.实验电路设计
由于DAC8830使用SPI接口来设置输出电压,使用STC8G1K(SOP16)作为控制器完成其信号控制。
1)SCH 2
▲ 原理图设计
2)PCB
实验原理图LAYOUT,尽量满足单面PCB板材生产工艺要求。快速制版后,获得相应的实验电路板。
▲ 实验电路板PCB设计
2.MCU软件编程3
▲ 单片机硬件配置
调试串口的波特率:460800
1) DA8830访问子程序
使用STC8G的SPI端口对DA8830访问。DA8830的SPI读写时序,相应的DAC8830写入转换(16bit)数据子程序为:
void DAC8830Set(unsigned int nDAC) {
OFF(DAC8830_CS); SPISendChar((unsigned char)(nDAC >> 8)); SPISendChar((unsigned char)nDAC); ON(DAC8830_CS); }
▲ DA8830的SPI读写时序
对应的DA8830的CS,SPK的波形为:
▲ 观察到
示波器DA8830的CS,CLK的波形
从上面的波形可以看出,DAC8830Set()函数的执行时间在STC8G1K17(35MHz)执行时间约为3 3.2 μ s 3.2\mu s 3.2μs。
在静态下,通过两个 R r 1 = 510 Ω R_{r1} = 510\Omega Rr1=510Ω电阻组成的参考电压分压电路,生成大约2.5V的参考电压。实际测量电压为: V r e f = 2.419 V V_{ref} = 2.419V Vref=2.419V。 根据DA8830数据手册,DAC8830的参考电压输入阻抗大约为: R D A 8830 V r e f = 9 k Ω R_{DA8830Vref} = 9k\Omega RDA8830Vref=9kΩ。因此,理论计算所得到的参考电压为: V r e f = + 5 V × R D A 8330 V r e f R D A 8330 + R r 1 / 2 = 5 ∗ 9000 9000 + 510 / 2 = 4.862 V V_{ref} = + 5V \times { {R_{DA8330Vref} } \over {R_{DA8330} + R_{r1} /2}} = { {5*9000} \over {9000 + 510/2}} = 4.862V Vref=+5V×RDA8330+Rr1/2RDA8330Vref=9000+510/25∗9000=4.862V 这个数值比起前面实际测量得到的 V r e f V_{ref} Vref要大,这说明对应的DA8830的参考电压管脚的阻抗比起 9 k Ω 9k\Omega 9kΩ还要小。
为了便于测量数据波形,调用DA8830Set()函数中的输入参数为 N 1 = 0 x 5555 N_1 = 0x5555 N1=0x5555。那么输出电压计算值应该为: V o u t = N 1 0 x f f f f × V r e f = 0 x 5555 0 x f f f f × 2.419 = 0.806 V V_{out} = { {N_1 } \over {0xffff}} \times V_{ref} = { {0x5555} \over {0xffff}} \times 2.419 = 0.806V Vout=0xffffN1×Vref=0xffff0x5555×2.419=0.806V 实际测量DA8830的输出电压为: V o u t = 0.821 V V_{out} = 0.821V Vout=0.821V。
2) 输出电压波形
▲ 每1ms写入DAC8830递增数据的CS,DI数据波形
写入递增的数据,输出波形。
for(;;) {
WaitTime(1);
//----------------------------------------------------------------------
DAC8830Set(nShowCount);
nShowCount += 0x200;
//----------------------------------------------------------------------
}
此时Dout输出递增的锯齿波形。
▲ 输出递增的锯齿波形
03参考电压对DAC输出信号的影响
下面经过几组实验,来验证DAC的参考电压对于输出信号的影响。
1.参考电压的有效范围
在DAC8830的数据手册中,对于参考电压的输入范围给定的是1.25V ~ Vpp。下面通过一组实验来测试实际的有效输入参考电压范围:
下面通过在某一给定的DAC8830的设置下,给定Vref,测量对应的实际输出。下面依次在给定0x7fff(半量程),0xffff(全量程)以及0xfff下输出电压与参考电压之间的关系。
▲ DAC8830Set(0x7fff)时的Vref与Vout之间的关系
ref=[0.00,0.10,0.21,0.31,0.41,0.51,0.61,0.72,0.82,0.92,1.02,1.12,1.22,1.33,1.43,1.53,1.63,1.73,1.84,1.94,2.04,2.14,2.24,2.35,2.45,2.55,2.65,2.75,2.85,2.95,3.06,3.16,3.26,3.36,3.46,3.56,3.66,3.77,3.87,3.97,4.07,4.17,4.28,4.38,4.48,4.58,4.68,4.78,4.89,4.99]
out=[0.00,0.05,0.10,0.16,0.21,0.26,0.31,0.36,0.41,0.46,0.51,0.56,0.61,0.66,0.71,0.77,0.82,0.87,0.92,0.97,1.02,1.07,1.12,1.17,1.22,1.27,1.32,1.37,1.42,1.47,1.53,1.58,1.63,1.68,1.73,1.78,1.83,1.88,1.93,1.98,2.03,2.08,2.13,2.18,2.23,2.29,2.34,2.39,2.44,2.49]
▲ DAC8830Set(0xffff)时的Vref与Vout之间的关系
ref=[0.00,0.10,0.21,0.31,0.41,0.51,0.61,0.72,0.82,0.92,1.02,1.12,1.22,1.33,1.43,1.53,1.63,1.73,1.84,1.94,2.04,2.14,2.24,2.34,2.44,2.55,2.65,2.75,2.85,2.95,3.05,3.15,3.25,3.36,3.46,3.56,3.66,3.76,3.86,3.96,4.07,4.17,4.27,4.37,4.47,4.57,4.68,4.78,4.88,4.98]
out=[0.01,0.11,0.21,0.31,0.41,0.51,0.62,0.72,0.82,0.92,1.02,1.12,1.22,1.33,1.43,1.53,1.63,1.73,1.83,1.93,2.04,2.14,2.24,2.34,2.44,2.54,2.64,2.74,2.84,2.94,3.04,3.15,3.25,3.35,3.45,3.55,3.65,3.75,3.85,3.96,4.05,4.16,4.26,4.36,4.46,4.56,4.66,4.76,4.87,4.97]
▲ DAC8830Set(0xfff)时的Vref与Vout之间的关系
ref=[0.00,0.10,0.21,0.31,0.41,0.51,0.61,0.72,0.82,0.92,1.02,1.12,1.23,1.33,1.43,1.53,1.63,1.74,1.84,1.94,2.04,2.14,2.24,2.35,2.45,2.55,2.65,2.75,2.85,2.95,3.05,3.15,3.25,3.36,3.46,3.56,3.66,3.76,3.86,3.97,4.07,4.17,4.27,4.37,4.47,4.57,4.68,4.78,4.88,4.98]
out=[0.00,0.01,0.01,0.02,0.03,0.03,0.04,0.05,0.05,0.06,0.07,0.07,0.08,0.08,0.09,0.10,0.10,0.11,0.12,0.12,0.13,0.13,0.14,0.15,0.15,0.16,0.17,0.17,0.18,0.19,0.19,0.20,0.20,0.21,0.22,0.22,0.23,0.24,0.24,0.25,0.26,0.26,0.27,0.27,0.28,0.29,0.29,0.30,0.31,0.31]
下面是将前面三种不同设置下的输出电压与参考电压之间的关系绘制在一起。从图中可以看到,实际上,DA8830的参考电压对于输出电压的等比例的影响范围是在整个的工作电压(0~5V)之内都有效。
▲ 将三种不同设置下的参考电压与输出电压绘制在一起
2.输入交变的参考电压
1)在Vref加入交流电压波形
在Vref中加入100Hz左右正弦波,设置DAC8830转换值为0x7fff,输出的电压波形如下图所示。可以看到输出(Blue)的电压波形等于Vref(Cyan)的一半。
▲ DAC8830的Dout(Cyan)与Vref(Blue)的波形
当设置为0xffff的时候,输入的波形就与输入一致了。
▲ DAC8830的Dout(Cyan)与Vref(Blue)的波形
2)输入高频方波波形
为了测试从Vref到Vout之间的频带宽度,在Vref中加入高频方波信号,观察输出的Vout的信号。
▲ 加入高频方波信号Vref(Blue)观察输出信号Vout(Cyan)
将波形再次展开,观察输出的过渡过程。
展开波形,对比输入输出波形,可以观察到Vref到Vout之间的带宽应该超过1MHz。按照DAC8830数据手册上关于参考电压 -3dB带宽的参数,典型值为1.3MHz。
▲ 加入高频方波信号Vref(Blue)与输出信号Vout(Cyan)波形
3.使用DAC对交流信号进行调幅
下面将固定的交流电压(有直流分量,使得信号始终大于零)施加在Vref,测量Vout随着DAC8830的设置值的变化情况。 施加的电压频率 f 1 = 998 H z f_1 = 998Hz f1=998Hz,幅值 V p − p = 3.0 V V_{p - p} = 3.0V Vp−p=3.0V。
输出电压值如设置数值之间的关系为:
▲ 输出电压值与设置值之间的关系
可以看到整体上输出与设置值之间的关系呈现非常好的线性关系。
注意到在曲线的一开始似乎有一些略微的非线性。下面重新采集设置值范围在(0,0x3ff)范围内的输出电压与设置值之间的关系曲线。
▲ 输出电压值与设置值之间的关系
可以看到在起始的时候,由于系统存在噪声,使得输出的电流电压与设定值之间存在一定的非线性。当理论输出电压小于系统地线上的噪声电压时,使用交流 标签: r1216电位器r9011电位器电位器的103