10 REM SMALLOP.BAS Copyright 1989 by Russell Kincaid 20 REM Kincaid Engineering, Savage Road, Milford, NH 03055 30 REM VERSION 1.1 WRITTEN 9/1/1989, REVISED 9/24/89 AND 5/15/94 40 CLS 50 PRINT "**********************************************************************" 60 PRINT" THIS PROGRAM GENERATES A SPICE DECK THAT DESCRIBES AN OP AMP CIRCUIT" 70 PRINT" Written by: Russ Kincaid, Milford, NH 03055" 80 PRINT:PRINT" This is shareware, see the file README.DOC" 90 PRINT"**********************************************************************" 100 PRINT:PRINT 110 ISD=1E-12 : P=3.14162 : RGB= 1000 : V=.02585 : R1=1000 120 INPUT"WHAT IS THE INTERNAL COMPENSATION CAPACITOR IN PF :";C2 130 IF C2<=0 THEN PRINT :PRINT "MUST BE GREATER THAN ZERO":GOTO 120 140 PRINT:PRINT"USE CAPITAL LETTERS ONLY":PRINT 150 INPUT"CAN AN EXTERNAL COMPENSATION CAPACITOR BE ATTACHED ";EXT$ 160 IF EXT$="N" OR EXT$="NO" THEN 180 170 INPUT"IS IT CONNECTED FROM 1 PIN TO GND (1), OR BETWEEN TWO PINS (2) ";COMP 180 INPUT"POSITIVE SLEW RATE IN V/US :";S 190 INPUT"NEGATIVE SLEW RATE IN V/US :";SN 200 INPUT"INPUT BIAS CURRENT :";IB 210 INPUT"INPUT OFFSET CURRENT :";IOS 220 INPUT"INPUT OFFSET VOLTAGE :";VOFF 230 INPUT"GAIN IN DB (1) OR VOLTS/MV (2) ";Y 240 IF Y=1 THEN 260 250 INPUT"DC VOLTAGE GAIN IN V/MV ";A:A=A*1000: ADB=8.686*LOG(A) : GOTO 270 260 INPUT"DC VOLTAGE GAIN IN DB :";ADB : A=EXP(ADB/8.686) 270 INPUT"FIRST CUT FREQUENCY (1) OR ZERO dB FREQUENCY (2) ";Y 275 IF Y>2 OR Y<1 THEN PRINT" ONE OR TWO, DUMMY!":PRINT:GOTO 270 280 ON Y GOTO 290, 310 290 INPUT"FIRST CUT FREQUENCY (HZ)";F3DB 300 W0=2*P*F3DB*(10^(ADB/20))/1000000! : GOTO 330 310 INPUT"ZERO DB FREQUENCY AS IF SINGLE CUT (IN mHZ)";F0 320 F3DB=F0/(10^(ADB/20))*1000000! : W0=2*P*F0 330 W3DB=2*P*F3DB 340 R2=1/W3DB/C2*1000000! : REM R2 IN MEGOHMS 350 INPUT"DIFFERENTIAL INPUT RESISTANCE IN MEGHOMS :";RIN 360 INPUT"DIFFERENTIAL INPUT CAPACITANCE IN PF (CANNOT BE ZERO) " ;CIN 370 INPUT"COMMON-MODE INPUT RESISTANCE IN MEGOHMS (ZERO IF NOT SPECIFIED) :";RCM 380 IF RCM=0 THEN 400 390 RCM= RCM-RIN/4 400 INPUT"PHASE MARGIN (1) OR 2ND CUT FREQ (2)";D 410 ON D GOTO 420,460 420 INPUT"PHASE MARGIN IN DEGREES :";PM :PM=PM*P/180 425 INPUT"ACTUAL 0dB FREQUENCY IN mHZ";F0:W0=2*P*F0 430 XC2=1/W0/C2 : P2=ATN(R2/XC2) 440 P3=P-P2-PM 450 XC3=RGB/ABS(TAN(P3)) : C3=1/XC3/W0*1000000! : GOTO 480 : REM C3 IN PF 460 INPUT"2ND CUT FREQ (MHZ) ";F2 470 C3=1/2/P/RGB/F2*1000000! : REM PICOFARADS 480 INPUT"STANDBY POWER DISSAPATION :";PD 490 PRINT " AT VCC = ";:INPUT VCC : PRINT" AT VEE = ";:INPUT VEE 500 RP=((VCC-VEE)^2)/(PD-VCC*2*IC*.000001-ABS(VEE*IEE*.000001)) 560 INPUT"OUTPUT RESISTANCE AT LOW FREQUENCY :";ROUT : L1=0 570 PRINT:PRINT"IF THE MAX OUTPUT SWING IS VCC-X TO VEE+Y, WHAT ARE:" 580 INPUT" X = ";VC: VOLP=VC+V*LOG(S*C2/ISD) 590 INPUT" Y = ";VE: VOLN=VE+V*LOG(SN*C2/ISD) 650 REM ****** END OF OP AMP PARAMETER INPUT ****** 660 RS=R2*(1-1/1000) 670 VSLEWP=S*RS*C2-V*LOG(C2*S/ISD) 680 VSLEWN=SN*RS*C2-V*LOG(C2*SN/ISD) 690 IB1=IB+IOS/2 : IB2=IB-IOS/2 700 INPUT"WHAT WILL YOU NAME THIS MODEL : ";SUBNAM$ 710 A1=ASC(LEFT$(SUBNAM$,1)) 720 IF A1<65 OR A1 > 122 THEN PRINT"NAME MUST BEGIN WITH A LETTER":GOTO 700 730 NAM$=SUBNAM$+".MDL" 740 OPEN NAM$ FOR OUTPUT AS #1 750 PRINT#1,"" 760 IF EXT$="N" OR EXT$="NO" THEN 780 770 ON COMP GOTO 800,820 780 PRINT#1,".SUBCKT ";SUBNAM$;" 2 24 21 20 12" 790 PRINT#1,"*** -IN +IN OUT V- V+ *** " :GOTO 840 800 PRINT#1,".SUBCKT ";SUBNAM$;" 2 24 21 20 12 11" 810 PRINT#1,"*** -IN +IN OUT V- V+ COMP ***" :GOTO 840 820 PRINT#1,".SUBCKT ";SUBNAM$;" 2 24 21 20 12 27 28" 830 PRINT#1,"*** -IN +IN OUT V- V+ COMP1 COMP2 ***" 840 PRINT#1,".MODEL DG D RS=1 IS=";ISD 844 PRINT#1,"* USE .NODESET V(IN)=0 V(OUT)=0 880 PRINT#1,"VOFF 2 1 ";VOFF 900 PRINT#1,"VS1 10 13 ";VSLEWP 910 PRINT#1,"VS2 13 8 ";VSLEWN 915 PRINT#1,"D3 8 7 DG" 920 PRINT#1,"D2 7 10 DG" 930 K=RIN/2 940 PRINT#1,"RIN1 1 5 ";STR$(K)+"MEG" 950 PRINT#1,"RIN2 5 24 ";STR$(K)+"MEG" 960 IF RCM=0 THEN 990 970 K=RCM-RIN/4 : GOSUB 1440 980 PRINT#1,"RCM 5 13 ";STR$(K)+"MEG" 990 PRINT#1,"RP1 12 13 " ;RP/2 : PRINT#1,"RP2 13 20 ";RP/2 1020 PRINT#1,"RO 21 23 ";ROUT 1030 PRINT#1,"IB2 24 0 ";IB2 1040 PRINT#1,"IB1 1 0 ";IB1 1050 PRINT#1,"C1 1 24 ";STR$(CIN)+"PF" 1060 K=A:GOSUB 1440 1070 PRINT#1,"EA 19 0 1 24 ";K 1080 K=R2*(1-1/1000):GOSUB 1440 1090 PRINT#1,"R2 7 11 ";STR$(K)+"MEG" 1100 N$=STR$(C2)+"PF" 1110 IF COMP<2 THEN 1160 1120 PRINT#1,"C2 27 28 ";N$ 1130 PRINT#1,"EC2 27 0 11 0 1" 1140 PRINT#1,"VC2 28 0 0" 1150 PRINT#1,"FC2 11 0 VC2 1" :GOTO 1170 1160 PRINT#1,"C2 11 0 ";N$ 1170 PRINT#1,"D5 11 22 DG" 1180 PRINT#1,"GB 13 3 0 11 .001" 1190 PRINT#1,"RGB 3 13 1K" 1200 K=C3 : GOSUB 1440 1210 PRINT#1,"C3 3 13 ";STR$(K)+"PF" 1230 PRINT#1,"D6 15 11 DG" 1300 PRINT#1,"VOLP 12 22 ";VC+.5: PRINT#1,"VOLN 15 20 ";VE+.5 1310 K=R2/1000:GOSUB 1440 1320 PRINT#1,"R22 19 7 ";STR$(K)+"MEG" 1380 PRINT#1,"EOUT 0 23 0 3 1" 1390 PRINT#1,".ENDS ";SUBNAM$ 1400 CLOSE#1 1410 PRINT:PRINT"USE TYPE COMMAND TO VIEW THE FILE ";NAM$ 1420 GOTO 1540 1430 REM ROUNDOFF ROUTINE 1440 IF K=0 THEN RETURN 1450 IF ABS(K)<1 THEN 1490 1460 FOR T=0 TO 8 : K2=K/10^T 1470 IF ABS(K2)<10 THEN 1520 1480 NEXT T : PRINT "ERROR":STOP 1490 FOR T=0 TO 8 : K2=K*10^T 1500 IF ABS(K2)>1 THEN 1530 1510 NEXT T : PRINT"ERROR": STOP 1520 K=10^T*INT(K2*1000+.5)/1000 : RETURN 1530 K=INT(K2*1000+.5)/1000/10^T : RETURN 1540 SYSTEM : END