分析建立误差的高效方法是:首先列出系统传递的 时域微分方程,然后使用 单边拉普拉斯变换 将其变为 线性方程 求解后,再用反拉普拉斯变换到时域;求解过程可以利用 Mathematica 工具中的 LaplaceTransform[expr,s,t]
和 InverseLaplaceTransform[expr,t,s]
。
虽然 单边拉普拉斯变换 可以自动包含系统储能器件的初始状态,但是电路设计中我们的系统我们总是有确定的初态(比如表现为共模电压或者静态工作点),因此我们只需要求解系统的 零状态响应,忽略 零输入响应。
本文只分析了一阶系统的建立误差,对于设计者半定量地去指导设计已经足够了。高阶系统的响应 Mathematica 或许勉强可以求出符号解 ,不过更合适的方式是:直接求数值解或者利用电路仿真工具。
对于DC信号一阶系统的的输出响应我们非常熟悉,1−e−t/τ,对于给定分辨率系统建立到 LSB/2 所需要的建立时间如下:
System Resolution (bit) |
Target Settling Error E=0.5/2bit |
Settling Time Needed N=(Ts/2)/τ |
10 |
0.5/210 |
7.6 |
12 |
0.5/212 |
9.0 |
16 |
0.5/216 |
12.8 |
18 |
0.5/218 |
13.2 |
24 |
0.5/220 |
17.3 |
对于变化的信号,比如正弦信号和斜坡信号,情况将会变得复杂起来。因为相比直流信号的 输入初值即为理想终值,变化的信号需要额外考虑其 初始相位 和采样/跟随期间的 实时变化。
对于不同的信号,衡量误差的方式是不一样的:
- 对于直流信号,显而易见,要求绝对的建立误差;
- 对于正弦信号,比如AC应用下的AD采样系统,我们通常关注的是失真(THD),而不是绝对幅值的衰减;
- 对于斜坡信号,通常应用于 Single/Dual-Slop ADC中,同样需要关注其绝对建立误差。
对于一阶系统,根据基尔霍夫定理可以得到
Rvin(t)−vc(t)RC1vin(t)τ1vin(t)=Cdtdvc(t)=RC1vc(t)+dtdvout(t)=τ1vc(t)+dtdvout(t)(1)
时域微分方程求解比较困难,简单的方式时通过 单边 Laplace 变换 后,将其变成线性方程后求解
τ1Vin(s)=τ1Vc(s)+sVc(s)−vc(0−)Vin(s)=Vc(s)(1+sτ)−τvc(0−)(2)
单边 Laplace 变换可以自动代入初值,这是通过其基本的定义所决定的特性:对公式(1)求拉普拉斯变换,并利用分部积分法 Integration-by-Parts#2 Definite Integral 可以得到
L{dtdvc(t)}=∫0−∞dtdvc(t)e−stdt=−[vc(t)e−st]−0∞−∫0−∞vc(t)(e−st)′dt=−vc(0)−(−s)∫0−∞vc(t)e−stdt=sVc(s)−vc(0−)
对于一个 DC 输入信号,0-之前为0,之后恒为1,那么可以用 STEP 信号表示
vdc(t)=Au(t)(3)
这个信号经过 Laplace 变换后,得到
Vdc(s)=sA(4)
ClearAll["Global`*"]
LaplaceTransform[HeavisideTheta[t], t, s]
认为电容上的初始电压 vc(0−)=0 将输入信号代入方程(2),得到
Vin(s)Vc(s)=Vc(s)(1+sτ)−τvc(0−)=sA1+sτ1(5)
求 Inverse-Laplace 变换后,得到时域的响应
vc(t)=A(1−e−t/τ)(6)
ClearAll["Global`*"]
eq = A/(s*\[Tau]) == 1/\[Tau]*v + s*v;
answer = Solve[eq, v]
InverseLaplaceTransform[answer[[1, 1, 2]], s, t]
建立误差为
ve(t)=AA−A(1−e−t/τ)=e−t/τ=e−N(7)
这里,我们认为用于信号建立的时间 t,只占周期 Ts 的一半,占了 N 个 τ,即 t=Ts/2=Nτ
如果输入信号如下
vsine(t)=Acos(ωt+φ)(8)
Lapace变换后得到
Vsine(s)=s2+ω2A(scosφ+ωsinφ)(9)
将输入信号代入方程(2),可以得到
Vin(s)s2+ω2A(scosφ+ωsinφ)=Vc(s)(1+sτ)−vc(0)=Vc(s)(1+sτ)(10)
求解后得到
Vc(s)=1+sτ1s2+ω2A(scosφ+ωsinφ)(11)
求解 Inverse-Laplace 变换后得到
vc(t)=−A1+(ωτ)2cosφ+ωτsinφe−t/τ+A1+(ωτ)2cos(ωt+φ)+ωτsin(ωt+φ)(12)
ClearAll["Global`*"]
vint = A*Cos[\[Omega]*t + \[CurlyPhi]];
vins = LaplaceTransform[vint, t, s]
eq = vins == vos*(1 + s*\[Tau]);
vosAns = Solve[eq, vos][[1, 1, 2]] // FullSimplify
vot = InverseLaplaceTransform[vosAns, s, t] // FullSimplify
如果令
tanθ=1ωτ(14)
那么有如下表达式
sinθ=1+(ωτ)2ωτcosθ=1+(ωτ)21(15)
代入到式(11),再利用 Sum-to-Product-Identities 可以得到
vc(t)=−A1+(ωτ)2cosθcosφ+sinθsinφe−t/τ+A1+(ωτ)2cosθcos(ωt+φ)+sinθsin(ωt+φ)=−A1+(ωτ)2cos(φ−θ)e−t/τ+A1+(ωτ)2cos(ωt+φ−θ)(16)
- Initial Transient:理解这里的第一项 φ 是初态,θ 是相位延迟,这部分初态误差随时间衰减 e−t/τ ,呈指数衰减,与DC阶跃响应的建立误差非常相似。
- Steady Response:即使时间无限长,因为输入信号总是再变化,那么总有 θ 的相位延迟,以及在此基础上的幅值衰减。需要注意的是,幅值衰减的 1/1+(ωτ)2 是与输入信号频率相关的,输入信号越快,衰减越大。
忽略了相位延迟的建立误差为:
ve=1−1+(ωτ)21(1−e−t/τ)=1−1+(Nπfsfin)21(1−e−N)(17)
这里,我们认为用于信号建立的时间 t,只占周期 Ts 的一半,占了 N 个 τ,即 t=Ts/2=Nτ
如果输入信号如下
vramp(t)=A(t−t0)(18)
Lapace变换后得到
Vramp(s)=s2A+sAt0(19)
经过一阶RC响应后,再求 Inverse-Laplace 变换后得到
Vc(s)vc(t)=(s2A+sAt0)1+sτ1=Aτe−t/τ+A(t−τ)+At0(1−e−t/τ)(20)
虽然,这里的第二项 A(t−τ) 中的 τ 偏向于认为相位延迟误差,但是总的建立误差为
ve=τ−τe−t/τ+t0e−t/τ=2NTs(1−e−N)+t0e−N(21)
这里,我们认为用于信号建立的时间 t,只占周期 Ts 的一半,占了 N 个 τ,即 t=Ts/2=Nτ