10 ' 20 ' RLC SERIES CIRCUIT 30 ' 40 '------------------------- 1/5/88 -------------------------- 50 ' 60 ' This program calculates and plots the current as a function 70 ' of time for an RLC series circuit in which the capacitor is 80 ' initially charged and the current is initially zero. 90 ' 100 ' PROCEDURES 110 ' 120 GOSUB 230 'INITIALIZATIONS 130 GOSUB 340 'INPUT 140 GOSUB 560 'LOOP OVER TIMES TO CALCULATE THE CURRENT 150 GOSUB 960 'OUTPUT 160 PRINT 170 PRINT 180 INPUT "WANT TO RUN ANOTHER (Y/N)? ", AGAIN$ 190 IF AGAIN$ = "Y" OR AGAIN$ = "y" THEN 130 200 END 210 ' 220 '------------------------------------------------------ 230 'INITIALIZATIONS 240 ' 250 DIM YSTRG$(101),X(101),Y(101) 260 READ BLANK$,VLN$,ASTER$,DOT$ 270 DATA " ","|","*","." 280 ' 290 NYMAX = 63 300 NYZERO = 34 310 ' 320 RETURN 330 '------------------------------------------------------ 340 'INPUT 350 ' 360 PRINT 370 PRINT "INPUT VALUES FOR THE FOLLOWING:" 380 PRINT " RESISTANCE (R)" 390 PRINT " INDUCTANCE (L)" 400 PRINT " CAPACITANCE (C)" 410 PRINT " TIME STEP (DT)" 420 PRINT " NUMBER OF STEPS (N)" 430 PRINT " AMPLITUDE OF APPLIED VOLTAGE (V0)" 440 PRINT " FREQUENCY OF APPLIED VOLTAGE (W)" 450 PRINT 460 PRINT "SEPARATE THE INPUT VALUES WITH COMMAS AND " 470 PRINT "THEN PRESS RETURN" 480 PRINT 490 INPUT R, L, C, DT, NXMAX, V0, W 500 ' 510 ' -- Make sure N is an integer. 520 ' 530 NXMAX = INT ( NXMAX ) 540 RETURN 550 '------------------------------------------------------- 560 'LOOP OVER TIMES TO CALCULATE THE CURRENT 570 ' 580 ' -- The assumed initial conditions are I=0 and Q=1 at T=0. 590 ' 600 T = 0 610 I = 0 620 Q = 1 630 FOR NX = 1 TO NXMAX 640 ' 650 X(NX) = T 660 Y(NX) = I 670 ' 680 ' -- Calculate current for current time. 690 ' 700 ' -- Find the applied voltage signal at time T. 710 ' 720 VA = V0 * SIN (W * T) 730 ' 740 ' -- Find the time derivative of the current. 750 ' 760 DIDT = (1 / L) * (VA - I * R - Q / C) 770 ' 780 ' -- First find the approximate values for Q . 790 ' 800 NQ = Q + I * DT 810 NI = I + DIDT * DT 820 NVA = V0 * SIN (W * (T + DT)) 830 NDIDT = (1 / L) * (NVA - NI * R - NQ / C) 840 ' 850 ' -- Then get new improved values for Q and I. 860 ' 870 Q = Q + (I + NI) * DT / 2 880 I = I + (DIDT + NDIDT) * DT / 2 890 ' 900 ' -- Go to next time. 910 ' 920 T = T + DT 930 NEXT NX 940 RETURN 950 '------------------------------------------------------ 960 'OUTPUT 970 ' 980 PRINT 990 INPUT "PRINTER (Y/N)? ",ANS$ 1000 IF ANS$ = "Y" OR ANS$ = "y" THEN OPEN "LPT1:" FOR OUTPUT AS #1 1010 IF ANS$ <> "Y" AND ANS$ <> "y" THEN OPEN "SCRN:" FOR OUTPUT AS #1 1020 ' 1030 PRINT #1, " R= ";R 1040 PRINT #1, " L= ";L 1050 PRINT #1, " C= ";C 1060 PRINT #1, "DT= ";DT 1070 PRINT #1, " N= ";NXMAX 1080 PRINT #1, "V0= ";V0 1090 PRINT #1, " W= ";W 1100 ' 1110 ' -- Plot the graph header: 1120 ' 1130 PRINT #1, " I->"; 1140 FOR NY = 4 TO NYZERO - 1 1150 PRINT #1, BLANK$; 1160 NEXT NY 1170 PRINT #1, "0" 1180 ' 1190 ' -- Plot the top line of the graph: 1200 ' 1210 PRINT #1, " TIME CURRENT "; 1220 FOR NY = 1 TO NYMAX 1230 YSTRG$(NY) = BLANK$ 1240 PRINT #1, DOT$; 1250 NEXT NY 1260 PRINT #1, 1270 ' 1280 ' -- Plot the various lines: 1290 ' 1300 FOR NX = 1 TO NXMAX 1310 PRINT #1, USING " ##.###";X(NX); 1320 PRINT #1, USING " #.#### ";Y(NX); 1330 PNY = 1 + INT ( ( Y(NX) + 1 ) * ( NYZERO - 1 ) + .5 ) 1340 IF PNY > NYMAX THEN PNY = NYMAX 1350 YSTRG$(NYZERO) = VLN$ 1360 YSTRG$(1) = DOT$ 1370 YSTRG$(NYMAX) = DOT$ 1380 YSTRG$(PNY) = ASTER$ 1390 FOR NY = 1 TO NYMAX 1400 PRINT #1, YSTRG$(NY); 1410 NEXT NY 1420 PRINT #1, 1430 YSTRG$(PNY) = BLANK$ 1440 NEXT NX 1450 ' 1460 ' -- Print bottom line: 1470 ' 1480 PRINT #1, " "; 1490 FOR NY = 1 TO NYMAX 1500 PRINT #1, DOT$; 1510 NEXT NY 1520 ' 1530 PRINT #1, 1540 PRINT #1, 1550 CLOSE #1 1560 RETURN 1570 '-------------- END OF PROGRAM LINES ------------------