为了将PWM信号转成直流,需要利用低通滤波器滤除PWM信号中的高次谐波信号。
多阶RC低通滤波是一种比较常用的方法,如下图的二阶RC滤波电路:

用于PWM转直流的二阶RC滤波电路
拉普拉斯变换
单位阶跃信号定义为:

单位阶跃信号
其拉普拉斯变换定义为:

单位阶跃信号的拉普拉斯变换
如果PWM信号的高电平为VH,当输出高电平时,输出信号的拉普拉斯变换为:
电容C3,C4在频域下的阻抗分别为以及
,得到频域下的等效电路和参数:

频率下的电路和参数
Octave符号运算
当输入信号时,根据频域下的电路,可以计算出电容C4两端的电压。
涉及到分式多项式的运算,运算量大,容易算错。
可以使用Octave的符号运算快速得到结果。
Symbolic符号运算包需要用到Python的SymPy库。
在Octave的命令行窗口,运行pkg install -forge symbolic,下载symbolic符号运算包,
再运行pkg load symbolic,加载symbolic符号运算包。
运行以下脚本:
syms R3 R4 C3 C4 s VH ZC4=1/(C4*s);%电容C4的阻抗 ZC3=1/(C3*s);%电容C3的阻抗 Z1=R4+ZC4;%Z1为R4与C4串联 Z2=ZC3*Z1/(ZC3+Z1);%Z2为C3与Z1并联 Vo=VH/s*Z2/(Z2+R3)*ZC4/Z1;%C4两端的电压为Z2与R3分压之后,再由C4与R4分压 simplify(Vo)%化简符号表达式

Octave符号运行过程
得到电容C4两端电压Vo(s)为:
(式1)
拉普拉斯逆变换
假设分别为方程
的两个根,
则根据韦达定理,有:
而可以表示为:
对于形如的多项式,
可以转换为:
左右两边同时乘以s,得到,
在上式中,令s=0,得到:
左右两边同时乘以之后,令
,得到:
同样得到,
所以,
根据拉普拉斯的逆变换,

常见的拉普拉斯变换对
得到,C4两端的电压在时域的表达式为:
(式2)
PWM输出直流的纹波分析
当R3=R4=10kΩ,C3=C4=1uF时,
分别是以下方程的两个根,
的两个根,
根据求根公式,得到,
的两个根,
假设,
当PWM的频率为800Hz时,占空比为100%时,充电的最长时间为1.25ms,
此时,最大为-38.2*1.25ms=-0.04775<1,
而最大为-261.8*1.25ms=-0.32725<1,

常见函数的泰勒公式展开
将函数,
用泰勒公式展开,并保留至第二项;
得到:
,
,
代入式2,得到:
(式3)
当考虑PWM输出一段时间之后,PWM在切换到高电平的瞬间,电容C4已经有一定的电压U0,则式1应该加到电容C4的初始电压,再经过拉普拉斯逆变换,得到,
--对于电容初始电压不为0的情况,此处分析有误,在另一篇文章的再做详细分析。

充电波形
当高电平为5V,占空比为50%时,纹波大小为: