昨天写了一篇关于STM32的板载运算放大器的文章,其中自己说到了STM32无法直接处理负信号电压,这点在这里修正一下,无法直接处理不代表不能处理(这里也是本人芯片手册没看全,擅自下了定论)
本期我们就来介绍一下STM32G474RE中如何利用板载运算放大器放大不带偏置的交流信号(负电压)。
首先根据STM32G474的芯片手册,其运算放大器具有非常多的功能,由许多的多路复用器进行选择。
其部分运算放大器同向输入端可以连接至板载数模转换器,关于这两路DAC(STM32G474RE中总共有四个DAC)
可以看到DAC3和DAC4是没有直接的GPIO连接的,但是我们它可以连接至OPAMP的同相输入端,这使得我们可以通过OPAMP的跟随器(Follower)来将其输出。
同样的,本期我们想要处理负输入端的信号我们也要用到OPAMP的同向输入端接入DAC的这个特性,我们使用DAC的输出作为一个偏置构成一个反向比例放大电路。
具体的配置电路图在手册中说明了,其中的VINP留出(我们将其配置为连接到DAC),我们的信号从VINM(反相输入端)输入,其遵守以下的公式。
所以我们的输出公式则是成为一个带直流偏置的反向比例放大器。 接着让我们来实际操作一遍。
首先我们打开DAC的通道输出,但是这里并没有直接的GPIO来测试是否正常。
接着我们设置为PGA的反向放大,并且将同相输入端接入DAC的输出引脚。 配置我们的工程其他内容。
HAL_OPAMP_Start(&hopamp4);
HAL_DAC_Start(&hdac4,DAC_CHANNEL_1); HAL_DAC_SetValue(&hdac4,DAC_CHANNEL_1,DAC_ALIGN_12B_R,4095/2);
在工程中开启我们的运算放大器以及DAC,设置DAC的输出,这里我将DAC输出设置为1.665V,由于我们的反向输出端空置,因此此时电路的作用等价于跟随器。输出端输出电压为DAC电压。
由于我们配置的放大倍数是2 or -1;放大倍数是-1即电阻Rf和R相等,因此 Vout = 2 * Vd – Vin
。所以我们配置DAC的输出电压为四分之一的参考电压,这样子让可以让Vout的偏置电压为参考电压的一半。 接着测试我们的运算放大器。
可以看到我们做到了一个带偏置的反相放大器,其放大倍数为1。 接着我们测试高放大倍数比例放大器。
HAL_OPAMP_Start(&hopamp4);
HAL_DAC_Start(&hdac4,DAC_CHANNEL_1); HAL_DAC_SetValue(&hdac4,DAC_CHANNEL_1,DAC_ALIGN_12B_R,4095/15);
我们将直流偏置调整为原来的三十二分之一,之后调整PGA放大倍数为16倍。
可以看到,我们将一个峰峰值为100mv的信号放大-15倍,之后输出波形也非常的完美。
最后我们测试其最大的放大倍数。
我们将一个峰峰值20mv的信号放大-63倍,这里由于示波器性能问题(我这个信号线也不是特别好)所以通道二的信号看起来很差,但是输出信号却非常的好。