Symbolsk løsning av nodeligninger med Matlab: Difference between revisions
From ift
m Updated for newer Matalb versions (tested on R2020b) |
m Added calculation for all capacitors |
||
(One intermediate revision by the same user not shown) | |||
Line 3: | Line 3: | ||
% Using Kirchoff's current law (KCL) on a source follower configuration | % Using Kirchoff's current law (KCL) on a source follower configuration | ||
% to find Vo as a function of Vin | % to find Vo as a function of Vin | ||
% Kjetil Ullaland, 2020 | |||
% Kjetil Ullaland | |||
syms s | syms s Cdg Cgs Cds Vin Vo Vgs Zc gm Rl Rs R Av Avo | ||
%% | |||
disp('Only Cgd with series resistor is considered (Zc)') | |||
eq1=(Vo-Vgs)/(R+Zc)+gm*Vgs+Vo/Rl == 0; | eq1=(Vo-Vgs)/(R+Zc)+gm*Vgs+Vo/Rl == 0; | ||
eq2=(Vgs-Vo)/(R+Zc)+(Vgs-Vin)/Rs == 0; | eq2=(Vgs-Vo)/(R+Zc)+(Vgs-Vin)/Rs == 0; | ||
eq1=subs(eq1,Zc,1/(s* | eq1=subs(eq1,Zc,1/(s*Cdg)); | ||
eq2=subs(eq2,Zc,1/(s* | eq2=subs(eq2,Zc,1/(s*Cdg)); | ||
disp('KCL for circuit node 1:'); | |||
pretty(eq1); | |||
disp('KCL for circuit node 2:'); | |||
pretty(eq2); | |||
disp('Solve for Vo and Vin and calculate Av (Vo/Vin):'); | |||
solved=solve(eq1,eq2,Vo,Vin); | |||
Av=solved.Vo/solved.Vin; | |||
pretty(simplify(Av)); | |||
pretty(subs(Av,Rl*gm,Avo)); | |||
%% | |||
disp('All MOST capasitors are considered') | |||
syms s Cdg Cgs Cds Vin Vo Vgs gm Rl Rs Av Avo | |||
eq1=(Vo-Vgs)*s*Cdg + gm*Vgs + Vo/Rl + Vo*s*Cds == 0; | |||
eq2=(Vgs-Vin)/Rs + Vgs*s*Cgs + (Vgs-Vo)*s*Cdg == 0; | |||
disp('KCL for circuit node 1:'); | disp('KCL for circuit node 1:'); | ||
pretty(eq1); | pretty(eq1); | ||
Line 29: | Line 49: | ||
% Using Kirchoff's current law (KCL) on single transistor stage, fig. 9.18 | % Using Kirchoff's current law (KCL) on single transistor stage, fig. 9.18 | ||
% to find Vo as a function of Is | % to find Vo as a function of Is | ||
% Kjetil Ullaland, | % Kjetil Ullaland, 2020 | ||
syms Vo V1 s gm R1 R2 C C1 C2 Is Zc Rz; | syms Vo V1 s gm R1 R2 C C1 C2 Is Zc Rz; | ||
%% With feedforward capacitor | %% With feedforward capacitor | ||
eq1= | eq1=(Vo-V1)/Zc+gm*V1+Vo/R2+Vo*s*C2==0; | ||
eq2= | eq2=(V1-Vo)/Zc+V1*s*C1+V1/R1+Is==0; | ||
eq1=subs(eq1,Zc, | eq1=subs(eq1,Zc,1/(s*C)); | ||
eq2=subs(eq2,Zc, | eq2=subs(eq2,Zc,1/(s*C)); | ||
disp('Solve for Vo and V1 and calculate Vo/Is with capacitor only in feedforward loop'); | |||
solved=solve(eq1,eq2,Vo,Is); | |||
VoOnIs=solved.Vo/solved.Is; | |||
pretty(simplify(VoOnIs)); | |||
pretty(simplify( | |||
%% With series resistor and capacitor in feedforward loop | %% With series resistor and capacitor in feedforward loop | ||
eq1= | eq1=(Vo-V1)/(Zc+Rz)+gm*V1+Vo/R2+Vo*s*C2==0; | ||
eq2= | eq2=(V1-Vo)/(Zc+Rz)+V1*s*C1+V1/R1+Is==0; | ||
eq1=subs(eq1,Zc, | eq1=subs(eq1,Zc,1/(s*C)); | ||
eq2=subs(eq2,Zc, | eq2=subs(eq2,Zc,1/(s*C)); | ||
disp('Solve for Vo and V1 and calculate Vo/Is with resistor and capacitor in feedforward loop'); | |||
solved=solve(eq1,eq2,Vo,Is); | |||
VoOnIs=solved.Vo/solved.Is; | |||
pretty(simplify(VoOnIs)); | |||
pretty(simplify( | |||
</pre> | </pre> |
Latest revision as of 11:39, 23 September 2020
Using Kirchoff's current law (KCL) on a source follower configuration to find Vout as a function of Vin
% Using Kirchoff's current law (KCL) on a source follower configuration % to find Vo as a function of Vin % Kjetil Ullaland, 2020 syms s Cdg Cgs Cds Vin Vo Vgs Zc gm Rl Rs R Av Avo %% disp('Only Cgd with series resistor is considered (Zc)') eq1=(Vo-Vgs)/(R+Zc)+gm*Vgs+Vo/Rl == 0; eq2=(Vgs-Vo)/(R+Zc)+(Vgs-Vin)/Rs == 0; eq1=subs(eq1,Zc,1/(s*Cdg)); eq2=subs(eq2,Zc,1/(s*Cdg)); disp('KCL for circuit node 1:'); pretty(eq1); disp('KCL for circuit node 2:'); pretty(eq2); disp('Solve for Vo and Vin and calculate Av (Vo/Vin):'); solved=solve(eq1,eq2,Vo,Vin); Av=solved.Vo/solved.Vin; pretty(simplify(Av)); pretty(subs(Av,Rl*gm,Avo)); %% disp('All MOST capasitors are considered') syms s Cdg Cgs Cds Vin Vo Vgs gm Rl Rs Av Avo eq1=(Vo-Vgs)*s*Cdg + gm*Vgs + Vo/Rl + Vo*s*Cds == 0; eq2=(Vgs-Vin)/Rs + Vgs*s*Cgs + (Vgs-Vo)*s*Cdg == 0; disp('KCL for circuit node 1:'); pretty(eq1); disp('KCL for circuit node 2:'); pretty(eq2); disp('Solve for Vo and Vin and calculate Av (Vo/Vin):'); solved=solve(eq1,eq2,Vo,Vin); Av=solved.Vo/solved.Vin; pretty(simplify(Av)); pretty(subs(Av,Rl*gm,Avo));
Using Kirchoff's current law (KCL) on single transistor stage, fig. 9.18 to find Vo as a function of Is
% Using Kirchoff's current law (KCL) on single transistor stage, fig. 9.18 % to find Vo as a function of Is % Kjetil Ullaland, 2020 syms Vo V1 s gm R1 R2 C C1 C2 Is Zc Rz; %% With feedforward capacitor eq1=(Vo-V1)/Zc+gm*V1+Vo/R2+Vo*s*C2==0; eq2=(V1-Vo)/Zc+V1*s*C1+V1/R1+Is==0; eq1=subs(eq1,Zc,1/(s*C)); eq2=subs(eq2,Zc,1/(s*C)); disp('Solve for Vo and V1 and calculate Vo/Is with capacitor only in feedforward loop'); solved=solve(eq1,eq2,Vo,Is); VoOnIs=solved.Vo/solved.Is; pretty(simplify(VoOnIs)); %% With series resistor and capacitor in feedforward loop eq1=(Vo-V1)/(Zc+Rz)+gm*V1+Vo/R2+Vo*s*C2==0; eq2=(V1-Vo)/(Zc+Rz)+V1*s*C1+V1/R1+Is==0; eq1=subs(eq1,Zc,1/(s*C)); eq2=subs(eq2,Zc,1/(s*C)); disp('Solve for Vo and V1 and calculate Vo/Is with resistor and capacitor in feedforward loop'); solved=solve(eq1,eq2,Vo,Is); VoOnIs=solved.Vo/solved.Is; pretty(simplify(VoOnIs));