互补PWM输出低通滤波

PWM互补抵消电路

  • 基于STM32通过PWM滤波输出模拟电压
  • Cancel PWM DAC ripple with analog subtraction

 

01 补PWM


一、前言

  在这篇网络博文中,  给出了利用反相器实现PWM滤波波纹抵消目的。  通常情况下, 使用RC 低通滤波器将PWM波形转换成平滑的模拟量。 但其中存在着波动。  需要合理的选择RC滤波常数,  使得滤波后信号的平滑性 与 信号快速相应之间达到平衡。  如果使用反相器, 获得一个原来信号的反相PWM信号, 通过RC滤波之后叠加在原来信号上,  这样便可以获得更加平滑的滤波效果。  下面我们推导一下输出信号与RC参数之间的关系。

互补PWM输出低通滤波_第1张图片

二、反相信号叠加

  为了便于推导,  将PWM信号使用正弦波替代。 输出信号实际上是由两个相互反相正弦波通过阻容网络叠加产生。 根据现行电路叠加原理, 输出信号可以看成两个电压源独立作用下产生输出的叠加。  先考虑 sin(Ωt) 作用下产生的输出,    利用阻容分压公式, 推导出 O1 公式。  然后在考虑 负 sin(Ωt) 产生的结果,  经过推导,  给出 O2 的表达式。  最后的输出等于 O1 减去 O2。  这样便可以得到输出电压与输入电压之间的传递函数。

互补PWM输出低通滤波_第2张图片

O ( ω ) = 1 + j ω ( C 2 R 2 − C 2 R 1 ) 1 − C 1 C 2 R 1 R 2 ω 2 + j ω ( C 1 R 1 + C 2 R 1 + C 2 R 2 ) O\left( \omega \right) = {{1 + j\omega \left( {C_2 R_2 - C_2 R_1 } \right)} \over {1 - C_1 C_2 R_1 R_2 \omega ^2 + j\omega \left( {C_1 R_1 + C_2 R_1 + C_2 R_2 } \right)}} O(ω)=1C1C2R1R2ω2+(C1R1+C2R1+C2R2)1+(C2R2C2R1)

 

  结 ※


  据实验结果,  当两个电阻阻值相同,  两个电容相同时,  输出交流分量最小。  关于这部分的证明, 之后在进行分析。 不过我们可以得到一个结论, 那就是 电容C2, 电阻 R1,R2 只出现在分子中的虚部, 因此, 分子永远不可能为 0, 这说明这个电路无法实现对输出交流分量的完全抵消。

互补PWM输出低通滤波_第3张图片

O ( j ω ) = 1 1 − ( C 1 R 1 ω ) 2 + j 3 ω R 1 C 1 O\left( {j\omega } \right) = {1 \over {1 - \left( {C_1 R_1 \omega } \right)^2 + j3\omega R_1 C_1 }} O()=1(C1R1ω)2+j3ωR1C11

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2024-02-05
#
# Note:
#============================================================

from headm import *
from sympy                  import symbols,simplify,expand,print_latex
from sympy                  import *

#------------------------------------------------------------
o,t = symbols('omega,t')
R1,C1,R2,C2 = symbols('R1,C1,R2,C2')

RC22 = R2+1/(I*o*C2)
RC12 = RC22*(1/(I*o*C1))/(RC22+1/(I*o*C1))
O1 = RC12/(RC12+R1)

R11 = R1*(1/(I*o*C1))/(R1+1/(I*o*C1))
O2 = R11/(R11+RC22)

O3 = 1/(I*o*C1)/(R1+1/(I*o*C1))



result = simplify(O1-O2)


#------------------------------------------------------------
print_latex(result)
_=tspexecutepythoncmd("msg2latex")
clipboard.copy(str(result))





#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

■ 相关文献链接:

  • 基于STM32通过PWM滤波输出模拟电压-CSDN博客
  • Cancel PWM DAC ripple with analog subtraction

你可能感兴趣的:(科学-技术-探究,人工智能,开发语言,单片机,嵌入式硬件)