AC交流采样方案

/**----------------------------------------------------------------------
  * @name:   AC交流采样方案
  *----------------------------------------------------------------------
  * @brief:  这里提供一个方案参考,这个方案适合个人制作几个自己使用,不适合
  *			用于批量生产,其中有点问题是没有正常解决的,但是不影响使用,如
  *			有佬知道怎么解决还请在评论区或者私信告诉我,万分感谢!!!
  *-----------------------------------------------------------------------
  * @Author: 海上的船
  *-----------------------------------------------------------------------
  * @Date:   2025.6.6
  *-----------------------------------------------------------------------
  */

1.总概

  • 之前我们已经成功对交流电压实现了降压,这样我们的开环就完成了
  • 但是我们需要将buck实现在不同的带载情况下也能输出稳定电压
  • 所以我们现在要将输出的电压信息传回给stm32,从而通过调整占空比实现输出稳定电压
  • 这里将分为两个部分,分别是电路部分和代码部分

2.电路部分

我这里将使用输入为36V有效值,频率为50Hz的,经过buck后我们将得到32V-2V有效值,频率为50Hz的信号作为例子,来讲解这个交流采样的方案,这个方案是通用的,各位可以根据自己的情况从而进行适当的改变

我们需要考虑隔离问题,如果直接将信号只是通过分压和偏置供给stm32,这个行为是很危险的,容易让stm32的工作出现异常,所以我们不得不考虑隔离,而这里选择的隔离方案是通过互感器实现隔离,但是这出现了一个新的问题,就是当我们为空载的情况下,互感器对于输出带载而言是一个感性负载,这很容易让我们无法得到正确的电压信号,所以我们通过在输出信号上接电阻,然后再小电阻上接互感器实现隔离,这样对应我们buck电路的拓扑来说,很大程度上来说这依旧是一个阻性负载,至于后面就是通过运放实现分压和加偏置将处理后的信号供给stm32。


2.1 信号分压

  • 采用9.1k和1k电阻进行分压

    • 使电压最大值 45.25V ≈ 32V * 1.414,降为约±4.5V内
    • 让其在空载情况下也保持为阻性负载
  • 在1k电阻上并联一个合适电容滤波,我这里选择的是680nF的电容,电容不建议太大,太大容易引起波形失真


2.2 隔离互感器ZMPT107-1

  • 采用型号为ZMPT107-1互感器

  • 根据其数据手册我们可以知道它的额定输入电流为2mA,这很重要,很多互感器工作不正常的原因就是其输入的额定电流错误,根据我的实际使用的时候发现这个2mA貌似是最大输入电流,但是电流大于2mA的时候波形容易出现失真
    互感器技术参数

  • 同样的这是数据手册给出的典型应用方案,但是当我把GND接上去后不管怎么弄都是会出现波形失真,所以我在设计的时候是忽略了这个GND的,这也是我在上面说的没有解决的问题,我们的设计需要按照它来我这边的设置的R’为2.4k,R为3.9k;从理论上来说选择R’=R是比较方便于计算的,但是可能是由于GND没接,这个值并不是预想中的U1 = U2,虽然说这个倍数无法计算,但是我们后面选择去测量可以得到正确值

  • 如果波形出现失真变成类似于三角波的情况,可以适当增大R’试试
    典型应用电路


2.3 交流电路

分压后的电压为有效值约0.2V-3.2V的交流信号

即最高电压为4.52V,最低电压-4.52V

我们需要将电压抬上去,用模电的说法就是让交流骑在直流上,同时让电压保持在ADC采样范围内

  1. 交流采样电路

    • 这里我们选择GS6002SR这块运放芯片

    • 电路原理图(来自于GS6002的芯片手册)
      GS6002典型应用电路

    • 为了方便计算,我们选择让R1=R3,R2=R4,现在我的电压为±4.52V我们给Vin输入VOUT_H,Vip输入VOUT_L,当Vin为负,而Vip为正得到9.04V*R2/R1,而我们的电压要在0-3.3V所以我们的交流电压在骑在3.3V的一半即1.65V比较好,不过不用这么严苛,我们可以适当的调整,我选择的是1.56V,Vref的设计在下面的第2点,这里先说R1R2的取值,从理论上来说R1为9.1k,R2为1k,可以得到很不错的波形,但是实际用这个值的不对,根据我的实践,我选择了R1 = R2 = 5.1k,这样stm32就可以成功采集到电压

  2. Vref提供电路

    我们需要的电压为1.5V左右,我们可以选择使用gs6002中的另一块运放来提供(一块gs6002中两个运放)

    可得电压为Vref = 5V * (10k / 32k) = 1.5625V
    Vref电路

  3. RC滤波

    经历实践,我们会发现产生的信号有很多毛刺,所以我们通过第一个1k和10uF滤大毛刺,通过第二个1k和10nF滤小毛刺
    RC滤波电路


2.4 原理图

原理图


2.5 PCB

注意的是交流信号容易对其他信号产生影响,所以我没有全铺铜,而是只铺铜了后面一小节
PCB


3.波形展示及计算

这是30Vrms输入时,我们这个模块的输出波形,我们可以直接利用这个波形的峰峰值算出我们模块输出的有效值,不过这里我们选择用其他方法30Vrms_直流
这是我将示波器的耦合设置为交流的波形,这样我们就可以利用示波器直接帮我们算出其中交流信号的有效值(均方根值),这里只是一组数据,我们应该多测量一些不同的输入电压来算我们这个模块的缩小倍数,我的这个算出的是:Vout / Vin ≈ 0.0110125
30Vrms_交流

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐