[INIT] MAINWIN 80 25:CLS:PI=asn(1)*2:ON ERROR GOTO [INIT] PRINT tab(20);"Active Filter Design 1988 - 2005 Bill Yotter":PRINT"" PRINT" 1) Lowpass 2 pole" PRINT" 2) Lowpass 3 pole" PRINT" 3) Highpass 2 pole" PRINT" 4) Highpass 3 pole" PRINT" 5) Bandpass IGMF" PRINT" 6) Bandpass VCVS" PRINT" 7) Bandstop Ind" PRINT" 8) Bandstop 'T'" PRINT" 9) 1% Resistor" PRINT" 0) Exit":PRINT LOCATE 4,23:PRINT"Program assumes a basic knowledge of electronics & part parameter reality!" [AGAIN] LOCATE 15,15:X$=INPUT$(1):IF X$="0" THEN END IF X$="9" THEN [OnePerCent] LOCATE 12,15:PRINT SPACE$(33):LOCATE 17,17:PRINT SPACE$(28) FOR C=2 TO 21:LOCATE 40,C:PRINT SPACE$(40):NEXT C LOCATE 35,3:PRINT"#";X$;" OpAmp(-in,+in,out) 0=ground node" IF X$="1" THEN [LP2P] IF X$="2" THEN [LP3P] IF X$="3" THEn [HP2P] IF X$="4" THEN [HP3P] IF X$="5" THEN [BPIGMF] IF X$="6" THEN [BPVCVS] IF X$="7" THEN [BSI] IF X$="8" THEN [BST] GOTO [INIT] [LP2P] ' lowpass 2 pole LOCATE 45,5:PRINT"1) Bessel" LOCATE 45,6:PRINT"2) Butterworth" LOCATE 45,7:INPUT"3) Chebyshev ? ";T IF T=3 THEN LOCATE 45,8:INPUT "Peaking max ? ";P LOCATE 45,9:INPUT"Freq -3 dB ? ";F LOCATE 45,10:PRINT"C ~ ";1/(2*PI*F*10000) LOCATE 45,11:INPUT"Cap value ? ";C:IF C=0 THEN C=1/(2*PI*F*10000) IF T=1 THEN C1XX=.9066:C2XX=.6799 IF T=2 THEN C1XX=1.414:C2XX=.7071 IF T=3 AND P<.11 THEN C1XX=1.638:C2XX=.6955 IF T=3 AND P>.24 THEN C1XX=1.778:C2XX=.6789 IF T=3 AND P>.49 THEN C1XX=1.949:C2XX=.6533 IF T=3 AND P>.9 THEN C1XX=2.218:C2XX=.6061 IF T=3 AND P>1.9 THEN C1XX=2.672:C2XX=.5246 IF T=3 AND P>2.9 THEN C1XX=3.103:C2XX=4558 C1X=C1XX/(2*PI*F):C2X=C2XX/(2*PI*F):R=C1X/C:C2=C2X/R LOCATE 45,13:PRINT"A1 (-4,+3,4)" LOCATE 45,14:PRINT"R1 (1,2) ";R LOCATE 45,15:PRINT"R2 (2,3) ";R LOCATE 45,16:PRINT"C1 (2,4) ";C LOCATE 45,17:PRINT"C2 (3,0) ";C2 GOTO [AGAIN] [LP3P] ' lowpass 3 pole LOCATE 45,5:PRINT"1) Bessel" LOCATE 45,6:PRINT"2) Butterworth" LOCATE 45,7:INPUT"3) Chebyshev ? ";T IF T=3 THEN LOCATE 45,8:INPUT "Peaking max ? ";P LOCATE 45,9:INPUT"Freq -3 dB ? ";F LOCATE 45,10:PRINT"C ~ ";1/(2*PI*F*10000) LOCATE 45,11:INPUT"Cap value ? ";C:IF C=0 THEN C=1/(2*PI*F*10000) IF T=1 THEN C1XX=.988:C2XX=1.423:C3XX=.2538 IF T=2 THEN C1XX=1.392:C2XX=3.546:C3XX=.2024 IF T=3 AND P<.11 THEN C1XX=1.825:C2XX=6.653:C3XX=.1345 IF T=3 AND P>.24 THEN C1XX=2.018:C2XX=8.550999:C3XX=.1109 IF T=3 AND P>.49 THEN C1XX=2.25:C2XX=11.23:C3XX=.0895 IF T=3 AND P>.9 THEN C1XX=2.567:C2XX=16.18:C3XX=.06428001 IF T=3 AND P>1.9 THEN C1XX=3.113:C2XX=27.82:C3XX=.03892 IF T=3 AND P>2.9 THEN C1XX=3.629:C2XX=43.42:C3XX=.02533 C1X=C1XX/(2*PI*F):C2X=C2XX/(2*PI*F):C3X=C3XX/(2*PI*F) R=C2X/C:C1=C1X/R:C3=C3X/R LOCATE 45,13:PRINT"A1 (-5,+4,5)" LOCATE 45,14:PRINT"R1 (1,2) ";R LOCATE 45,15:PRINT"R2 (2,3) ";R LOCATE 45,16:PRINT"R3 (3,4) ";R LOCATE 45,17:PRINT"C1 (2,0) ";C1 LOCATE 45,18:PRINT"C2 (3,5) ";C LOCATE 45,19:PRINT"C3 (4,0) ";C3 GOTO [AGAIN] [HP2P] ' highpass 2 pole LOCATE 45,5:PRINT"1) Bessel" LOCATE 45,6:PRINT"2) Butterworth" LOCATE 45,7:INPUT"3) Chebyshev ? ";T IF T=3 THEN LOCATE 45,8:INPUT "Peaking max ? ";P LOCATE 45,9:INPUT"Freq -3 dB ? ";F LOCATE 45,10:PRINT"C ~ ";1/(2*PI*F*10000) LOCATE 45,11:INPUT"Cap value ? ";C:IF C=0 THEN C=1/(2*PI*F*10000) IF T=1 THEN R1X=1.103:R2X=1.471 IF T=2 THEN R1X=.7072:R2X=1.414 IF T=3 AND P<.11 THEN R1X=.6105:R2X=1.438 IF T=3 AND P>.24 THEN R1X=.5624:R2X=1.473 IF T=3 AND P>.49 THEN R1X=.5131001:R2X=1.531 IF T=3 AND P>.9 THEN R1X=.4509:R2X=1.65 IF T=3 AND P>1.9 THEN R1X=.3743:R2X=1.906 IF T=3 AND P>2.9 THEN R1X=.3223:R2X=2.194 CX=1/(2*PI*F):K=CX/C:R1=R1X*K:R2=R2X*K LOCATE 45,13:PRINT"A1 (-4,+3,4)" LOCATE 45,14:PRINT"R1 (2,4) ";R1 LOCATE 45,15:PRINT"R2 (3,0) ";R2 LOCATE 45,16:PRINT"C1 (1,2) ";C LOCATE 45,17:PRINT"C2 (2,3) ";C GOTO [AGAIN] [HP3P] ' highpass 3 pole LOCATE 45,5:PRINT"1) Bessel" LOCATE 45,6:PRINT"2) Butterworth" LOCATE 45,7:INPUT"3) Chebyshev ? ";T IF T=3 THEN LOCATE 45,8:INPUT "Peaking max ? ";P LOCATE 45,9:INPUT"Freq -3 dB ? ";F LOCATE 45,10:PRINT"C ~ ";1/(2*PI*F*10000) LOCATE 45,11:INPUT"Cap value ? ";C:IF C=0 THEN C=1/(2*PI*F*10000) IF T=1 THEN R1X=.7027:R2X=1.012:R3X=3.94 IF T=2 THEN R1X=.282:R2X=.7184:R3X=4.941 IF T=3 AND P<.11 THEN R1X=.1503:R2X=.5479:R3X=7.435 IF T=3 AND P>.24 THEN R1X=.1169:R2X=.4955:R3X=9.017 IF T=3 AND P>.49 THEN R1X=.08905:R2X=.4444:R3X=11.17 IF T=3 AND P>.9 THEN R1X=.0618:R2X=.3896:R3X=15.56 IF T=3 AND P>1.9 THEN R1X=.03595:R2X=.3212:R3X=25.69 IF T=3 AND P>2.9 THEN R1X=.02303:R2X=.2756:R3X=39.48 CX=1/(2*PI*F):K=CX/C:R1=R1X*K:R2=R2X*K:R3=R3X*K LOCATE 45,13:PRINT"A1 (-5,+4,5)" LOCATE 45,14:PRINT"R1 (3,5) ";R1 LOCATE 45,15:PRINT"R2 (2,0) ";R2 LOCATE 45,16:PRINT"R3 (4,0) ";R3 LOCATE 45,17:PRINT"C1 (1,2) ";C LOCATE 45,18:PRINT"C2 (2,3) ";C LOCATE 45,19:PRINT"C3 (3,4) ";C GOTO [AGAIN] [BPIGMF] ' bandpass igmf LOCATE 45,5:INPUT"Freq = ? ";F LOCATE 45,6:INPUT"BW = ? ";BW:Q=F/BW LOCATE 45,7:INPUT"Av = ? ";H LOCATE 45,8:PRINT"C ~ ";1/(2*PI*F*10000) LOCATE 45,9:INPUT"Cap = ? ";C:IF C=0 THEN C=1/(2*PI*F*10000) R1=Q/(2*PI*F*C*H):R2=Q/((2*PI*F*C)*(2*Q^2-H)):R3=2*Q/(2*PI*F*C) LOCATE 45,11:PRINT"A1 (-3,+0,4)" LOCATE 45,12:PRINT"R1 (1,2) ";R1 LOCATE 45,13:PRINT"R2 (2,0) ";R2 LOCATE 45,14:PRINT"R3 (3,4) ";R3 LOCATE 45,15:PRINT"C1 (2,4) ";C LOCATE 45,16:PRINT"C2 (2,3) ";C GOTO [AGAIN] [BPVCVS] ' bandpass vcvs LOCATE 45,5:INPUT"Freq = ? ";F LOCATE 45,6:INPUT"Av = ? ";AV LOCATE 45,7:PRINT"C ~ ";1/(2*PI*F*10000) LOCATE 45,8:INPUT"Cap = ? ";C:IF C=0 THEN C=1/(2*PI*F*10000) R2=(1-(1/AV))/(2*PI*F*C):R1=R2*AV:R3=(AV+1)/(2*PI*F*C):C2=C/2 LOCATE 45,10:PRINT"A1 (-3,+0,4)" LOCATE 45,11:PRINT"R1 (1,2) ";R1 LOCATE 45,12:PRINT"R2 (2,5) ";R2 LOCATE 45,13:PRINT"R3 (3,4) ";R3 LOCATE 45,14:PRINT"R4 (5,4,0) 100K Q pot" LOCATE 45,15:PRINT"C1 (2,4) ";C LOCATE 45,16:PRINT"C2 (2,3) ";C2 GOTO [AGAIN] [BSI] ' bandstop ind LOCATE 45,5:INPUT "Freq = ? ";F LOCATE 45,6:INPUT "BW = ? ";BW:Q=F/BW LOCATE 45,7:INPUT "Z in = ? ";Z R1=2*Z:R4=R1/2:C2=2*Q/(PI*F*R4):C1=1/((2*PI*F*R4)^2*C2) LOCATE 45,10:PRINT"A1 (-2,+3,7)" LOCATE 45,11:PRINT"A2 (-6,+4,6)" LOCATE 45,12:PRINT"R1 (1,2) ";R1 LOCATE 45,13:PRINT"R2 (2,7) ";R1 LOCATE 45,14:PRINT"R3 (1,3) ";R1 LOCATE 45,15:PRINT"R4 (4,5) ";R4 LOCATE 45,16:PRINT"R5 (5,0) ";R4 LOCATE 45,17:PRINT"C1 (3,4) ";C1 LOCATE 45,18:PRINT"C2 (5,6) ";C2 GOTO [AGAIN] [BST] ' bandstop t LOCATE 45,5:INPUT "Freq = ? ";F LOCATE 45,6:INPUT "Z in = ? ";Z R1=Z*1000:R2=R1/2:C1=1/(4*PI*F*R2):C2=2*C1 LOCATE 45,8:PRINT"A1 (-7,+6,7)" LOCATE 45,9:PRINT"A2 (-5,+4,5)" LOCATE 45,10:PRINT"R1 (1,3) ";R1 LOCATE 45,11:PRINT"R2 (2,5) ";R2 LOCATE 45,12:PRINT"R3 (3,6) ";R1 LOCATE 45,13:PRINT"R4 (7,4,0) 10K Q pot" LOCATE 45,14:PRINT"C1 (1,2) ";C1 LOCATE 45,15:PRINT"C2 (3,5) ";C2 LOCATE 45,16:PRINT"C3 (2,6) ";C1 GOTO [AGAIN] [OnePerCent] LOCATE 12,15:PRINT SPACE$(33):LOCATE 17,17:PRINT SPACE$(28) LOCATE 12,15:INPUT"Exact R ? ";Rin:GOSUB [NEAREST]:LOCATE 17,17:PRINT"1% = ";Rout:GOTO [AGAIN] [NEAREST] ' 1% R input=Rin output=Rout Nnr=INT(96*(LOG(Rin)*.434295)):FOR Jnr=1 TO 2:Rnr(Jnr)=10^((Nnr+Jnr-1)/96):Vnr=LOG(Rnr(Jnr))*.434295 Vnr=INT(Vnr)-2:Rnr(Jnr)=INT(Rnr(Jnr)/(10^Vnr)+.5):Rnr(Jnr)=Rnr(Jnr)*10^Vnr:NEXT Jnr Rout=Rnr(1):IF Rin>(Rnr(1)+Rnr(2))/2 THEN Rout=Rnr(2) RETURN