Obvod DP-EPF (SK) s OZ
> | restart; |
> | with(Syrup): |
Zadání obvodu a jeho obecný přenos
> | vst_data:= TEXT( |
> | `Salen-Key`, |
> | `V1 1 0 `, |
> | `R1 1 2 1.`, |
> | `R2 2 3 1.`, |
> | `C1 2 4 1.`, |
> | `C2 3 0 .2`, |
> | `E1 4 0 3 5 A *vystup:+ -, rizeni:+ -, hodnota`, |
> | `Rk1 4 5 K-1`, |
> | `Rk2 5 0 1`, |
> | `.end`): |
> | AA:= syrup(vst_data,ac,symbolic): |
syrup: Symbolic analysis, numeric values will be ignored
parsedeck: Analyzing SPICE deck "Salen-Key" (ignoring this line)
> | Hu1:= collect(simplify(subs(AA, v[4]/V1)),[s,A],recursive,factor): |
> | Hu:= collect(simplify(subs(Rk2=1,Hu1)),s,recursive,factor): |
> | DHu:= collect(simplify(denom(Hu)/coeff(denom(Hu),s,2)),[s],recursive,factor); |
> | NHu:= collect(simplify(numer(Hu)/coeff(denom(Hu),s,2)),s,recursive,factor); |
> | 'Hu' = NHu/DHu; |
Ideální přenos
> | Hi:= collect(simplify(limit(Hu,A=infinity)),s,recursive,factor): |
> | DHi:= collect(simplify(denom(Hi)/coeff(denom(Hi),s,2)),s,recursive,factor); |
> | NHi:= collect(simplify(numer(Hi)/coeff(denom(Hi),s,2)),s,recursive,factor); |
> | 'Hi' = NHi/DHi; |
Substituce R2 = r.R1, C2 = c.C1:
> | Hi1:= collect(subs(R2=r*R1,C2=c*C1,Hi),s,recursive,factor): |
> | DHi1:= collect(simplify(denom(Hi1)/coeff(denom(Hi1),s,2)),s,recursive,factor); |
> | NHi1:= collect(simplify(numer(Hi1)/coeff(denom(Hi1),s,2)),s,recursive,factor); |
> | 'Hi1' = NHi1/DHi1; |
Porovnání s ideálním obecným přenosem DP 2.řádu
> | HDP:= h*omega0^2/(s^2+s*omega0/Q+omega0^2); |
> | XDi:= solve({omega0^2=coeff(DHi1,s,0),omega0/Q=coeff(DHi1,s,1)},{omega0,Q}); |
> | allvalues(XDi); |
> | Q1:= sqrt(c*r)/(c+1+c*r-K); |
> | K1:= collect(solve(Q=Q1,K),Q,recursive); |
Citlivosti Q1:
> | Q1RC:= subs(r=R2/R1,c=C2/C1,Q1); |
> | SQr:= collect(simplify(diff(Q1,r)*r/Q1),c,recursive,factor); |
> | SQR1:= collect(simplify(diff(Q1RC,R1)*R1/Q1RC),[K,C1],recursive,factor); |
> | SQc:= collect(simplify(diff(Q1,c)*c/Q1),c,recursive,factor); |
> | SQC1:= collect(simplify(diff(Q1RC,C1)*C1/Q1RC),[K,R1],recursive,factor); |
> | SQK:= collect(simplify(diff(Q1,K)*K/Q1),c,recursive,factor); |
> | Gamma1:= K*SQK; |
> | Gamma[QK]:= collect(simplify(subs(K=K1,Gamma1)),Q,recursive,factor); |
> | ropt := 1/18*(6*Q^2+6*Q^2*c+1+sqrt(12*Q^2+12*Q^2*c+1))/(Q^2*c); |
Návrhový blok
Vstupní návrhové parametry
> | omega[0]:= 1.25; Q:= 4.5; |
Navrh pro K=1: zadane parametry omega[0], Q, K1, C2
Volitelné parametry
> | C2:= 1; r:= 1; K:=1; |
> | cn:= 1/(4*Q^2); C1:= C2/cn; |
Uprava C1:
> | unassign('r'); |
> | C1:= 82.0; c:= C2/C1; |
> | rn:= solve(Q1=Q,r); |
> | r:= rn[2]; R1:= 1/sqrt(r*c)/C1/omega[0]; R2:= R1*r; |
Obvodové parametry:
> | 'SQK' = evalf(subs(c=c,SQK)); Gamma:= evalf(subs(c=c,Gamma1)); |
> | 'SQr'=SQr, 'SQc'=SQc; |
> | 'SQR1'=evalf(subs(C2=c*C1,R2=r*R1,SQR1)), 'SQC1'= evalf(subs(C2=c*C1,R2=r*R1,SQC1)); |
Tranzitní frekvence zesilovače pro delta(omega0) = 1%
> | delta[omega]:= 0.01; |
> | omega[t]:= omega[0]*Gamma1/2/Q/delta[omega]; |
Odnormování:
Skutečná hodnota C2 a odnormovací frekvence fN:
> | C2s:= 100e-12: |
> | fN:= 12e3: omegaN:= evalf(2*Pi*fN); |
> | RN:= C2/omegaN/C2s; |
Odnormované prvky:
> | 'C1' = C2s/c, 'C2' = C2s, 'R1' = R1*RN, 'R2' = R2*RN; |
> | 'f[t_MHz]' = evalf(omegaN*omega[t]/2/Pi/1e6); |
> |
Návrh pro min. Gamma: zadané parametry omega[0], Q, C1, C2
> | Gamma:= 'Gamma': |
> |
Volitelné parametry:
> | C1:= 8.2: C2:= 1.0: |
> | c:= C2/C1; |
> | r:= ropt; |
> | R1:= 1/sqrt(r*c)/C1/omega[0]; R2:= R1*r; |
> | K:= K1; |
Obvodové parametry:
> | 'SQK' = evalf(SQK); Gamma:= evalf(Gamma1); |
> | 'SQr'=SQr, 'SQc'=SQc; |
> | 'SQR1'=evalf(subs(C2=c*C1,R2=r*R1,SQR1)), 'SQC1'= evalf(subs(C2=c*C1,R2=r*R1,SQC1)); |
Tranzitní frekvence zesilovače pro delta(omega0) = 1%
> | delta[omega]:= 0.01; |
> | omega[t]:= omega[0]*Gamma/2/Q/delta[omega]; |
Odnormování:
Skutečná hodnota C2 a odnormovací frekvence fN:
> | C2s:= 100e-12; |
> | 'omegaN' = omegaN; RN:= C2/omegaN/C2s; |
Odnormované prvky:
> | 'C1' = C2s/c, 'C2' = C2s, 'R1' = R1*RN, 'R2' = R2*RN; |
> | 'f[t_MHz]' = evalf(omegaN*omega[t]/2/Pi/1e6); |
Konec
> |
> |