stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小

1.为什么讨论电子电位器?

为什么要讨论使用一个 DAC[1]来作为一个电位器呢?这里面主要原因如下:

使用电位器可以很方便在信号源的驱动下形成一个幅值可以调节的交流信号源。这比起使用通常的可编程直流电源,或者DAC输出电压来说,输出的是幅度可以变的交流信号源,可以用于很多的自动测量环节。

为什么不直接使用 机械电位器[2]来改变信号源的幅值呢?还是一个原因,那就是自动可编程改变信号的幅值。

2.为什么使用DAC做电位器?

DAC用作电位器改变交流信号原理;

使用DAC来分压交流信号的优点是什么?

是否能够克服前面数字电位器的频带过窄的问题?

写这些话的时候,我还不知道具体答案,下面就通过实验来验证一下吧。

02 实验电路

最近,刚刚购买了几片16bit的DAC芯片 DAC8830IDR[5](价格6.6),具有SPI接口,基于该DAC来验证一下前面的思路的可行性。

1.实验电路设计

由于DAC8830使用SPI接口来设置输出电压,使用STC8G1K(SOP16)作为控制器来完成对它的信号控制。

1)SCH [6]

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第1张图片

▲ 原理图设计

2)PCB

对于实验原理图进行LAYOUT,尽可以满足单面PCB板制作的工艺要求。快速制版之后得到对应的实验电路板。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第2张图片

▲ 实验电路板的PCB设计

2. MCU软件编程[7]

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);

}

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第3张图片

▲ DA8830的SPI读写时序

对应的DA8830的CS,SPK的波形为:

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第4张图片

▲ 示波器观察到DA8830的CS,CLK的波形

从上面波形可以看出,DAC8830Set()函数的执行时间在STC8G1K17(35MHz)执行中的时间大约为3。

在静态下,通过两个电阻组成的参考电压分压电路,生成大约2.5V的参考电压。实际测量电压为:。

a6ce3973c4de102649ec2a7c0b9250c4.png

这个数值比起前面实际测量得到的要大,这说明对应的DA8830的参考电压管脚的阻抗比起还要小。

为了便于测量数据波形,调用DA8830Set()函数中的输入参数为。那么输出电压计算值应该为:

74edfe5f88bae7da8bd44768f1b17651.png

实际测量DA8830的输出电压为:

aa7a59b6c4264412a99478252a1e7128.png

2) 输出电压波形

▲ 每1ms写入DAC8830递增数据的CS,DI数据波形

写入递增的数据,输出波形。

for(;;) {

WaitTime(1);

//----------------------------------------------------------------------

DAC8830Set(nShowCount); nShowCount += 0x200;

//----------------------------------------------------------------------

}

此时Dout输出递增的锯齿波形。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第5张图片

▲ 输出递增的锯齿波形

03 参考电压与输出信号

下面经过几组实验,来验证DAC的参考电压对于输出信号的影响。

1.参考电压的有效范围

在DAC8830的数据手册中,对于参考电压的输入范围给定的是1.25V ~ Vpp。下面通过一组实验来测试实际的有效输入参考电压范围:

下面通过在某一给定的DAC8830的设置下,给定Vref,测量对应的实际输出。将三种不同设置下的输出电压与参考电压之间的关系绘制在一起。从图中可以看到,实际上,DA8830的参考电压对于输出电压的等比例的影响范围是在整个的工作电压(0~5V)之内都有效。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第6张图片

▲ 将三种不同设置下的参考电压与输出电压绘制在一起

2.输入交变的参考电压

1)在Vref加入交流电压波形

在Vref中加入100Hz左右正弦波,设置DAC8830转换值为0x7fff,输出的电压波形如下图所示。可以看到输出(Blue)的电压波形等于Vref(Cyan)的一半。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第7张图片

▲ DAC8830的Dout(Cyan)与Vref(Blue)的波形

当设置为0xffff的时候,输入的波形就与输入一致了。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第8张图片

▲ DAC8830的Dout(Cyan)与Vref(Blue)的波形

2)输入高频方波波形

为了测试从Vref到Vout之间的频带宽度,在Vref中加入高频方波信号,观察输出的Vout的信号。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第9张图片

▲ 加入高频方波信号Vref(Blue)观察输出信号Vout(Cyan)

将波形再次展开,观察输出的过渡过程。

展开波形,对比输入输出波形,可以观察到Vref到Vout之间的带宽应该超过1MHz。按照DAC8830数据手册上关于参考电压 -3dB带宽的参数,典型值为1.3MHz。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第10张图片

▲ 加入高频方波信号Vref(Blue)与输出信号Vout(Cyan)波形

3.使用DAC对交流信号进行调幅

下面将固定的交流电压(有直流分量,使得信号始终大于零)施加在Vref,测量Vout随着DAC8830的设置值的变化情况。
施加的电压频率,幅值。

输出电压值如设置数值之间的关系为:

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第11张图片

▲ 输出电压值与设置值之间的关系

可以看到整体上输出与设置值之间的关系呈现非常好的线性关系。

注意到在曲线的一开始似乎有一些略微的非线性。下面重新采集设置值范围在(0,0x3ff)范围内的输出电压与设置值之间的关系曲线。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第12张图片

▲ 输出电压值与设置值之间的关系

可以看到在起始的时候,由于系统存在噪声,使得输出的电流电压与设定值之间存在一定的非线性。当理论输出电压小于系统地线上的噪声电压时,使用交流万用表测量得到的数值就会偏大。

下面重新对频率为

9a96ac5173c7e1e58292bf91a588ee2c.png

的信号测量输出电压与设定值之间的关系。结果与1kHz的情形相同。只是输出整体的增益下降了。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第13张图片

▲ 输出电压值与设置值之间的关系

d36e9c71a1a5a7d9cc241644d10052fb.png

增益变化了9%左右。

4.信号超量程

当输入信号的幅值超过DAC8830d的工作电压,或者低于0V,输出都会出现截止。

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第14张图片

▲ 输入信号超过+5V,低于0V的情况

结论

通过前面的实验,可以看到,使用DAC8830来当做电位器获得幅度可变的交流信号源是可行的。它具有很宽的信号带宽,并且输出信号的幅值与设置信号之间具有非常好的线性关系,只是在信号比较小的时候输出会受到系统和芯片本身的噪声影响。

当输入信号超出了DAC8830的工作电压,或者低于0V时,输出信号都会截止。所以在使用的时候,需要通过一定的信号偏置的方式将交流信号平移到始终在0~5V(DAC8830工作电压)范围之后进行调试,然后可以再通过隔直电容去掉信号中的偏移量。

本头条搭建一个交流平台,欢迎各位也分享你的行业认知,技术分享,经验之谈,欢迎留言投稿!

stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小_第15张图片

你可能感兴趣的:(stm32adc采集dac的数据_音频信号运用,数字电位器和DAC电路调节声音大小)