详解PWM实现DAC原理

预备知识

首先,我们先回顾一下,周期信号傅里叶级数展开,三角傅里叶级数展开的展开式如下:
f ( t ) = a 0 2 + a 1 cos ⁡ ( w t ) + b 1 sin ⁡ ( w t ) + a 2 cos ⁡ ( 2 w t ) + b 2 sin ⁡ ( 2 w t ) + ⋯ + a n cos ⁡ ( k w t ) + b n sin ⁡ ( k w t ) f(t) = \frac{a_0}{2}+a_1\cos(wt)+b_1\sin(wt)+a_2\cos(2wt)+b_2\sin(2wt)+\cdots+a_n\cos(kwt)+b_n\sin(kwt) f(t)=2a0+a1cos(wt)+b1sin(wt)+a2cos(2wt)+b2sin(2wt)++ancos(kwt)+bnsin(kwt)
简写为,
f ( t ) = a 0 2 + ∑ k = 1 ∞ a k cos ⁡ ( k w t ) + b k sin ⁡ ( k w t ) f(t)=\frac{a_0}{2}+\sum^{\infty}_{k=1}a_k\cos(kwt)+b_k\sin(kwt) f(t)=2a0+k=1akcos(kwt)+bksin(kwt)

其中 T T T为周期, k k k为谐波次数, w = 2 π T w=\frac{2\pi}{T} w=T2π为角频率。

展开式中的傅里叶系数如下:
{ a 0 = 2 T ∫ t 0 t 0 + T f ( t )   d t a k = 2 T ∫ t 0 t 0 + T f ( t ) cos ⁡ ( k w t )   d t b k = 2 T ∫ t 0 t 0 + T f ( t ) sin ⁡ ( k w t )   d t \begin{cases} a_0=\frac{2}{T}\int_{t_0}^{t_0+T}{f(t)} \,{\rm d}t\\ a_k=\frac{2}{T}\int_{t_0}^{t_0+T}{f(t)\cos(kwt)} \,{\rm d}t\\ b_k=\frac{2}{T}\int_{t_0}^{t_0+T}{f(t)\sin(kwt)} \,{\rm d}t\\ \end{cases} a0=T2t0t0+Tf(t)dtak=T2t0t0+Tf(t)cos(kwt)dtbk=T2t0t0+Tf(t)sin(kwt)dt

奇函数和偶函数的傅里叶级数可以做一下简化,这里直接给出结论,下面的推导中会用到。

1.函数为奇函数,那么傅里叶系数 a 0 = 0 a_0=0 a0=0 a k = 0 a_k=0 ak=0,傅里叶级数展开式即为 f ( t ) = a 0 2 + ∑ k = 1 ∞ b k sin ⁡ ( k w t ) f(t)=\frac{a_0}{2}+\sum^{\infty}_{k=1}b_k\sin(kwt) f(t)=2a0+k=1bksin(kwt),也称为正弦级数;

2.函数为偶函数,那么傅里叶系数 b k = 0 b_k=0 bk=0,傅里叶级数展开式即为 f ( t ) = a 0 2 + ∑ k = 1 ∞ a k cos ⁡ ( k w t ) f(t)=\frac{a_0}{2}+\sum^{\infty}_{k=1}a_k\cos(kwt) f(t)=2a0+k=1akcos(kwt),也称为余弦级数。

矩形波做傅里叶级数展开

现在我们要对任意占空比的PWM波做傅里叶级数展开,先把PWM写成分段函数的形式,

x ( t ) = { V H k N ≤ t ≤ n T + k N T V L k N + n T ≤ t ≤ N T + k N T x(t) = \begin{cases} V_H & kN \leq t \leq nT+kNT \\ V_L & kN+nT \leq t \leq NT+kNT \\ \end{cases} x(t)={VHVLkNtnT+kNTkN+nTtNT+kNT
其中k为谐波次数,高电平电压记为 V H V_H VH,低电平记为 V L V_L VL,n高电平寄存器计数值,N周期寄存器计数值,则有占空比 D = n N D=\frac{n}{N} D=Nn

这里把PWM矩形波作为偶函数分析,用一下上一节提到的奇偶函数的性质,则有,
a k = 2 T ∫ − D T / 2 D T / 2 x ( t ) cos ⁡ ( k w t )   d t a_k=\frac{2}{T}\int_{-DT/2}^{DT/2}{x(t)\cos(kwt)} \,{\rm d}t ak=T2DT/2DT/2x(t)cos(kwt)dt

化简可得,
a k = 4 T ( V H − V L ) ∫ 0 D T / 2 cos ⁡ ( k w t )   d t = 4 T ( V H − V L ) T 2 π k sin ⁡ ( k 2 π D T ) ∣ 0 D T / 2 = 2 ( V H − V L ) k π sin ⁡ ( k D π ) a_k=\frac{4}{T}(V_H-V_L)\int_{0}^{DT/2}{\cos(kwt)} \,{\rm d}t=\left. \frac{4}{T}(V_H-V_L)\frac{T}{2\pi k}\sin(k\frac{2\pi D}{T}) \right| _{0}^{DT/2}=\frac{2(V_H-V_L)}{k\pi}\sin(kD\pi) ak=T4(VHVL)0DT/2cos(kwt)dt=T4(VHVL)2πkTsin(kT2πD)0DT/2=kπ2(VHVL)sin(kDπ)

上式带入可得三角傅里叶级数展开式,
f ( t ) = [ D ( V H − V L ) ] + 2 V H − V L π sin ⁡ ( n N π ) cos ⁡ ( 2 π T t ) + 2 V H − V L k π ∑ k = 2 ∞ sin ⁡ ( k n π N ) cos ⁡ ( k 2 π T t ) f(t)=[D(V_H-V_L)]+2\frac{V_H-V_L}{\pi}\sin(\frac{n}{N}\pi)\cos(\frac{2\pi}{T}t)+2\frac{V_H-V_L}{k\pi}\sum^{\infty}_{k=2}{\sin(k\frac{n\pi}{N})\cos(k\frac{2\pi}{T}t)} f(t)=[D(VHVL)]+2πVHVLsin(Nnπ)cos(T2πt)+2kπVHVLk=2sin(kNnπ)cos(kT2πt)

第一项, [ D ( V H − V L ) ] [D(V_H-V_L)] [D(VHVL)]为直流分量;

第二项, 2 V H − V L π sin ⁡ ( n N π ) cos ⁡ ( 2 π T t ) 2\frac{V_H-V_L}{\pi}\sin(\frac{n}{N}\pi)\cos(\frac{2\pi}{T}t) 2πVHVLsin(Nnπ)cos(T2πt)为基波分量(也叫一次谐波分量),可得到基波频率 f = 1 T f=\frac{1}{T} f=T1,就是PWM矩形波的频率;

第三项, 2 V H − V L k π ∑ k = 2 ∞ sin ⁡ ( k n π N ) cos ⁡ ( k 2 π T t ) 2\frac{V_H-V_L}{k\pi}\sum^{\infty}_{k=2}{\sin(k\frac{n\pi}{N})\cos(k\frac{2\pi}{T}t)} 2kπVHVLk=2sin(kNnπ)cos(kT2πt)为高次谐波分量,各次谐波频率 f = k T f=\frac{k}{T} f=Tk,由此可见高次谐波频率都是基波的整数倍。

有了上面推导分析,我们可以很容易的知道,第一项的直流分量是随着占空比 D D D线性变化的,如果我们要用PWM波当做DAC使用,那么我们只需要通过低通滤波器滤掉谐波分量就可实现了。

滤波器设计

既然只要保留直流分量,设计一个RC低通滤波器就可以了。那么怎么知道滤波器的设计参数呢?

首先我们计算一下DAC的分辨率,分辨率与周期寄存器计数值N有关,这里假设N=1024,根据下面公式计算可得分辨率为10位。
分 辨 率 = log ⁡ 2 N = log ⁡ 2 1024 = 10 分辨率=\log _2 N=\log _2 1024=10 =log2N=log21024=10
在10位分辨率条件下,我们要求一次谐波对输出电压的影响不要超过1个位的精度,即有 3.3 / 1024 = 0.0032 V 3.3/1024=0.0032V 3.3/1024=0.0032V

这里我们假设使用的是 3.3 V 3.3V 3.3V系统, V H = 3.3 V V_H=3.3V VH=3.3V V L = 0 V V_L=0V VL=0V,那么一次谐波的最大值为 2 ∗ 3.3 / π = 2.1 V 2*3.3/\pi=2.1V 23.3/π=2.1V,就可以计算出RC滤波电路至少需要提供 − 20 l g ( 2.1 / 0.0032 ) = − 56 d B -20lg(2.1/0.0032)=-56dB 20lg(2.1/0.0032)=56dB的衰减。

每衰减 20 d B 20dB 20dB,频率下降10倍,那么就可以计算出截止频率的下限为 f c = f p w m / 1 0 56 20 f_c=f_{pwm}/10^{\frac{56}{20}} fc=fpwm/102056,假设 f p w m = 8 K H z f_{pwm}=8KHz fpwm=8KHz,则有 f c = 8000 / 630.96 = 12.679 H z f_c=8000/630.96=12.679Hz fc=8000/630.96=12.679Hz

有了截止频率下限,根据截止频率公式,
f c = 1 2 π τ f_c=\frac{1}{2\pi\tau} fc=2πτ1

τ = R C = 1 2 π f c \tau=RC=\frac{1}{2\pi f_c} τ=RC=2πfc1

就可以计算出RC时间常数 τ \tau τ,然后选择合适的 R C RC RC参数完成滤波器设计。

关于RC低通滤波截止频率公式推导过程可以看另外一篇文章,RC低通滤波器截止频率公式推导。

你可能感兴趣的:(算法,硬件工程)