close all clear clc % Vb_vect = [1:1:10]; % MODEL for 2n2222a transistor STR1='.MODEL 2n2222a NPN (IS=2.20f NF=1.00 BF=240 VAF=114'; STR2='+ IKF=0.293 ISE=2.73p NE=2.00 BR=4.00 NR=1.00'; STR3='+ VAR=24.0 IKR=0.600 RE=0.194 RB=0.777 RC=77.7m'; STR4='+ XTB=1.5 CJE=24.9p VJE=1.10 MJE=0.500 CJC=12.4p VJC=0.300'; STR5='+ MJC=0.300 TF=371p TR=64.0n EG=1.12 )'; TransistorModelSTR=sprintf('%s\n%s\n%s\n%s\n',STR1, STR2, STR3, STR4); % % MODEL for BC108BP transistor % STR1='.MODEL BC108BP NPN IS =1.8E-14 ISE=5.0E-14 NF =.9955 NE =1.46 BF =400 BR =35.5'; % STR2='+IKF=.14 IKR=.03 ISC=1.72E-13 NC =1.27 NR =1.005 RB =.56 RE =.6 RC =.25 VAF=80'; % STR3='+VAR=12.5 CJE=13E-12 TF =.64E-9 CJC=4E-12 TR =50.72E-9 VJC=.54 MJC=.33'; % TransistorModelSTR=sprintf('%s\n%s\n%s\n',STR1, STR2, STR3); figure % Print instructions for ii = 1:numel(Vb_vect) fid = fopen('netlist_test_transistor.net', 'w'); % Write title fprintf(fid, 'Transistor test\n') % Write transistor model fprintf(fid, '%s\n', TransistorModelSTR); % Write netlist fprintf(fid, 'V1 1 0 12\n') fprintf(fid, 'Rc 1 2 100\n') fprintf(fid, 'Q1 2 3 0 2n2222a\n') fprintf(fid, 'Rb 3 4 27000\n') fprintf(fid, 'V2 4 0 %f\n', Vb_vect(ii)) fprintf(fid, '.control\n') fprintf(fid, 'dc V1 0.01 12 0.01\n') fprintf(fid, 'wrdata result (v(1)-v(2))/100 v(2) (v(4)-v(3))/27000\n') fprintf(fid, 'quit\n') fprintf(fid, '.endc\n') fprintf(fid, '.end\n') fclose(fid); % Run spice system('ngspice netlist_test_transistor.net'); % Now load and plot the data dd = load('result.data'); % Extract data ib = dd(:,6); ic = dd(:,2); vce = dd(:,4); hold on plot(vce, ic*1000, 'k', 'linewidth', 2) text(vce(end), ic(end)*1000, [num2str(ib(end)*1e6), ' uA']) xlabel('Vce [V]') ylabel('Ic [mA]') end