# Copyright: Public domain. # Filename: TVCROLLDAP.agc # Purpose: Part of the source code for Colossus 2A, AKA Comanche 055. # It is part of the source code for the Command Module's (CM) # Apollo Guidance Computer (AGC), for Apollo 11. # Assembler: yaYUL # Contact: Ron Burkey <info@sandroid.org>. # Website: www.ibiblio.org/apollo. # Pages: 984-998 # Mod history: 2009-05-13 RSB Adapted from the Colossus249/ file of the # same name, using Comanche055 page images. # # This source code has been transcribed or otherwise adapted from digitized # images of a hardcopy from the MIT Museum. The digitization was performed # by Paul Fjeld, and arranged for by Deborah Douglas of the Museum. Many # thanks to both. The images (with suitable reduction in storage size and # consequent reduction in image quality as well) are available online at # www.ibiblio.org/apollo. If for some reason you find that the images are # illegible, contact me at info@sandroid.org about getting access to the # (much) higher-quality images which Paul actually created. # # Notations on the hardcopy document read, in part: # # Assemble revision 055 of AGC program Comanche by NASA # 2021113-051. 10:28 APR. 1, 1969 # # This AGC program shall also be referred to as # Colossus 2A
# Page 984 # PROGRAM NAME...TVC ROLL AUTOPILOT # LOG SECTION...TVCROLLDAP SUBROUTINE...DAPCSM # MOD BY SCHLUNDT 21 OCTOBER 1968
# FUNCTIONAL DESCRIPTION....
# *AN ADAPTATION OF THE LEM P-AXIS CONTROLLER # *MAINTAIN OGA WITHIN 5 DEG DEADBND OF OGAD, WHERE OGAD = OGA AS SEEN # BY IGNITION (P40) # *MAINTAIN OGA RATE LESS THAN 0.1 DEG/SEC LIMIT CYCLE RATE # *SWITCHING LOGIC IN PHASE PLANE.... SEE GSOP CHAPTER 3 # *USES T6 CLOCK TO TIME JET FIRINGS # *MAXIMUM JET FIRING TIME = 2.56 SECONDS, LIMITED TO 2.5 IF GREATER # *MINIMUM JET FIRING TIME = 15 MS # *JET PAIRS FIRE ALTERNATELY # *AT LEAST 1/2 SECOND DELAY BEFORE A NEW JET PAIR IS FIRED # *JET FIRINGS MAY NOT BE EXTENDED, ONLY SHORTENED, WHEN RE-EVALUATION # OF A JET FIRING TIME IS MADE ON A LATER PASS
# CALLING SEQUENCE....
# *ROLLDAP CALL VIA WAITLIST, IN PARTICULAR BY TVCEXEC (EVERY 1/2 SEC) # WITH A 3CS DELAY TO ALLOW FREE TIME FOR OTHER RUPTS (DWNRPT, ETC.)
# NORMAL EXIT MODES.... ENDOFJOB
# ALARM OR ABORT EXIT MODES.... NONE
# SUBROUTINES CALLED.....NONE
# OTHER INTERFACES....
# *TVCEXEC SETS UP ROLLDAP TASK EVERY 1/2 SECOND AND UPDATES 1/CONACC # EVERY 10 SECONDS (VIA MASSPROP AND S40.15) # *RESTARTS SUSPEND ROLL DAP COMPUTATIONS UNTIL THE NEXT 1/2 SEC # SAMPLE PERIOD. (THE PART OF TVCEXECUTIVE THAT CALLS ROLL DAP IS # NOT RESTARTED.) THE OGAD FROM IGNITION IS MAINTAINED.
# ERASABLE INITIALIZATION REQUIRED....
# *1/CONACC (S40.15) # *OGAD (CDUX AT IGNITION) # *OGANOW (CDUX AT TVCINIT4 AND TVCEXECUTIVE) # *OGAPAST (OGANOW AT TVCEXECUTIVE) # *ROLLFIRE = TEMREG = ROLLWORD = 0 (MRCLEAN LOOP IN TVCDAPON) # # OUTPUT....
# *ROLL JET PAIR FIRINGS
# Page 985 # DEBRIS.... MISCELLANEOUS, SHAREABLE WITH RCS/ENTRY, IN EBANK6 ONLY
# Page 986 # SOME NOTES ON THE ROLL AUTOPILOT, AND IN PARTICULAR, ON ITS SWITCHING # LOGIC. SEE SECTION THREE OF THE GSOP (SUNDISK/COLOSSUS) FOR DETAILS.
# SWITCHING PARABOLAS ARE CONTROL PARABOLAS, THUS REQUIRING KNOWLEDGE OF # CONTROL ACCELERATION CONACC, OR ITS RECIPROCAL, 1/CONACC, THE TVC # ROLL DAP GAIN (SEE TVCEXECUTIVE VARIABLE GAIN PACKAGE). JET # FIRING TIME IS SIMPLY THAT REQUIRED TO ACHIEVE THE DESIRED OGARATE, # SUBJECT TO THE LIMITATIONS DISCUSSED UNDER FUNCTIONAL DESCRIPTION, # ABOVE.
# THE THREE CONTROL REGIONS (+, -, AND ZERO TORQUE) ARE COMPRIZED OF # TWELVE SUBSET REGIONS ( 1...6, AND THE CORRESPONDING 1-PRIME... # 6-PRIME ) SEE SECTION 3 OF THE GSOP (SUNDISK OR COLOSSUS) # Page 987 # # GIVEN THE OPERATING POINT NOT IN THE COAST REGION, THE DESIRED OGARATE # IS AT THE POINT OF PENETRATION OF THE COAST REGION BY THE CONTROL # PARABOLA WHICH PASSES THROUGH THE OPERATING POINT. FOR REGION 3 # DESIRED OGARATE IS SIMPLY +-MAXLIM. FOR REGIONS 1 OR 6 THE SOLUTION # TO A QUADRATIC IS REQUIRED (THE PENETRATION IS ALONG THE STRAIGHT # LINE OR MINLIM BOUNDRY SWITCH LINES). AN APPROXIMATION IS MADE # INSTEAD. TAKE AN OPERATING POINT IN REGION 6' . PASS A TANGENT TO # THE CONTROL PARABOLA THROUGH THE OPERATING POINT, AND FIND ITS # INTERSECTION WITH THE STRAIGHT LINE SECTION OF THE SWITCH CURVE... # THE INTERSECTION DEFINES THE DESIRED OGARATE. IF THE OPERATING POINT IS # CLOSE TO THE SWITCH LINE, THE APPROXIMATION IS QUITE GOOD (INDEED # THE APPROXIMATE AND QUADRATIC SOLUTIONS CONVERGE IN THE LIMIT AS # THE SWITCH LINE IS APPROACHED). IF THE OPERATING POINT IS NOT CLOSE # TO THE SWITCH LINE, THE APPROXIMATE SOLUTION GIVES VALID TREND # INFORMATION (DIRECTION OF DESIRED OGARATE) AT LEAST. THE # RE-EVALUATION OF DESIRED OGARATE IN SUBSEQUENT ROLL DAP PASSES (1/2 # SECOND INTERVALS) WILL BENEFIT FROM THE CONVERGENT NATURE OF THE # APPROXIMATION.
# FOR LARGE OGAERROR THE TANGENT INTERSECTS +-MINLIM SWITCH BOUNDARY BEFORE # INTERSECTING THE STRAIGHT LINE SWITCH. HOWEVER THE MINLIM IS # IGNORED IN COMPUTING THE FIRING TIME, SO THAT THE EXTENSION (INTO # THE COAST REGION) OF THE STRAIGHT LINE SWITCH IS WHAT IS FIRED TO. # IF THE ROLL DAP FINDS ITSELF IN THE COAST REGION BEFORE REACHING # THE DESIRED INTERSECTION (IE. IN THE REGION BETWEEN THE MINLIM # AND THE STRAIGHT LINE SWITCH) IT WILL EXHIBIT NORMAL COAST-REGION # BEHAVIOR AND TURN OFF THE JETS. THE PURPOSE OF THIS FIRING POLICY # IS TO MAINTAIN STATIC ROLL STABILITY IN THE EVENT OF A JET # FAILED-ON.
# WHEN THE OPERATING POINT IS IN REGION 1 THE SAME APPROXIMATION IS # MADE, BUT AT AN ARTIFICIALLY-CREATED OR DUMMY OPERATING POINT, # DEFINED BY.. OGAERROR = INTERSECTION OF CONTROL PARABOLA AND # OGAERROR AXIS, OGARATE = +-LMCRATE WHERE SIGN IS OPPOSITE THAT OF # REAL OPERATING POINT RATE. WHEN THE OPERATING POINT HAS PASSED # FROM REGION 1 TO REGION 6', THE DUMMY POINT IS NO LONGER REQUIRED, # AND THE SOLUTION REVERTS TO THAT OF A REGULAR REGION 6' POINT.
# EQUATION FOR SWITCHING PARABOLA (SEE FIGURE ABOVE).... # 2 # SOGAERROR = (DB - (SOGARATE) (1/CONACC)/2) SGN(SOGARATE)
# EQUATION FOR SWITCHING STRAIGHT LINE SEGMENT....
# FOR REGIONS 6 AND 6-PRIME USE ACTUAL OPERATING POINT (OGA, OGARATE) # FOR OGAERROR AND OGARATE IN THE INTERSECTION EQUATIONS ABOVE. # FOR REGIONS 1 AND 1-PRIME USE DUMMY OPERATING POINT FOR OGAERROR # AND OGARATE, WHERE THE DUMMY POINT IS GIVEN BY.... # OGAERROR= DELOGA + DB SGN(OGARATE) # OGARATE= -LMCRATE SGN(OGARATE) # # NOTE, OGAERROR = OGA - OGAD USES DUMMY REGISTER OGA IN ROLL DAP CODING # ALSO, AT POINT WHERE DOGARATE IS COMPUTED, REGISTER DELOGA IS USED # AS A DUMMY REGISTER FOR THE OGAERROR IN THE NUM EQUATION ABOVE # Page 989
INDEX I # TSET ON I SGN(OGARATE) 0 SGNRT # CA OR CS
COM EXTEND
REG1TST BZMF ROLLON # IF REGION 1 (DELOGA OGARATE SAME SIGN)
# NO JET FIRE YET. TEST FOR MAX OGARATE
INDEX I 0 OGARATE # CA OR CS...BOTH MUST BE NEG. HERE TS IOGARATE # I.E. I OGARATE AD MAXLIM # SCALED AT 2(-4) REV/SEC EXTEND
REG3TST BZMF RATELIM # IF REGION 3 (RATES TOO HIGH, FIRE JETS)
# COMPUTATION OF I((-SLOPE)OGA + OGARATE) - INTERCEPT..NOTE THAT STR. LINE # SWITCH SLOPE IS (SLOPE) DEG/SEC/DEG, A NEG QUANTITY
CA OGARATE EXTEND MP BIT14 TS TEMREG CA OGA EXTEND MP -SLOPE
DDOUBL
DDOUBL
DDOUBL # (OGA ERROR MUST BE LESS THAN +-225 DEG) AD TEMREG
INDEX I 0 A # I((-SLOPE)OGA+OGARATE) AT 2(-3)REV/SEC
COM # Page 991 AD INTERCEP # SCALED AT 2(-3) REV.
COM EXTEND
REG2TST BZMF NOROLL # IP REGION 2 (COAST SIDE OF STRT LINE)
# CHECK TO SEE IF OGARATE IS ABOVE MINLIM BOUNDARY
CA IOGARATE # ALWAYS NEGATIVE AD MINLIM # SCALED AT 2(-4) REV/SEC EXTEND
REG4TST BZMF NOROLL # IF REGION 4 (COAST SIDE OF MINLIM)
# ALL AREAS CHECKED EXCEPT LAST AREA...NO FIRE IN THIS SMALL SEGMENT
INDEX I 0 OGA
COM AD DB
COM EXTEND
REG5TST BZMF NOROLL # IF REGION 5 (COAST SIDE OF DB)
# JETS MUST FIRE NOW.OGARATE IS NEG.(OR VICE VERSA).USE DIRECT STR. LINE. # DELOGA AND DELOGART ARE USED AS DUMMY VARIABLES IN THE SOLUTION OF A # STRAIGHT LINE APPROXIMATION TO A QUADRATIC SOLUTION OF THE INTERSECTION # OF THE CONTROL PARABOLA AND THE STRAIGHT-LINE SWITCH LINE. THE STRAIGHT # LINE IS THE TANGENT TO THE CONTROL PARABOLA AT THE OPERATING POINT. (FOR # OPERATING POINTS IN REGIONS 6 AND 6')
REGION6 CAE OGA # USE ACTUAL OPERATING POINT FOR TANGENT TS DELOGA # ACTUAL STATE CA OGARATE TS DELOGART # ACTUAL STATE,I.E. DEL OGARATE TCF ONROLL
# JETS ALSO FIRE FROM HERE EXCEPT OGARATE IS POS (VICE VERSA),USE INDIRECT # STRAIGHT LINE ESTABLISHED BY TANGENT TO A CONTROL PARABOLA AT ((DELOGA # + DB SGN(DELOGA) ), -LMCRATE SGN(DELOGA) ) (THIS IS THE DUMMY # OPERATING POINT FOR OPERATING POINTS IN REGIONS 1 AND 1' )
ROLLON INDEX I 0 DB ADS DELOGA # DELOGA WAS DIST. FROM SWITCH PARABOLA
CS LMCRATE # LIMIT CYCLE RATE AT 2(-4) REV/SEC INDEX I 0 A TS DELOGART # EVALUATE STATE FOR INDIRECT LINE.
ONROLL EXTEND# DELOGART IN ACC. ON ARRIVAL MP1/CONACC DOUBLE EXTEND MP -SLOPE TS TEMREG # 2(-SLOPE)RATE /CONACC EXTEND MP DELOGART TS DELOGART # 2(-SLOPE)(RATESQ)/CONACC CS BIT11 INDEX I 0 A
RATEDEN ADS TEMREG # DENOMINATOR COMPLETED
INDEX I 0 DELOGA
COM AD DB
COM EXTEND MP -SLOPE ADS DELOGART CA LMCRATE EXTEND MP BIT11
RATENUM AD DELOGART # NUMERATOR COMPLETED
XCH L # PLACE NUMERATOR IN L FOR OVERFL. CHECK CA ZERO EXTEND
DV TEMREG # OVERFLOW, IF ANYTHING, NOW APPEARS IN A EXTEND BZF DVOK # NO OVERFLOW....(0,L)/TEMREG = 0,L
DVOK LXCH A # PUT NUMERATOR BACK INTO A, 0 INTO L EXTEND
DV TEMREG # RESULT OF DIVISION IS DESIRED OGARATE TCF ROLLSET # ( SCALED AT B-4 REV/SEC )
RATELIM CS MAXLIM INDEX I # Page 993 0 A # IF I = CA, DESIRED RATE IS -MAXLIM
# COMPUTE JET FIRE TIME, BASED ON DESIRED RATE MINUS PRESENT RATE
ROLLSET TS TEMREG # STORE DESIRED OGARATE (SCALED B-4) EXTEND
SU OGARATE # RATE DIFF. SCALED AT 2(-4) REV/SEC TS TEMREG # OVERFLOW PROTECT TCF +3# " " INDEX A # " " CS LIMITS # " " EXTEND MP T6SCALE # T6SCALE = 8/10.24 EXTEND MP1/CONACC # SCALED AT B+9 SECSQ/REV (MAX < .60)
DDOUBL
DDOUBL TS TEMREG # OVERFLOW PROTECT TCF +3# " " INDEX A # " " CS LIMITS # " " TS TEMREG # JET FIRE TIME AT 625 MICROSEC/BIT EXTEND# POS MEANS POSITIVE ROLL TORQUE. BZF NOROLL
# JET FIRE TIME IS NZ, TEST FOR JETS NOW ON.
CAE TEMREG # DESIRED CHANGE IN OGARATE EXTEND MP ROLLFIRE # (SGN OF TORQUE..ZERO IF JETS NOW OFF) CCS A TCF MOREROLL # CONTINUE FIRING WITH PRESENT POLARITY TCF NEWROLL # START NEW FIRING NOW, PLUS TCF NOROLL # TERMINATE OLD FIRING, NEW SIGN REQUESTED TCF NEWROLL # START NEW FIRING NOW, MINUS
# CONTINUE PRESENT FIRING
MOREROLL CAF ZERO TS I # USE TEMP. AS MOREROLL SWITCH TCF MAXTFIRE
# START NEW FIRING BUT CHECK IF GREATER THAN MIN FIRE TIME.
NEWROLL CCS TEMREG # CALL THIS T6FIRE AD ONE TCF +2 AD ONE
COM # -MAG(T6FIRE) AD TMINFIRE # TMINFIRE-MAG(T6FIRE) # Page 994
COM EXTEND
MINTST BZMF NOROLL # IF NOT GREATER THAN TMINFIRE (NEW FIRE)
# PROCEED WITH NEW FIRING BUT NOT LONGER THAN TMAXFIRE.
MAXTFIRE CA TEMREG EXTEND MP1/TMXFIR # I.E. 1/TMAXFIRE EXTEND
MAXTST BZF NOMXFIRE # IF LESS THAN TMAXFIRE
CCS A CAF TMAXFIRE # USE MAXIMUM TCF +2 CS TMAXFIRE # USE MAXIMUM TS TEMREG
# SET UP SIGN OF REQUIRED TORQUE.
NOMXFIRE CCS TEMREG # FOR TORQUE SIGN CA POSMAX # POSITIVE TORQUE REQUIRED TCF +2 CA NEGMAX # NEGATIVE TORQUE REQUIRED TS ROLLFIRE # SET ROLLFIRE FOR + OR - TORQUE
COM # COMPLEMENT... POS. FOR NEG. TORQUE EXTEND BZMF +3# POSITIVE TORQUE REQUIRED CS TEMREG TS TEMREG
FIRELOOK CA I # IS IT MOREROLL EXTEND BZF FIREPLUG # YES TCF JETROLL # MAG(T6FIRE) NOW IN TEMREG
FIREPLUG CAE TIME6 # CHECK FOR EXTENDED FIRING EXTEND
SU TEMREG EXTEND
EXTENTST BZMF TASKOVER # IF EXTENSION WANTED, DONT, EXIT ROLL DAP TCF JETROLL
NOROLL CS ZERO # COAST....(NEG ZERO FOR TIME6) TS ROLLFIRE # NOTE, JETS CAN FIRE NEXT PASS TS TEMREG
JETROLL EXTEND DCA NOROL1T6 # Page 995 DXCH T6LOC CA TEMREG # ENTER JET FIRING TIME TS TIME6
CA I # I=0 IF MOREROLL,KEEP SAME JETS ON EXTEND
SAMEJETS BZF TASKOVER # IF JETS ON KEEP SAME JETS. EXIT ROLL DAP
NOROLL1 LXCH BANKRUPT # SHUT OFF ALL (ROLL) JETS, (A T6 TASK CAF ZERO # CALLED BY ..JETROLL..) TS ROLLFIRE # ZERO INDICATES JETS NOW OFF EXTEND
KILLJETS WRITE CHAN6 TCF NOQRSM
# Page 998 # CONSTANTS FOR ROLL AUTOPILOT....
EBANK= BZERO
NOROL1T6 2CADR NOROLL1
DB DEC .01388889# DEAD BAND (5 DEG), SC.AT B+0 REV
-SLOPE DEC0.2# -SWITCHLINE SLOPE(0.2 PER SEC) SC.AT B+0 # PER SEC
LMCRATE DEC .00027778 B+4# LIMIT CYCLE RATE (0.1 DEG/SEC) SC.AT # B-4 REV/SEC
INTERCEP DEC .0025 B+3# DB(-SLOPE) - LMCRATE, SC.AT B-3 REV/SC
MINLIM DEC .00277778 B+4# RATELIM,MIN (1DEG/SEC), SC.AT B-4 REV/SC
1/MINLIM DEC360 B-18# RECIPROCAL THEREOF, SHIFTED 14 RIGHT
MAXLIM DEC .01388889 B+4# RATELIM,MAX (5DEG/SEC), SC.AT B-4 REV/SC
TMINFIRE DEC1.5 B+4# 15 MS (14MIN), SC.AT 16 BITS/CS
TMAXFIRE DEC250 B+4# 2.5 SEC, SC.AT 16 BITS/CS
1/TMXFIR = BIT3 # RECIPROCAL THEREOF, SHIFTED 14 RIGHT, # ROUNDS TO OCT00004, SO ALLOWS 2.56 # SEC FIRINGS BEFORE APPLYING LIMIT
T6SCALE = PRIO31 # (B+3) (16 BITS/CS) (100CS/SEC)
+ROLL1 = FIVE # ONBITS FOR JETS 9 AND 11
+ROLL2 = OCT120 # ONBITS FOR JETS 13 AND 15
-ROLL1 = TEN # ONBITS FOR JETS 12 NAD 10
-ROLL2 OCT240# ONBITS FOR JETS 16 AND 14
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.