Difference between revisions of "Symbolsk løsning av nodeligninger med Matlab"

m (Updated for newer Matalb versions (tested on R2020b))
m
Line 29: Line 29:
 
% 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, 2015
+
% 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=sym('(Vo-V1)/Zc+gm*V1+Vo/R2+Vo*s*C2=0');
+
eq1=(Vo-V1)/Zc+gm*V1+Vo/R2+Vo*s*C2==0;
eq2=sym('(V1-Vo)/Zc+V1*s*C1+V1/R1+Is=0');
+
eq2=(V1-Vo)/Zc+V1*s*C1+V1/R1+Is==0;
eq1=subs(eq1,Zc,'1/(s*C)');
+
eq1=subs(eq1,Zc,1/(s*C));
eq2=subs(eq2,Zc,'1/(s*C)');
+
eq2=subs(eq2,Zc,1/(s*C));
  
solV1=solve(eq2,V1);
+
disp('Solve for Vo and V1 and calculate Vo/Is with capacitor only in feedforward loop');
eq3=subs(eq1,V1,solV1);
+
solved=solve(eq1,eq2,Vo,Is);
SolVo=simplify(solve(eq3,[Vo]));
+
VoOnIs=solved.Vo/solved.Is;
disp('With capacitor only in feedforward loop');
+
pretty(simplify(VoOnIs));
pretty(simplify(SolVo/Is));
 
  
 
%% With series resistor and capacitor in feedforward loop
 
%% With series resistor and capacitor in feedforward loop
eq1=sym('(Vo-V1)/(Zc+Rz)+gm*V1+Vo/R2+Vo*s*C2=0');
+
eq1=(Vo-V1)/(Zc+Rz)+gm*V1+Vo/R2+Vo*s*C2==0;
eq2=sym('(V1-Vo)/(Zc+Rz)+V1*s*C1+V1/R1+Is=0');
+
eq2=(V1-Vo)/(Zc+Rz)+V1*s*C1+V1/R1+Is==0;
eq1=subs(eq1,Zc,'1/(s*C)');
+
eq1=subs(eq1,Zc,1/(s*C));
eq2=subs(eq2,Zc,'1/(s*C)');
+
eq2=subs(eq2,Zc,1/(s*C));
  
solV1=solve(eq2,V1);
+
disp('Solve for Vo and V1 and calculate Vo/Is with resistor and capacitor in feedforward loop');
eq3=simplify(subs(eq1,V1,solV1));
+
solved=solve(eq1,eq2,Vo,Is);
SolVo=solve(eq3,[Vo]);
+
VoOnIs=solved.Vo/solved.Is;
disp('With series resistor and capacitor in feedforward loop');
+
pretty(simplify(VoOnIs));
pretty(simplify(SolVo/Is));
 
 
</pre>
 
</pre>

Revision as of 13:13, 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
% Only Cgd is considered (Zc)
% Kjetil Ullaland

syms s C Vin Vo Vgs Zc gm Rl Rs R Av Avo

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*C));
eq2=subs(eq2,Zc,1/(s*C));
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));