100 REM linop.BAS Copyright 1989 by Russell Kincaid 110 REM Kincaid Engineering, Savage Road, Milford, NH 03055 120 REM VERSION 1.0 WRITTEN 9/22/1989 130 CLS 140 PRINT "**********************************************************************" 150 PRINT" THIS PROGRAM GENERATES A SPICE DECK THAT DESCRIBES AN OP AMP CIRCUIT" 160 PRINT" Written by: Russ Kincaid, Milford, NH 03055" 170 PRINT:PRINT" This is shareware, see the file README.DOC" 180 PRINT"**********************************************************************" 190 PRINT:PRINT 200 ISD=1E-12 : P=3.14162 : RGB= 1000 : V=.02585 : R1=1000 210 INPUT"WHAT IS THE INTERNAL COMPENSATION CAPACITOR IN PF :";C2 220 IF C2<=0 THEN PRINT :PRINT "MUST BE GREATER THAN ZERO":GOTO 210 230 PRINT:PRINT"USE CAPITAL LETTERS ONLY":PRINT 240 INPUT"CAN AN EXTERNAL COMPENSATION CAPACITOR BE ATTACHED ";EXT$ 250 IF EXT$="N" OR EXT$="NO" THEN 270 260 INPUT"IS IT CONNECTED FROM 1 PIN TO GND (1), OR BETWEEN TWO PINS (2) ";COMP 270 INPUT"POSITIVE SLEW RATE IN V/US :";S 280 INPUT"NEGATIVE SLEW RATE IN V/US :";SN 290 INPUT"INPUT BIAS CURRENT :";IB 300 INPUT"INPUT OFFSET CURRENT :";IOS 310 INPUT"NPN (1) OR PNP (2) AT INPUT";NPN 320 INPUT"INPUT OFFSET VOLTAGE :";VOFF 330 INPUT"GAIN IN DB (1) OR VOLTS/MV (2) ";Y 340 IF Y=1 THEN 360 350 INPUT"DC VOLTAGE GAIN IN V/MV ";A:A=A*1000: ADB=8.686*LOG(A) : GOTO 370 360 INPUT"DC VOLTAGE GAIN IN DB :";ADB : A=EXP(ADB/8.686) 370 INPUT"FIRST CUT FREQUENCY (1) OR ZERO dB FREQUENCY (2) ";Y 380 IF Y>2 OR Y<1 THEN PRINT" ONE OR TWO, DUMMY!":PRINT:GOTO 370 390 ON Y GOTO 400, 420 400 INPUT"FIRST CUT FREQUENCY (HZ)";F3DB 410 W0=2*P*F3DB*(10^(ADB/20))/1000000! : GOTO 440 420 INPUT"ZERO DB FREQUENCY AS IF SINGLE CUT (IN mHZ)";F0 430 F3DB=F0/(10^(ADB/20))*1000000! : W0=2*P*F0 440 W3DB=2*P*F3DB 450 R2=1/W3DB/C2*1000000! : REM R2 IN MEGOHMS 460 INPUT"DIFFERENTIAL INPUT RESISTANCE IN MEGHOMS :";RIN 470 INPUT"DIFFERENTIAL INPUT CAPACITANCE IN PF " ;CIN 480 INPUT"COMMON-MODE INPUT RESISTANCE IN MEGOHMS (ZERO IF NOT SPECIFIED) :";RCM 490 IF RCM=0 THEN 510 500 RCM= RCM-RIN/4 510 INPUT"PHASE MARGIN (1) OR 2ND CUT FREQ (2)";D 520 ON D GOTO 530,580 530 INPUT"PHASE MARGIN IN DEGREES :";PM :PM=PM*P/180 540 INPUT"ACTUAL 0dB FREQUENCY IN mHZ";F0:W0=2*P*F0 550 XC2=1/W0/C2 : P2=ATN(R2/XC2) 560 P3=P-P2-PM 570 XC3=RGB/TAN(P3) : C3=1/XC3/W0*1000000! : GOTO 600 : REM C3 IN PF 580 INPUT"2ND CUT FREQ (MHZ) ";F2 590 C3=1/2/P/RGB/F2*1000000! : REM PICOFARADS 600 INPUT"OUTPUT RESISTANCE AT LOW FREQUENCY :";ROUT : L1=0 610 REM ****** END OF OP AMP PARAMETER INPUT ****** 620 RS=R2*(1-1/1000) 630 VSLEWP=S*RS*C2-V*LOG(C2*S/ISD) 640 VSLEWN=SN*RS*C2-V*LOG(C2*SN/ISD) 650 IB1=IB+IOS/2 : IB2=IB-IOS/2 660 INPUT"WHAT WILL YOU NAME THIS MODEL : ";SUBNAM$ 670 A1=ASC(LEFT$(SUBNAM$,1)) 680 IF A1<65 OR A1 > 122 THEN PRINT"NAME MUST BEGIN WITH A LETTER":GOTO 660 690 NAM$=SUBNAM$+".MDL" 700 OPEN NAM$ FOR OUTPUT AS #1 710 PRINT#1,"" 720 IF EXT$="N" OR EXT$="NO" THEN 740 730 ON COMP GOTO 760,780 740 PRINT#1,".SUBCKT ";SUBNAM$;" 1 2 3 " 750 PRINT#1,"*** -IN +IN OUT V+ V- *** " :GOTO 800 760 PRINT#1,".SUBCKT ";SUBNAM$;" 1 2 3 7 " 770 PRINT#1,"*** -IN +IN OUT V+ V- COMP ***" :GOTO 800 780 PRINT#1,".SUBCKT ";SUBNAM$;" 1 2 3 7 12 " 790 PRINT#1,"*** -IN +IN OUT V+ V- COMP1 COMP2 ***" 800 PRINT#1,".MODEL DG D RS=1 IS=";ISD 810 PRINT#1,"VOFF 2 4 ";VOFF 820 K=RIN/2 830 PRINT#1,"RIN1 4 11 ";STR$(K)+"MEG" 840 PRINT#1,"RIN2 11 1 ";STR$(K)+"MEG" 850 IF RCM=0 THEN 880 860 K=RCM-RIN/4 : GOSUB 1230 870 PRINT#1,"RCM 11 0 ";STR$(K)+"MEG" 880 IF NPN=1 THEN 910 890 PRINT#1,"IB2 0 1 ";IB2 900 PRINT#1,"IB1 0 4 ";IB1 : GOTO 930 910 PRINT#1,"IB2 1 0 ";IB2 920 PRINT#1,"IB1 4 0 ";IB1 930 IF C1=0 THEN 950 940 PRINT#1,"C1 1 4 ";STR$(CIN)+"PF" 950 K=A:GOSUB 1230 960 PRINT#1,"EA 5 0 4 1 ";K 970 K=R2*(1-1/1000):GOSUB 1230 980 PRINT#1,"R2 6 7 ";STR$(K)+"MEG" 990 N$=STR$(C2)+"PF" 1000 IF COMP<2 THEN 1030 1010 PRINT#1,"C2 7 12 ";N$ 1020 PRINT#1,"VC2 12 0 0" : GOTO 1040 1030 PRINT#1,"C2 7 0 ";N$ 1040 PRINT#1,"D3 6 9 DG" 1050 PRINT#1,"D4 8 6 DG" 1060 K=R2/1000:GOSUB 1230 1070 PRINT#1,"R22 5 6 ";STR$(K)+"MEG" 1080 PRINT#1,"VSLEWP 9 0 ";VSLEWP 1090 PRINT#1,"VSLEWN 0 8 ";VSLEWN 1100 PRINT#1,"GB 0 10 7 0 .001" 1110 PRINT#1,"RGB 10 0 1K" 1120 K=C3 : GOSUB 1230 1130 PRINT#1,"C3 10 0 ";STR$(K)+"PF" 1140 K=GCM : GOSUB 1230 1150 PRINT#1,"GOUT 0 3 10 0 ";1/ROUT 1160 PRINT#1,"ROUT 3 0 ";ROUT 1170 PRINT#1,".ENDS ";SUBNAM$ 1180 PRINT#1,"**********" 1190 CLOSE#1 1200 PRINT:PRINT"USE TYPE COMMAND TO VIEW THE FILE ";NAM$ 1210 GOTO 1330 1220 REM ROUNDOFF ROUTINE 1230 IF K=0 THEN RETURN 1240 IF ABS(K)<1 THEN 1280 1250 FOR T=0 TO 8 : K2=K/10^T 1260 IF ABS(K2)<10 THEN 1310 1270 NEXT T : PRINT "ERROR":STOP 1280 FOR T=0 TO 8 : K2=K*10^T 1290 IF ABS(K2)>1 THEN 1320 1300 NEXT T : PRINT"ERROR": STOP 1310 K=10^T*INT(K2*1000+.5)/1000 : RETURN 1320 K=INT(K2*1000+.5)/1000/10^T : RETURN 1330 END