Ananlýza zpětnovazební soustavy

© Jiří Hospodka

soubor pro MAPLE 6

> restart;

Nejdříve načteme potřebné knihovny.

> with(Syrup):with(plots):

Warning, the name changecoords has been redefined

Budeme analyzovat vliv záporné zpětné vazby (ZZV) na některé vlastnosti soustavy, která obsahuje zesilovač se dvěma póly a odporovou zápornou zpětnou vazbu (ZZV) podle následujícího obrázku. Pro další analýzy budeme potřebovat jednak přenos celkového zapojení (se ZV) - Pzv a jednak přenos otevřené zpětnovazevbní smyčky - Pos .

[Maple OLE 2.0 Object]

Zadání soustav pro analýzu

První pól zesilovače omega1 je zadán obecně, další dva jsou na 2MHz a 4MHz. Zpětnovazební odpor Rp je také zadán obecně (bez numerické hodnoty). Ostatní prvky jsou zadány s numerickými hodnotami.

> ZZ:= "invertující zesilovač
V 1 0
R01 1 2 10E3
Rp1 2 3
Rz1 3 0 10E3
Rp2 4 5
Rz2 4 0 10E3
R02 5 0 10E3
Ra2 5 0 100E3
X1 2 3 0 zesilovac
X2 1 4 0 zesilovac
.subckt zesilovac a b c
Ra a c 100E3
Ri d b 10
E1 d c a c -500/(1+s/(2*Pi*1.6E3))/(1+s/(2*Pi*16E3))
.ends
.end":

Analýza systému pro a Rp1 = 10000

Analýza a výpočet napěťového přenosu zesilovače se ZV a otevřené ZV smyčky.

> napeti:=syrup(ZZ, ac):

> Pzv:=simplify(subs(napeti,v[3]/v[1])):

> Pos:=simplify(subs(napeti,v[5]/v[1])):

Syrup/parsedeck:   Analyzing SPICE deck "invertující zesilovač" (ignoring this line)

Modulová charakteristika zesilovače pro a Rp1 = .10e5 (zesilení přibližně 1).

> modul:=simplify(evalc(abs(subs({Rp1=10E3,s=I*omega},Pzv)))):

> semilogplot(20*log10(modul),omega=1E3..1E7,title=`MODUL`);

[Maple Plot]

Výpočet vratného rozdílu pro stejnosměrný (ss) signál a Rp1 = .10e5

> F:=subs(s=0,1-Pos):

> evalf(subs(Rp2=10e3,F));

238.7329783

Výpočet zesílení pro ss signál a Rp1 = 10000 a pro systém bez ZV (nezakončeno => nevyjde A/F hlavně díky K1).

> evalf(subs({s=0,Rp1=10e3},Pzv));

> evalf(subs(s=0,limit(Pzv,Rp1=infinity)));

-.9958092281

-454.0913632

Následuje výpočet pólů přenosu pro zadaný systém (se ZV).

> sol1:=solve(denom(subs(Rp1=10E3,Pzv)));

sol1 := -55292.03070+488075.4827*I, -55292.03070-48...

Skutečnost, že je systém nestabilní lze také jednoduše určit Laplaceovou transformací přenosu Pzv (impulzní charakteristikou).

> with(inttrans);

[addtable, fourier, fouriercos, fouriersin, hankel,...

Impulzní charakteristika obsahuje i Diracův impulz, protože výstupní odpor zesilovače není nulový (není nulvový přenos K3). Jelikož jsou póly komplexní, musí být odezva kmitavý charakter (tlumený harmonický průběh) a úhlový kmitočet oscilací se správně rovná imag. hodnotě kořenů jmenovatele přenosu Pzv (vyšlo).

> odezva:=simplify(invlaplace(subs(Rp1=10E3,Pzv),s,t));

odezva := .4754659566e-3*Dirac(t)-492502.6641*exp(-...

Že je násobná konstanta skutečně koeficientem K3 se lze přesvědčit jednoduchým výpočtem.

> K3:=Ra/(R0+Ra)*Ri*Rz/(Ri+Rz)/(R0*Ra/(R0+Ra)+Rp+Ri*Rz/(Ri+Rz));
evalf(subs({Ra=100E3,R0=10E3,Rp=10E3,Ri=10,Rz=10E3},%));

K3 := Ra*Ri*Rz/((R0+Ra)*(Ri+Rz)*(R0*Ra/(R0+Ra)+Rp+R...

.4754659567e-3

Takto pak vypadá impulzní charakteristika. Musí se samozřejmě jednat o stabilní systém (systém pouze se ZZV a dvěma póly přenosu).

> plot(odezva,t=1E-10..1E-4, title=`Impulzni charakteristika`);

[Maple Plot]

Výpočet hodnoty odporu Rp1 pro maximálně plochou modulovou charakteristiku

V předešlém případě byl analyzován systém s Rp1 = 10000 , kde modulová charakteristika vykazovala výrazný překmit. Nyní vypočtěme hodnotu zpětnovazebního odporu Rp1 tak, aby modulová chrakteristika byla právě maximálně plochá, tj. reálná i imaganární část kořenů se sobě rovnala.

Výpočet kořenů obecně:

> koreny:=solve(denom(Pzv),s);

koreny := 1/2*(-3527392000000*Pi-387587200*Pi*Rp1+3...
koreny := 1/2*(-3527392000000*Pi-387587200*Pi*Rp1+3...
koreny := 1/2*(-3527392000000*Pi-387587200*Pi*Rp1+3...

Toto samotné nevede k vyjádření reálné části.

> Re(koreny[1]);

1/2*Re((-3527392000000*Pi-387587200*Pi*Rp1+3200*sqr...

Toto už ano.

> evalc(Re(koreny[1]));

1/2*(-3527392000000*Pi-387587200*Pi*Rp1+1600*sqrt(a...
1/2*(-3527392000000*Pi-387587200*Pi*Rp1+1600*sqrt(a...

Musíme porovnávat absolutní hodnoty jednotlivých částí, jelikož nezáleží na znaménku, ale na velikosti.

> Rpp:=solve(evalc(abs(Re(koreny[1])))=evalc(abs(Im(koreny[1]))),Rp1);

Rpp := 989878790000/1112111

> evalf(Rpp);

890089.9191

Vykreslení modulových charakreristik pro Rp1 = Rpp_skut (maximálně plochá charakteristika), pro Rp1 = 10*Rpp_skut a Rp1 = Rpp_skut/10 .

> modul1:=simplify(evalc(abs(subs({Rp1=Rpp/10,s=I*omega},Pzv)))):

> modul2:=simplify(evalc(abs(subs({Rp1=Rpp,s=I*omega},Pzv)))):

> modul3:=simplify(evalc(abs(subs({Rp1=Rpp*10,s=I*omega},Pzv)))):

> i:=semilogplot(20*log10(modul1),omega=1E3..1E6,title=`MODUL`,color=green):

> j:=semilogplot(20*log10(modul2),omega=1E3..1E6,title=`MODUL`,color=red):

> k:=semilogplot(20*log10(modul3),omega=1E3..1E6,title=`MODUL`,color=blue,numpoints=200):

> display(i,j,k);

[Maple Plot]

Závislost polohy pólů zesilovače na vlivu ZV (hodnotě Rp1 , resp. vratného rozdílu F )

Výpočet pólů přenosu systému se ZV pro 3 různé hodnoty zpětnovazebího odporu ( 10*Rpp_skut, Rpp_skut, Rpp_skut/10 ).

> poly:=seq([solve(denom(subs(Rp1=R0,Pzv)),s)],R0=[Rpp*10,Rpp,Rpp/10]);

poly := [-17600*Pi+1600/990890911*sqrt(595150521954...
poly := [-17600*Pi+1600/990890911*sqrt(595150521954...
poly := [-17600*Pi+1600/990890911*sqrt(595150521954...

> barva:=[blue,red,green];

barva := [blue, red, green]

Vykreslení pólů. Je nutné sledovat póly podle barev. Stejné barvy = stejná hodnota Rp , resp. vratného rozdílu F .

> for i from 1 to 3 do
graf[i]:=complexplot(poly[i], Re=-1e5..0, style=point, title=`Poloha pólů přenosu ZV soustavy v závislosti na Rp`,color=barva[i]);
od:
display(graf[1],graf[2],graf[3]);

[Maple Plot]

Vykreslení pólů pro větší rozsah zpětnovazebního odporu.

> vv:=seq(fsolve(denom(subs({Rp1=10^(R0/4)},Pzv)),s,complex),R0=1..30):complexplot([vv], Re=-1e5..0, style=point, title=`Poloha pólů přenosu ZV soustavy v závislosti na Rp`);

[Maple Plot]

Porování kmitočtových závislostí přenosu invertujícího a neinvertujícího kompenzovaného zesilovače - vliv členu alpha na kmitočtovou závislost přenosu

[Maple OLE 2.0 Object]

Zadání prakticky stejného sesilovače jako v předchozím případě, s tím rozdílem, že je neinvertující, viz. obr.

> ZZ1:= "neinvertující zesilovač
V 1 0
R01 2 0 10E3
Rp1 2 3
Rz1 3 0 10E3
X1 1 2 3 0 zesilovac
.subckt zesilovac a b c d
Ra a b 100E3
Ri e c 10
E1 e d a b 500/(1+s/(2*Pi*1.6E3))/(1+s/(2*Pi*16E3))
.ends
.end":

Analýza a výpočet napěťového přenosu.

> napetiI:=syrup(ZZ1, ac):

> PzvI:=simplify(subs(napetiI,v[3]/v[1])):

Syrup/parsedeck:   Analyzing SPICE deck "neinvertující zesilovač" (ignoring this line)

Aby měl zesilovač zesílení rovno -1, je nutné zapojit do ZV invertujícího zesilovače odpor Rp1_1 , do ZV neinvertujícího zesilovače odpor Rp11_1 . Následuje výpočet těchto odporů.

> Rp1_1:=evalf(solve(subs(s=0,Pzv)=-1));

> Rp1_1I:=evalf(solve(subs(s=0,PzvI)=1));

Rp1_1 := 10042.17688

Rp1_1I := 20.08422949

Rp1_1I nemůže vyjít nulový díky nenuovému výst. odporu zesilovače.

Vykreslení modulových charakteristik neinvertujícího zesilovače "bez ZV" (není korektně zakončeno, ale chyba zde nebude patrná), neinvertujícího a invertujícího zesilovače s napěťovým přenosem 1. Invertující zesilovač s patrným rozdílem především díky rozdílnému členu K1 .

> modul1I:=simplify(evalc(abs(subs(s=I*omega,limit(Pzv1,Rp1=infinity))))):

> modul2I:=simplify(evalc(abs(subs({Rp1=Rp1_1,s=I*omega},Pzv)))):

> modul3I:=simplify(evalc(abs(subs({Rp1=Rp1_1I,s=I*omega},PzvI)))):

> semilogplot([20*log10(modul1I),20*log10(modul2I),20*log10(modul3I)],omega=1E4..1E7,title=`MODUL`,color=[red,green,blue],numpoints=200);

[Maple Plot]

Lze ještě další vlivy (na kmit. vlastnosti - dodělat, na změnu zesílení)