De digitale PID-regelaar
Citation for published version (APA):
Cordewener, H. M. M. G. (1983). De digitale PID-regelaar. (TH Eindhoven. Afd. Werktuigbouwkunde, Vakgroep Produktietechnologie : WPB; Vol. WPB0044). Technische Hogeschool Eindhoven.
Document status and date: Gepubliceerd: 01/01/1983
Document Version:
Uitgevers PDF, ook bekend als Version of Record
Please check the document version of this publication:
• A submitted manuscript is the version of the article upon submission and before peer-review. There can be important differences between the submitted version and the official published version of record. People interested in the research are advised to contact the author for the final version of the publication, or visit the DOI to the publisher's website.
• The final author version and the galley proof are versions of the publication after peer review.
• The final published version features the final layout of the paper including the volume, issue and page numbers.
Link to publication
General rights
Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain
• You may freely distribute the URL identifying the publication in the public portal.
If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, please follow below link for the End User Agreement:
www.tue.nl/taverne Take down policy
If you believe that this document breaches copyright please contact us at: openaccess@tue.nl
providing details and we will investigate your claim.
H.M.M.G. Cordewener
PID-regelaar
Samenvatting
Dit verslag beschrijft een gedeelte van mijn eindstudie bij de afdeling der Werktuigbouwkunde aan
de Technische Hogeschool te Eindhoven. Het
afstudeerwerk werd verricht onder leiding van ir. P.C. Mulders, ir. C.J. Heuvelman en prof. dr. ir. A.C.H. van der Wolf.
De opdracht was een snelle PID-regelaar in
assemblertaal in microprocessor uitvoering te
ontwerpen en deze regelaar toe te passen op snelheids-en positieregelkringsnelheids-en met gelijkstroommotoren. Ook
diende het dynamisch gedrag van deze
positie--snelheids-regelsystemen, bestaande uit PID-regelaar en motor met incrementele tacho-combinatie en eventueel een harmonic-drive als overbrenging, onderzocht te worden.
De opdracht stond geheel in het kader van het
onderzoekprogramma Flexibele Automatisering en
Industriele Robots. Het feit dat de ontwikkelde
PID-regelaar als op zichzelf staand onderdeel van een willekeurig automatiseringsproject kan fungeren heeft ertoe geleid, dat de werking en de opbouw van deze PID-regelaar apart in dit verslag beschreven wordt. Dit verslag kan dan beschouwd worden als bijlage bij het eigenlijke afstudeerverslag.
Ik hoop dan ook, dat de eventuele gebruikers van
de ontwikkelde programmatuur dit verslag als
handleiding kunnen gaan benutten. Tenslotte wordt
hier nog verwezen naar het 11-stagerapport van A.T. Bertens (WPT-rapport nr. 0528, januari 1982), die het eerste ontwerp van deze PID-regelaar gemaakt heeft.
Bert Cordewener oktober 1983
Inhoudsopgave
o
Inleiding . . . 01 De PID-regelaar . . . 1
2 De gebruikte microcomputer en MICROSIM . . . 4
3 Het hoofdprogramma REGEL . . . 7
4 De routines PROPOR, INTEGR en DIFFER . . . 12
4. 1 Inleiding . . . 12
4.2 De routine PROPOR . . . 12
4.3 De routine INTEGR . . . 14
4.4 De routine DIFFER . . . 17
5 De routines MULECO en VERM . . . 20
5. 1 Inleiding . . . 20
5.2 De routine MULECO . . . 20
5.3 De routine VERM . . . 23
6 De routines DIVECO, DIVIDEt DIVen RNDOFF . . . 27
6. 1 Inleiding . . . 27
6.2 De routine DIVECO . . . 27
6.3 De routine DIVIDE . . . 30
6.4 De routine DIV . . . 33
6.5 De routine RNDOFF . . . 37
7 De routines ADDEC, SUBBEC, ADDBD en SUBBD . . . 39
7 . 1 Inleiding . . . 39 7 . 2 De routine ADDEC . . . 39 7.3 De routine SUBBEC . . . 43 7.4 De routine ADDBD . . . 44 7 . 5 De routine SUBBD . . . 46 8 De routines CMPBD en WISSBD . . . 48 8. 1 Inleiding . . . 48 8.2 De routine CMPBD . . . 48 8.3 De routine WISSBD . . . 49
9 Aanroepen PID-regelaar door de gebruiker . . . 51
10 Li teratuurlijst . . . 58
PID-regelaar pag. 0
o
InIeid!ngDit versiag beschrijft een gedeeite van mijn
afstudeerwerk , verricht voor de afdeling
Werktuigbouwkunde van de Technische Hogeschool
Eindhoven. Het verslag behandelt de opbouw en de werking van een snelle PID-regelaar in assembiertaal
in microprocessoruitvoering. De specificaties van
deze regelaar zijn:
- Bestemd voor gebruik op microcomputer op basis van 8085 processor
- Berekeningen met 16-bit woordbreedte
- Hoge flexibiliteit door eenvoudige instelling van regeiparameters
- Programmaduur voor bijvoorbeeld PI-aktie: 3 tot 4
ms
De opbouw van dit verslag is analoog aan de
structurele opbouw van de programmatuur. Hierdoor is de opbouw anders dan in het verslag van A.T. Bertens
(WPT-rapport nr. 0528, januari 1982), waarin het
eerste ontwerp van de PID-regelaar besproken wordt. Het programma, zoals A.T. Bertens dat in zijn verslag beschreef, bleek na uitvoerig testen verschillende
fouten te bevatten, zodat aanpassingen en
veranderingen noodzakelijk bleken. Het bewuste
verslag zal dus vervangen worden door dit rapport. In dit verslag wordt allereerst het principe van de PID-regelaar beschreven. Daarna wordt in het kort ingegaan op de gebruikte microcomputer en op het assemblerprogramma MICROSIM. In de daarop volgende hoofdstukken wordt de programmatuur zelf uitvoerig besproken. Bij deze bespreking worden allereerst de hoofdroutines bekeken en daarna de subroutines, die
aangeroepen worden. Deze subroutines kunnen weer
ingedeeid worden in subroutines van verschillende
nivo's. De subroutines worden in volgorde van nivo
besproken. In een Iaatste hoofdstuk worden de
initialisaties, die nodig z~Jn, voordat het
regelprogramma wordt aangeroepen, bekeken en verder wordt een voorbeeld gegeven van een interrupt-service routine, waarin het regelprogramma aangeroepen wordt.
1 pe Plp-regelaar
Het basisschema van een regelkring met regelaar en proces ziet er als volgt uit:
fig.1 Regelkring
proces
I I rl
• .K>, eR
I xP
y IW -
I I-
I I Y I L __ _ _ _ _ _ _ _ _ _ _ _ _ .JDe funktie van de regelaar, met overdracht R kan
verschillend z~Jn. Algemeen kan echter gesteld
worden, dat het doel is bepaalde grootheden van een
proces volgens vooraf opgesteld plan te laten
verlopen. Het verschil kan dan nog gelegen zijn in de vorm van het plan, dat bijvoorbeeld kan zijn:
konstant houden (regulateursysteem)
met de tijd varieren (programmaregelaar) varieren afhankelijk van een of meer andere grootheden (servosysteem)
naar een optimum streven (optimaliserende regeling)
Uit de figuur blijkt, dat de regelaar bestaat uit
het regelorgaan, met overdracht R, en uit een
vergelijkingsorgaan. Ret vergelijkingsorgaan bepaalt het verschilsignaal tussen de ingestelde waarde r en de gemeten waarde y van de te regelen procesuitgang: e=r-y. Het regelorgaan berekent het korrektiesignaal x volgens x=R*e.
Het type regelaar wordt gekenmerkt door de vorm van de overdrachtsfunktie R van de regelaar. Veel gebruikte regelaars bevatten combinaties van
propor-tionele-, differentierende- en integrerende akties.
Deze regelaars worden dan ook kort PID-regelaars
genoemd. De overdrachten van deze drie akties zijn achtereenvolgens:
PID-regelaar pag. 2
Voor de proportionele aktie: x(T) :::: K*e(T)
V~~r de differentierende aktie: x(T) = Td *
(~~)
t=TL* T
Voor de integrerende aktie: x{T) =
S
e(t)dtT. 1 t=O
De drie basisakties zijn naar
combineren, waardoor P, PO, PI en
mogelijk z1Jn. V~~r een PIO-regelaar
algemeen de volgende vergelijking:
believen te PID-regelaars geldt dan x(T) T = K*e(T) + L*
J
e(t}dt + Ti t=OBij digitale regelsystemen wordt de procesuitgang
y niet continu, maar op zekere sampletijdstippen
gemeten. Ret signaal e=r-y is dus slechts op de
sampletijdstippen k*Ts aanwezig. Bovenstaande formule
voor de PID-regelaar kan dus niet zonder meer
toegepast worden. Diskretiseren van deze vergelijking
levert echter (via achterwaartse differentie):
n
x(nT}
=
K*e(nT) + _1_* r L T *eCkT) + e(kT - T) +Ti k=1 s 2
T *eCnTl - eCnT - T)
d T
s
Rierin zijn de volgende symbolen gebruikt: K :::: proportionele konstante
Ti= integratietijd
Td= differentiatietijd Ts:::: sampletijd
Met behulp van bovenstaande formule is het mogelijk een digitale PID-regelaar te ontwerpen. Het grote voordeel hiervan is de flexibiliteit. Het is
software matig namelijk zeer eenvoudig de
regelparameters K, Ti en Td gedurende het proces naar believen te veranderen. Dit is van belang, wanneer een voxm van adaptief regelen vereist is. Wanneer
bijvoorbeeld de eigenschappen van het proces
veranderen, kan dit gesignaleerd worden. Dit zal
waarschijnlijk door een tweede microcomputer gebeuren, omdat de microcomputer, die de regelakties berekent
hiervoor geen tijd meer heeft. Deze tweede
microcomputer kan dan, afhankelijk van de
procesveranderingen, nieuwe regelparameters berekenen, die dan op de betreffende adressen in de eerste micro-computer geschreven dienen te worden.
De sampletijd Ts van de regelaktie wordt in eerste instantie bepaald door de kleinste tijdkonstante van het te regelen proces. Ts moet een aantal malen
kleiner gekozen worden dan deze kleinste
tijdconstante, omdat anders niet aan het theorema van Shannon voldaan wordt. Ts kan echter niet te klein gekozen worden in verband met de rekentijd, die het programma vraagt. Hierop wordt in hoofdstuk 9 dieper ingegaan.
PID-reqelaar paq. 4
2 De qebruikte microcomputer en MICROSIM
De programmatuur, zoals die in dit verslag wordt besproken, is geschreven in de assemblertaal voor
INTEL microcomputers en weI voor de 8 bit
microprocessor INTEL 8085. De instruktieset van de 8085 zal hier niet besproken worden, omdat aangenomen wordt, dat de gebruiker hiervan op de hoogte is. Voor het gemak is deze instruktieset echter in dit verslag als bijlage opgenomen. V~~r diepgaandere informatie wordt verwezen naar de diktaten Digitale Rekenmachines nr. 5.524 en nr. 5.529 [lit.1,2) en naar de boeken Microcomputer-systeemarchitectuur, delen 1, 2 en 3, Kemper en Stevens , Stubeg, Hoogezand, 1981 [lit.3).
De opbouw van de gebruikte EWMC
(Elektro--Werktuigbouw Micro Computer) rondom de 8085 processor voIgt uit het schema, dat als bijlage aan dit verslag
toegevoegd is. V~~r de programmatuur van de
PID-regelaar zijn naast de CPU verder de programmable
interruptcontroller 8259, de programmable interval
timer 8253 en de parallelpoorten het meest van belang.
De programma's kunnen met behulp van de
monitorinstrukties in hexadecimale vorm ingegeven
worden. Eenvoudiger is het echter om de MICROSIM Assembler te gebruiken. MICROSIM is een assembler plus simulatie programma, dat geimplementeerd is op de
afdelingscomputer PRIME van de afdeling
Werktuig-bouwkunde. De 8085 instrukties worden op een
een-op-een basis van mnemonics omgezet in binaire
code, die voor de microcomputer begrijpbaar en
uitvoerbaar is. Ret laden van het geassembleerde
programma gebeurt rechtstreeks vanuit de PRIME. Op de struktuur en de commando's van MICROSIM wordt ook niet
verder ingegaan. Meer informatie hierover is te
vinden in de MICROSIM-handleiding (MICROSIM, Program Development System, INTEL 8080/8085, Reference Manual for PRIME host computers [lit.4]).
De gebruikte microcomputer is memory-mapped, dat
wil zeggen dat de in- en uitgangen als
geheugen-plaatsen worden gezien. Zo worden dus de serie- en de
parallelpoorten via geheugenadressen toegesproken.
Hetzelfde geldt v~~r de communicatie met de
interrupt-controller, de keyboard-controller en de
timer/counter. De bewuste adressen hebben allen een symbolische naam gekregen, die binnen het MICROSIM--segment IOSEG gedefinieerd is. Van belang voor het PID-programma en de daarmee samenhangende (gebruikers)
programma's zijn de volgende adressen:
ADRES NAAM FUNKTIE
4000H SERCHO seriepoort 0, naar terminal
4010H SERCH1 seriepoort 1 r naar PRIME
4020H PAR COO parallelpoort 00
4021H PARC01 parallelpoort 01
4022H PARC02 parallelpoort 02
4023H PARCOC controlewoord poort 0
4030H PARC10 parallelpoort 10
4031H PARC11 parallelpoort 11
4032H PARC12 parallelpoort 12
4033H PARC1C controlewoord poort 1
4040H INTCON interruptcontroller
4041H INTCON+1 interrupt masker
4050H TIMCNT timer/counter 0
4051H TIMCNT+1 timer/counter 1
4052H TIMCNT+2 timer/counter 2
4053H TlMCNT+2 controle woord timer/counter
Bovenstaande adressen zijn allen gedefinieerd in
het segment lOSEG. Van be lang zijn verder neg een
aantal adressenr die in segment STACK gedefinieerd
z~Jn en die gereserveerd zijn veer de sprengadressen
van de verschillende interrupts:
ADRES NAAM FUNKTIE
3FDOH TRAP sprongadres voor trap interrupt
3FD4H lNT55 sprongadres voer rst 5.5 interrupt
3FD8H INT65 sprongadres voor rst 6.5 interrupt
3FDCH lNT75 sprongadres voor rst 7.5 interrupt
3FEOH lOAD sprongadres voor interrupt 0
3FE4H l1AD sprongadres voor interrupt 1
3FE8H l2AD sprongadres voor interrupt 2
3FECH 13AD sprongadres veor interrupt 3 (
3FFOH 14AD sprongadres voor interrupt 4
3FF4H 15AD sprongadres voor interrupt 5
3FF8H 16AD sprongadres voor interrupt 6
3FFCH l7AD sprongadres voor interrupt 7
Op al deze adressen bevindt zich een JMP
instruktie ( C3 hexadecimaal). De gebruiker dient op
de volgende twee geheugenplaatsen het beginadres voor
PID-regelaar pag. 6
bijvoorbeeld interrupt 4 gebruikt en begint de
bijbehorende interruptservice routine op adres 3800H, dan dient de gebruiker na de JMP instruktie, die de monitor al ingevuld heeft, het adres 3800 in te vullen: ADRES 3FFOH 3FF1H 3FF2H NAAM 14AD 14AD+1 14AD+2 CODE C3 00 38
Na deze korte toelichting, zullen de, in de volgende hoofdstukken besproken I programma's voor de
gebruiker begrijpbaar zijn. Enige ervaring met het programmeren in assembler is echter weI een vereiste. Op datgene, wat in dit hoofdstuk over het gebruik van symbolische adressen gezegd is, wordt in hoofdstuk 9 uitvoeriger teruggekomen, waarbij het behandelde in
3 Het hoofdproqramma REGEL
In dit hoofdstuk en in aIle andere nu volgende hoofdstukken zal na een korte inleidende tekst steeds eerst de flowchart van het betreffende programmadeel
afgebeeld worden. Hieruit kan de opbouw van het
programma het beste afgeleid worden. Daarna wordt de letterlijke listing van het programma afgedrukt. De programmatekst wordt steeds vooraf gegaan door een heading, waaruit de naam, de input, de output, de subroutines die aangeroepen worden, de registers en de vlaggen die vernietigd worden en de funktie van het programma snel afgelezen kunnen worden. Verder is
iedere programmaregel voorzien van uitgebreid
commentaar.
Het hoofdprogramma "REGEL" dient vanuit een interrupt service routine aangeroepen te worden. Deze routine wordt in het vervolg "ACTION" genoemd. Binnen ACTION dient allereerst het verschil bepaald te worden
tussen de gewenste waarde en de gemeten waarde:
e=r-y. Dit foutsignaal fungeert dan als ingang van
REGEL. ACTION vervult dus de funktie van
verschilnemer en eigenlijk regelorgaan, zoals dat in figuur 1 (hoofdstuk 1) in totaliteit als regelaar gedefinieerd is. In het hoofdprogramma "REGEL" worden de regelparameters K, Ti en Td uit het geheugen gehaald en onderzocht. Wanneer een van deze waarden 0
is, betekent dat, dat de betreffende aktie niet
genomen dient te worden (hierbij wordt de afspraak gehanteerd, dat als Ti=O, dit eigenlijk betekent dat Ti oneindig groot is). Dan wordt binnen REGEL in het geval K=O bit 2 van NOPID 1 gemaakt, in het geval Ti=O wordt bit 1 van NOPID 1 gemaakt en in het geval Td=O, wordt bit 0 van NOPID 1. Wanneer NOPID dus de waarde 7 (00000111B) heeft, wil dat zeggen, dat de hele
regelaar buiten werking is gesteld, en dat de
terugkoppellus, waarin de regelaar zich bevindt (zie figuur 1, hoofdstuk 1) geopend is. Ret testen of NOPID de waarde 7 heeft gebeurt binnen de interrupt service routine ACTION. Is NOPID inderdaad 7, dan wordt de gewenste waarde rechtstreeks naar het proces gestuurd. Dit geeft dus de mogelijkheid om ook het gedrag van het ongeregelde proces te onderzoeken.
Zijn de parameters K, Ti en/of Td ongelijk 0, dan worden respektievelijk de subroutines PROPOR, INTEGR en/of DIFFER aangeroepen. Ret zal duidelijk zijn, dat PROPOR de proportionele regelaktie voorstelt, INTEGR
PID-regelaar pag. 8
de integrerende en DIFFER de differentierende aktie. Het ingangssignaal van de regelaar dient bij aanroep van regel op de geheugenplaatsen HBY.REGEL en LBY.REGEL klaar te staan. Dit getal kan dus 16 bit groot zijn. HBY bevat het most significant byte en LBY het least significant byte. REGEL verwacht verder
de beginvoorwaarden van de integratiestap op de
adressen STIH.REGEL en STIL.REGEL en van de
differentiatiestap op de adressen STDH.REGEL en
STDL.REGEL. Het resultaat van REGEL bestaat uit de superpositie van de drie regelakties PROPOR, INTEGR en DIFFER en staat na afloop op de adressen RESH.REGEL en RESL.REGEL.
Op de volgende bladzijden bevinden zich de
fig.2 Flowchart van routine REGEL y GET K RESULT IN R£SH,R£SL ONE: RESH,RESL ADD RESULT TO RESH,RESL END:
100 200 300 400 500 600 700 800 90Q 1000 1100 1200 1210 1300 1400 1500 1hOO 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 4100 4200 4300 4400 4500 4600 4700 4800 4900 5000 5100 5200 5300 5400 5500 5hOO PID-reqelaar paq. 10
Listing van routine REGEL
, *************************-** ************O(-If**************************** ,FUNCTION: j INPUTS: J I OUTPUTS: ,CALLS: ,DESTROYS: I DESCRIPTION: REGEL
HBY.LaY = SIGNAAL Y(16 BIT)
STIH,STIL - BEGINWAARDE Yeo) VOOR INTEQRATIE (16 BIT) STUH. STDL = BEGINWAARDE Yeo) VOOR DIFFERENTIATIE <16 BIT> SAMT
=
SAMPLE TIJD (8 BIT)PROP - PROPORTIONELE KONSTANTE (8 BIT) INTT • INTEGRA TIE TIJD (8 BIT)
DIFT = DIFFERENTIATIETIJD (8 BIT)
RESH.RESL
=
0 (RESULTAAT OP 0 INITIALISEREN) RESH.RESL = HET (AFGERONDE) RESULTAAT (.t6 BIT)NOPID = BITS 2. 1 EN 0 ZIJN 1. ALS RESP. P-O, 1-0 EN D-O
(1-0 BETEKENT Ti=ONEINDIO GROOT)
ADDDD.PROPOR. INTEGR. ADDEC, DIFFER EN WIssnD ALL REGISTERS AND ALL FLAGS
REGEL FUNGEERT ALS P!D-REGELAAR
DE REGELAKTIE IS O?GESPLITST IN EEN PROPORTIONELE.
EEN DIFFERENT! ERENDE EN EEr~ INTEGRERENDE AKTIEI
ZIE VOOR DE WISKUNDIGE FORMULES DE SEGMENTEN PROPOR, IN1EGR EN DIFFER
~IANNEER GEEN VAN DE DRIE AKTIES CNDERNOMEN DIENEN TE WORDEN (DUS P=I=D=O), DAN aEVAT NOPID NA AFLOOP 07H ALS TEKEN. OAT DE TERUGKOPPELLUS NIET AANWEZIG IS
I ************************~ *********9****** .... ·"'-1/ *****it******iI********* I
•
BEGI: LXI MOV ORA JNZ LXI MVI .JM? PAKTIE: CALL LXI MOV LXI MOV ONE: LXI MOV ORA JNZ LXI MOV ORI MOV JNP IAKTIE: CALL LXI NDV LXI NDV C/\LL MOV LXI MOV H.PROP AIM A PAKTIE H,NOPID M,04H ONE BEGI.PROPOR H. RESl-{ M.D H.RESL M,E H.INTT A,M A IA~~TIE H,NOPID A,/,! 021; 11, t\ TWO . BEG!. INTEGR H.RESH D,M H,RESL Ed'1 BEGI.ADDEC M.E H,RESH M.D I HAAL 01' ~~ I KIJK OF K=OIALS K NIET NUL. DOE P AKTIE
JNOPID GEEFT AAN OF p, I OF D NUL ZIJN
1 BIT 2 WORDT 1. WANT P-O
IGA VERDER MET EVENT. I AKTIE IALS K NIET NUL DOE P REGELING 12ET RES. 01' RESH,RESL
I KI,..1K OF INTT NUL IS'
JALS I NIET NUL, DOE I AKTIE
1 NOPID GEEFr AAN OF P, I OF D NUL ZIJN
IBIT 1 WORDT I. WANT 1=0
iSCHRIJF NQPID IN GEHEUGEN IGA VERDER MGT EVENT. D AKTIE ,VOER UIT I REGELING
iRESULTAAT I-AKTIE STAAT NU IN BC iRESULTAAT P-AKTIE STAAT NU IN DE IBEREKEN RESULTAAT P+I-AKTIE
Listing van routine REGEL
~700 TWO: LXI H.DIFT
5BQO HOV A,M
5900 ORA A iKIJK OF DIFT NUL IS
6000 "NZ DAKTIE I ALe D NIET NUL. DOE D AKTIE
6100 LXI H, NOPID I NOPID GEEFT AAN OF P. I OF D NUL ZI.,JN
6200 MOV A.M
6300 ORI 01H J DIT 0 WOR['T 1, WANT D"O
6400 MOV M.A .SCHRI"F NOPID IN GEHEUGEN
6500 "MP END I VERLAAT REGEL
6600 OAKTIE: CALL DEGI.DIFFER
6700 LXI H.RESH IRESULTAAT D-AKTIE STAAT NU IN BC
6800 MOV D.M
6900 LXI H.RESL
7000 MOV E.M JRESULTAAT P+I-AKTIE STAAT NU IN DE
7100 CALL BEGI. ADDEC I TEL RES P+I- BIJ RES D-AKTIE OP
7200 LXI H,RESH
7300 MOV M,D
7400 LXI H,RESL
7500
MOV
M.E IRES P+l+D-AKTIE STAAT NU IN RESH.RESL7600 END: RET 7700 SOMH: DS 1 7800 SOl'lL: OS 1 7900 STIH: DS 1 8000 STIL: DS 1 8100 STDH: DS 1 8200 STDL: DS 1 8300 HBY: DS 1 8400 LBY: OS 1 8500 PROP: OS 1 BbOO INTH: OS 1 8700 INTL: OS 1 8800 INTT: DS 1 8900 DIFT: OS 1 9000 BEE: OS 1 9100 CEE: OS 1 9200 RESH: os 1 9300 RESL: DS 1 9400 SAMT: OS 1 9500 NOPID: DS 1
PID-regelaar pag. 12
4 De routines PROPOR. INTEGR en DIFFER
4.1 Inleiding
Het programma REGEL roept de subroutines PROPOR,
INTEGR en DIFFER aan. Deze routines berekenen
respektievelijk het resultaat van de proportionele aktie, de integrerende aktie en de differentierende
aktie. Het totale resultaat wordt binnen REGEL
berekend door superpositie van de drie deelresultaten, omdat de ideale PID-regelaar een parallelschakeling van de drie elementaire akties is. Bij het optellen van de deelresultaten, worden verder binnen REGEL nog de subroutines ADDBD, ADDEC en WISSBD aangeroepen. Deze routines worden echter ook binnen PROPOR, INTEGR en DIFFER gebruikt, zodat ze als routines van een lager nivo beschouwd worden. Deze routines worden, tezamen met de andere rekenroutines en de overige hulproutines in de volgende hoofdstukken besproken.
In dit hoofdstuk komen achtereenvolgens alleen de routines PROPOR, INTEGR en DIFFER aan de orde.
4.2 De routine PROPOR
De subroutine PROP OR berekent het proportionele deel van de regelaktie. De proportionele konstante K staat op geheugenplaats PROP.REGEL en is maximaal
a
bit groot. De waarde van het verschilsignaal e staat in de registers HBY.REGEL en LBY.REGEL en is dus 16 bit groot. Het resultaat van de P-aktie: x=K*e staatna afloop in de registers D en E. De
vermenig-vuldiging wordt in 1-complementnotatie uitgevoerd door de subroutine MULECO.
100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300
fig.3 Flowchart van routine PROPOR
GET P
GET E
Listing van routine PROPOR
,********************«******************* .... *************************** I FUNCTION: PROPOR
J INPUTS: HBY.LBY AND PROP (ALL • REQEL)
. ; OUTPUTS: DE
I CALLS: MULECO
I DESTROYS:
; DEseR IPTION:
g,C.D AND E
PROPOR MULTIPLIES PROP. REGEL WITH HBY,LBY.REGEL:
,****************************************,,~~***************************
J
nEGI: LXI. H,PROP.REQEl.
MOY E,M MVI 0,0
LXI H. HBY. REGEL, MOY 8,M
LXI H,LDY. REGEL MOV C,M
CALL BEGI.MVLECO RET
PID-regelaar pag. 14
4.3 De routine INTEGR
De subroutine INTEGR berekent het integrerende deel van de regelaktie. De integratietijd Ti staat in geheugen INTT.REGEL (1 byte groot). De waarde voor e(nT) staat bij aanroep van lNTEGR in de registers HBY.REGEL en LBY.REGEL. De waarde voor e(nT-T) staat
in de registers STlH.REGEL en STlL.REGEL. De
sampletijd Ts staat op geheugenplaats SAMT.REGEL (1 byte groot). Het resultaat:
n
x. (nT)
=
1-* [ T *eCkT) + e(kT - T)1 Ti k=1 s 2
staat na afloop in de registers B en C. De vermenig-vUldiging wordt uitgevoerd door de subroutine MULECO, de deling door de subroutine DIVECO. Beide routines werken in 1-complement notatie. De beide benodigde sommaties worden berekend door de subroutine ADDEC. Om rekentijd te besparen wordt de vermenigvuldiging 2*Ti niet binnen INTEGR uitgevoerd. Dit getal heeft namelijk een vaste waarde voor elke integratiestap.
Zou de vermenigvuldiging binnen INTEGR uitgevoerd
worden, dan zou dat voor elke integratiestap gebeuren,
omdat REGEL en dus ook INTEGR telkens na een
sampletijd Ts aangeroepen wordt. De gebruiker dient dus de vermenigvuldiging 2*Ti in zijn initialisatie-routine eenmalig te bepalen. Het resultaat van deze berekening dient op de geheugenplaatsen INTH.REGEL en
fig.4 Flowchart van routine INTEGR GET E(nTl GET EtnT-TI SAVE EhIT) AS l(nT-T, GET SUM (nT-T) SAVE SUM(nTl AS SUM(nT-T) GET T.
100 200 300 400 500 bOO 700 900 900 1000 1100 1200 1300 1400 1500 1600 1700 1900 1900 2000 2100 2200 2300 2400 2500 2bOO 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3900 3900 4000 4100 4200 4300 4400 4500 4600 4700 4800 4900 J FUN<:TION: J INPUTS: s OUTPUTS: 1 CALLS: J DESTROYS: I DESCRIPTION: PID-regelaar Psg· 16
Listing van routine INTEGR
INTEOR
STIH,sTI~HnY,LnY.INTH.INTL.SOMH.SOML AND SAMT (ALL . REGEL) BC
ADDEC.WI$SBD.DIVECO AND M~LECO B.C,D,E.~L.A AND THE FLAGS
INTEGR CALCULATES THE RESULT OF AN INTEGRATION ACCORDING TO SIMSON'S RULE:
1 n
BC ---*T5*SUM {Y(nT)+V(nT-T» 2*Ti 1=1
J *****************************************.JI .... **************************
I
BEGI: LXI H.HBY.REGEL, .HAAL OP NIEUWE WAARDE VAN Y MOV B,M
LXi H,LBY.REGEL
MOV C. M .NIEUWE Y STAAT IN BC LXI H. STIH. REGEL .HAAL OP VORIGE WAAROE v MOV D,M .ZET HO-BYTE OUDE Y IN D
MOV M.B IIET NIEUWE Y OP PLAATS VORIGE Y LXI H.STIL.REGEL
MOV E.M • lET LO-BYTE OUDE Y IN E
MOV M.C IZET NIEUWE Y OP PLAATS VOnIGE Y CALL BEGI.ADDEC I TEL OUDE V EN NIEUWE V OF
LXI H,SOMH.REGEL I t1f'AL OF SOM MOV 13.M
LXI H.GOML.REGEL MOV C.M
CALL BEGI. ADDEC J TEL RES. 01' DI'} SOM
LXI H,SOMH.REGEL ,ZET RESULTAAT IN GEHEUGEN MOV M,D
LXI H, SOML. REGEL MOV M.E
CALL BEGL WISSBD .RESULTAAT STAAT NU IN BC LXI H. I NTL. REGEL
MOV E.t'l
LXI H.INTH.REGEL
MOV D.I'I 12*Ti STAAT NU IN DE
CALL BEGI.DIVECO I DEEL DOOR 2*T1
LXI H,SAMT.REGEL IRESULTAAT STAAT IN BC NOV E,M
MVI 0,0 ; Ts STAAT NU IN DE.
CALL BEGI.MULECO IVERMENIGVU~DIQ MET Ts
CALL BEGI. WISSBD iZET RESULTAAT IN BC RET
4.4 De routine DIFFER
De subroutine DIFFER berekent het
differentierende dee 1 van de regelaktie. De
differentiatietijd Td staat in geheugen DIFT.REGEL (1
byte groot). De waarde voor e(nT) staat op
geheugenplaatsen HBY.REGEL en LBY.REGEL. De waarde voor e(nT-T) staat in de geheugens STDH.REGEL en STDL.REGEL. De sampletijd Ts staat in SAMT.REGEL (1 byte). Het resultaat:
xd(nT)
=
T *e(nT) - e(nT - T)d Ts
staat na afloop in de registers B en C en is dus 16 bit groot. De vermenigvuldiging en de deling worden
in 1-complement notatie uitgevoerd respektievelijk
door de routines MULECO en DIVECO. Ret verschil e(nT) - e(nT-T) wordt berekend door de subroutine SUBBEC. Ook deze berekening vindt in 1-complement notatie plaats.
PID-reqelaar
fig.S Flowchart van routine DIFFER
GET E(nT) GET E (nT. T) SAVE E(nT) AS E(nT-r) GET T. paq. 18
100 200 300 400 500 600 700 eoo 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700
Listing van routine DIFFER
---"--,***************************************** ... ***************************
; FUNCTION: DIFFER
I INPUTS: STDH.STDLtHBYtLBY,DIFT AND SAMT (ALL . REGEL)
• OUTPUTS: BC
I CALLS: SUDBEC,WISSBD,MULECO AND DrVECO J DESTROYS: S, C. D. E. H ,6ND L
,DESCRIPTION: DIFFER CALCULATES A DIFFERENTIATION ACCORDING TO: NEW Y - OLD Y BC -
Td*""---T5 J*******************************************.*************************** I I I BEGI: LXI MOV LXI MOV LXI MOV MOV LXI MOV MOV CALL LXI MOV MVI CALL CALL LXI HOV MVI CALL RET H.HBY.REGEL 8tM H.LDY.REGEL C.M H.STDH.REGEL D.M M.S H.STDL.REGEL E.M M.C BEGI.SUBBEC H.DIFT.REGEL e.M D.O BEGI.MULECO BEQI.WISSDD H.SAI'IT.REG8.. E.M D.O 13E01. DIVECO,HAAL OP NIEUWE WAARDE VAN Y INIEUWE Y STAAT NU IN Be iHAAL OP VORIOE WAARDE VAN V ,ZET HO-BYTE VORIGE Y IN D .1ET NIEUWE Y OP PLAATS VORIGE Y 12ET LO-BYTE VCRIGE V IN E
,ZET NIEUWE V OP PLAATS VORIGE Y !TREK OUDE Y VAN NIEUWE Y AF IHAAL OP DIFF. TI~D
IVERMENIGVULDIG RES. MET DIFF.TI~D
; ZET RES IN REG S. C ; HAAL OP SAI"iPLET I ~D
PID-regelaar paq. 20
5 De routines MULECQ en VERM
5.1 Inleiding
De routines PROPOR, INTEGR en DIFFER maken allen gebruik van verschillende rekensubroutines. In dit
hoofdstuk worden de vermenigvuldigingssubroutines
besproken. Voor aIle rekenkundige bewerkingen wordt gebruik gemaakt van de 1-complement notatie. V~~r de vermenigvuldiging van twee 16-bit getallen worden de routines MULECO en VERM gebruikt.
5.2 De routine MULECO
Wanneer twee 16-bit getallen met elkaar vermenig-vuldigd dienen te worden, moeten deze getallen bij aanroep van de routine MULECO in de registerparen B,C en D,E staan. MULECO gebruikt de subroutine VERM om de eigenlijke vermenigvuldiging uit te voeren. VERM kan echter aIleen twee positieve getallen met elkaar
vermenigvuldigen. MULECO neemt daarom het
1-complement van de operanden indien dezen negatief z~Jn. Daarna roept MULECO de routine VERM aan, die de twee, nu beide positieve getallen met elkaar vermenig-vUldigt. Tenslotte neemt MULECO dan het 1-complement van het resultaat van deze vermenigvuldiging, indien slechts een van beide operanden negatief was, om zodoende de uitkomst in dat geval negatief te maken.
fig.6 Flowchart van routine MULECQ VEIN: OM'UldNT 01 COM'UMENT lac x 01) llEEN: COM'UMENT IC N y COMPLEMENT DE 80TH: VERM: Ie 11 DE
PID-regelaar pag. 22
Listing van routine MULECO
100 200 300 400 500 600 700 800 900 J******************************************~~************************** ,FUNCTION: MULECO lIN?UTS; BC AND DE s OUTPUTS: DE ; CALLS: VERM
sDESTROYS; ALL REGISTERS AND THE FLAGS
I DESCRIPTION: MULECO CALCULATES THE MULTIPLICATION
1000
OF BC AND IE: DE'" BC
*
DETHE CALCULATION USES l-COMPLEMENT NOTATION SO BC AND IE MAY BE NEGATIVE
1100 1200 1300 I
*************************************""****
~~'lf**'lf********************** 1400 1500 1600 1700 1800 1900 2000 J BEg!: 2100 BOTH: 2200 2300 YEEN: 2400 2500 2600 2700 2800 2900 HISS: 3000 3.100 3200 3300 3400 3500 3600 3700 XEEN: 3800 3900 4000 4100 4200 4300 4400 4500 4600 4700 4800 '4900 5000 5100 S200 MOV RLC JC MOV RLC JC CALL RET MOV CMA MOV MOV CI'1A MOV CALL MOV CMA MOV MOV Ci'1A MOV RET MOV CMA MOV MOV CMA MOV MOV RLC ..INC MOV CMf\ MOV MOV CMA MOV -.JMP A.B XEEN A,D YEEN BEG!. VERM A,E E.A A,D D,A BEG!. VERM A,D D,A A.E E,A A,B B,A A,C C,A A,D WISS A,E E,A A.D D,A BOTH iKI-.JK OF Be NEG IS I KI-.JK OF DE NEG ISIBEIDE NU POSITIEF DUS VERMENIQVULDlg iDE WAS NEG. DUS NEEM 1-COMPLEMENT
IER KAN NU VERM. WORDEN
IRES MOET NEG. ZI-.JN DUS NEEM l-COMPL .
JOMDAT BC NEG NEEM l-COMPLEMENT
I KI-.JK OF DE NEG IS
JALSDE POS DAN RES NEG DUS SPRING iALS DE NEG NEEM l-COMPLEMENT
5.3 De routine ~
De routine VERM vermenigvuldigt twee
niet-negatieve 16-bit getallen, die bij aanroep van VERM in de registerparen BC en DE dienen te staan, met elkaar. Het vermenigvuldigen wordt gerealiseerd door eerst bit 0 van registerpaar DE te bekijken. Is dat bit 1, dan wordt BC bij HL opgeteld en daarna wordt HLDE naar rechts geschoven. Is bit 0 van DE=O, dan wordt direkt geschoven. Na 16 keer schuiven bevindt het resultaat zich in HLDE en is dus 32 bit lang.
Omdat aIle overige programmatuur slechts 16 bit
getallen kan verwerken, dient het resultaat van VERM ook 16 bit lang te zijn. Omdat het resultaat verder positief moet zijn, moet ook bit 15 nul zijn. Dat wil dus zeggen, dat, indien HL ongelijk 0 is of indien bit 15 1 is (dus resultaat langer dan 15 bit), DE de waarde 1FFFH dient te krijgen. Het eindresultaat is op deze manier 16 bit lang (bit 15 is 0, orndat het resultaat positief is) en staat in registerpaar DE.
PIO'-regelaar
fig.7 Flowchart van routine VERM
FOUR: DE::: 0 SHIFT:O HL::: Hl+SC ROTATE: ROTATE HLOE RIGHT b15,Hl::: 0 SHIFT: SHIFT> 1 y H N H H OFLOW: DE:: 7FFFH '. paq. 24
5" St.
.,
..
a ..
SI •• 1 . . .u ••
ta •• 13 •• 14 . . IS •• 16 •• 17 ••"
lSI.'..
2 . . . 2111 22 . . 23 •• 2 .... 25" 26 •• 2., •• 2 •• , 2U' 3 . . , 31 . . 3e . . 33., 3 .... 3st.3&"
~1" 3 ••• 3S1 ••...
41 ••4ee.
43 •• 44 •• 45 •• 4S8I 4181...
48 . . st •• 51" 52 •• 53 •• 54 •• 55 . .se ••
57.,
5 . . . SSl . . 6 . . . 6118 62 . . 63 •• 6 .... 861. 6 . . . 67 ••....
6 ...."'"
,CALLS' NOTHING,DESTROYS' A.I.C.D.£ AND THE FLAGS
,DESCRIPTION' VER" CALCULATES THE "ULTIPLICATION OF 8C AND DE , DE • Ie I DE
, IC AND DE flUST IE POSITIVE OR ZERO
J WHEN OVERFLOW OCCURS. THE 16 lIT RESULT IS SET TO 1FFFH
,11 •• 1*1*11.* •• *.*.*11111*1***1**1111**111***1*******."'**"'*11'
I,
,
BEGII ONEI TUO' THREE' ROTATE. PUSH LXI "OU ORA JNZ "OU ORA J% "OU ORA JH2 "OU ORA J2 RUI 6TA"OV
ANI JZ "OV ADDnou
JHC INR "OV ADD "OU "OU RAInov
nou
RAI NOUnou
RAR "OU "OU RARnou
"OV ANI "OV LOA INR STA CPI JH% "OU OR" JHZ "OV OR" JHZnov
RLC JC H H.ltH A.I A ONE A,C A FOUR A,D"
TUO A"E A FOUR","H
SHIFT A"E I1H ROTATE A,L C f..oA THREE H A,H I H,A A.H H,A A,L L.A A"D D"A AlE E,A A,H 7FH H.A SHIFT A SHIFT 160 TWO A,H"
onow
A,L A OFLOW A .. D OF LOU ,INITIALIZE RESULT TO • ,SEE IF 8,C-',IF NOT, SEE IF DE-. ,IF YES. RESULT BECO"ES • ,SEE IF DE-'
,IF HOT. START "ULTIPLIC"TIOH ,IF VES. RESULT IECO"ES •
,SHIFT CONTAINS HR. OF ROTATIONS ,SEE IF lIT • OF DE IS , OR 1
,IF ZERO, THEN ST"RT ROTATIHG ,ELSE FIRST ADD IC TO DE
,ROTATE RIGHT H,L,D,E ONE POSITIOH
,"AKE lIT 15 OF RL ZERO
,UPDATE SHIFT
,SEE IF 16 ROTATIONS DONE ,IF NOT,NEXT ROTATIOH ,SEE IF HL IS ZERO
,IF NOT, OVERFLOW HAS OCCURRED ,IF NOT .. OVERFLOW HAS OCCURRED ,ALSO .IT 15 "UST .E ZERO ,IF .IT 15-1. THEN OUERFLOW
_ _ _ _ _ _ _ _ _ _ --;-_-=-P~I D -J.. v;J ~:.1£,~h~:t=....l _ _ _ _ _ _ _ _ I&::.J . . <J...:::lyL..:. _ _ ... 2_=_6
L-:i.sLing Vdn rouLilie VERM
71 . . POP H
?a •• RET IELSE READY. D.E CONTAINS RESULT
73 ••
onow.
LXI D.?FFFH ,IF OUERFLOW. SET RESULT TO ?FFF7 .... POP H
75 •• RET .
-7&" FOUR' LXI D.'
77 •• POP H
"71" RET
6 De routines DIVECO, DIVIDE, DIVen RNDOFF
6.1 Inleiding
Bij de berekening van de regelkorrekties binnen INTEGR en DIFFER worden ook verschillende delingen uitgevoerd. Deze delingen gelden voor 16-bit getallen
en worden verricht in 1-complementnotatie. Ret
deeltal van het quotient dient bij aanroep van DIVECO in registerpaar B,C te staan, de deler in registerpaar D,E. Bet quotient van BC en DE staat na afloop in registerpaar BC. Er wordt een afronding op gehele
getallen gebruikt. In dit hoofdstuk worden aIle
routines die v~~r de deling nodig zijn, besproken. Dit zijn achtereenvolgens de routines DIVECO, DIVIDE,
DIVen RNDOFF. Deze opsomming is naar nivo
gerangschikt: DIVECO staat dus op het hoogste nivo en roept routine DIVIDE aan. DIVIDE vervolgens roept DIV en RNDOFF aan.
6.2 De routine DIVECO
Bij aanroep van DIVECO dient het deeltal van het te berekenen quotient in registerpaar B,C te staan en weI in 1-complement notatie. DrVECO is volkomen identiek
aan MULECO, wat strukturele opbouw betreft. De
struktuur van de flowchart van DIVECO is dan ook identiek aan de struktuur van de flowchart van MULECG. DIVECO maakt gebruik van DIVIDE. Deze laatste routine kan twee 16-bit, positieve getallen op elkaar delen. Binnen DIVECO wordt allereerst het 1-complement van
het deeltal en/of de deler genomen, indien deze
negatief is. Dan voert DIVIDE de eigenlijke deling uit en daarna neemt DIVECO weer het 1-complement van het resultaat, in het geval dat slechts een van beide getallen negatief was. Bierdoor wordt de uitkomst dan ook negatief gemaakt.
PID-regelaar pag.
fig.S Flowchart van routine DIVECO
YEEN: COMPLEMENT DE COMPLEMENT (BC/OE ) XEEN: COMPLEMENT BC N Y COMPLEMENT DE 80TH: DIVIDE: BCI DE 28
Listing van routine nIVECO 100 200 300 400 SOO 600 700 800 900 I *****************************************.~-***************************
'
,FUNCTION: DIVECO I INPUTS: BC AND DE I OUTPUTS: BC I CALLS: DIVIDEI DESTROYS: ALL REGISTERS
,DESCRIPTION: DIVECO CALCULATES THE DIVISION OF
ae
AND DE BC =< BC/DETHE CALCULATION USES I-COMPLEMENT NOTATION SO BC AND IE MAY BE NEGATIVE
1000 1100 1200 1300 1400 1500 ,1600 1700 '*****************************************~~.*.************************ I 1900 1900 2000 2100 I DEQI: 2200 DOTH: 2300 2400 YEEN: 2S00 2600 2700 2800 2900 3000 WISS: 3100 3200 3300 3400 3500 3600 3700 3800 XEEN: 3900 4000 4100 4200 4300 4400 4500 4600 4700 4800 4900 5000 5100 5200 5300 MOV RLC .JC MOV RLC .JC CALL RET MOV CMA MOV MOV CI'IA MOV CALL MOV CMA MOV MOV CMA MOV RET MOV eMA MOV MOV CMA MOV MOV RLC .JNC MOV CNA MOV MOV CMA MOV .JMP A,B XEEN A.D YEEN BESt. DIVIDE A.E E,A A.D D.A BEQI.DIVlDE A.B B,A A.e C.A Ad:! B.A Ale C,A A.D WISS A,D D.A A.E E,A BOTH IKI.JK OF Be NEG IS ; KI.JK OF DE NEG IS
,SEIDE NO poa. DUS DELEN
IDE WAS NEG .• DUS NEEM 1-COMPLEMENT
J ER KAlil NO O£OEELD WORDEN
IRESULTAAT ~OET NEG. ZI.JN, DUS NEEM l-COMP~.
IOMDAT BC NEG .• NEEI'! l-COMPL.
iKI.JK OF DE NEQ. IS
;ALS DE POS. IS, DAN RES. NEG .• DUS SPRING IALS DE NEG. IS, DAN NEEM l-COMPL.
PID-regelaar pag. 30
6.3 De routine DIVInE
De routine DIVIDE berekent de eigenlijke deling BC/DE.
Het deeltal dient bij aanroep van DIVIDE in
registerpaar B,C te staan, de deler in registerpaar
D,E. Beide getallen dienen positief te z~Jn
(1-complement notatie). Is BC<DE, dan wordt de breuk afgerond op 0 of op 1, door aanroepen van routine RNDOFF. Is BC)DE, dan roept DIVIDE de deelroutine DIV aan, die het gehele deel van het quotient berekent. De rest van de deling wordt daarna afgerond door de routine RNDOFF. Het resultaat van deze afronding (0 of 1) wordt dan bij het gehele deel van het quotient opgeteld, waarmee de deling uitgevoerd is.
fig.9 Flowchart van routine DIVIDE WRONG: MESSAGE: Be:: DE::: 0 IQUAL: RESULT:: 1 RESULT:: 0 RESULT: RESULT·' EXIT:
PID-regelaar pag. 32
Listing van routine DIVIDE
100 J *************************-** ************"" ... *** .. ***********************
200 ,FUNCTION: DIVIDE
300 i INPurs: BC AND DE
400 I OUTPUT: BC AND DE
500 i CALLS: CMPI:m. DIV AND RNDOFF
600 ; DESTROYS: A AND FLAGS
700 I DESCRIPTION: DIVIDE CALCULATES THE DIVISION OF BC/OE-BC
800 BC AND DE MUST BOTH BE POSITIVE OR ZERO
900 IF REST:>=ll2, THEN RESULT ROUNDED OFF UPWARDS
1000 IF REST<l/2. THEN RESULT ROUNDED OFF DOWNWARDS
1100 J:************************-**********************.*********************
1200 l
1300 I
1400 BEG1:
1500 ,CHECK IF DE=O, DIVISION IMPOSSIBLE
1600 1700 1800 1900 2000 2100 COMPAR: 2200 2300 2400 CALDIV: 2500 2600 2700 2300 2'900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 ROUNDO: 4000 4100 4200 EGUAL: 4300 4400 WRONQ: 4500 4600 4700 ADDING: 4800 4900 ,COMPARE Be WITH DE
J IF BC=DE. THEN ANSWER WILL BE 1
i IF BC<DE. THEN CALL SUBROUTINE RNDOFF , IF BC>DE, THEN CALL SUBROUTINE DIV ,SAVE INTEOER PART OF RESULT (Be) IN I MEMORY MEIi0S AND NEMOC
JGET REST OF INTEGER DIVISION (DIV) ; FROM MEMORY RESTH AND RESTL AND sPUT IT IN REGISTERS BAND C
,CALL SUBROUTINE RNDOFF TO ROUND OFF 'REST OF DIVISION AND PUT
; THE INTEGER PART OF THE RESULT ;BACK IN REGISTERS Be
• UPWARD HAS TO BE ADDED TO BC • BC(DE, SO CALL SUBROUTINE RNDOFF
• INTEGER PART AF DIVISION (BC) IS 0 (BC<DE) • UPWARD HAS TO BE ADDED TO BC
• BC=DE. SO RESULT <BC) MUST BE 1
,DIVISOR IS 0: SET RESULT TO ZERO • DIVIDED BY ZERO
6.4 De routine ~
De routine DIV wordt aangeroepen door DIVIDE,
indien BC)DE, met BC en DE beiden positief. DIV
berekent dan het quotient BC/DE. Het resultaat van
deze breuk staat na afloop van DIV in registerpaar BC.
De rest van de deling staat dan in RESTH.DIV en
RESTL.DIV. De deler blijft in DE staan. DIV maakt
gebruik van een aantal subroutines, die meerdere malen
aangeroepen worden. Deze subroutines, DSLEFT, DSRGHT
en DECOMP worden hier niet apart besproken. De
funkties van deze routines volgen duidelijk uit de
listing van DIV, zoals die op de volgende pagina's
afgebeeld staat.
Binnen DIV wordt de deler eerst zolang met 2
vermenigvuldigd, totdat het resultaat groter is dan
het deeltal. Dan wordt door .herhaald aftrekken en
delen door 2 het gehele deel van de deling bepaald,
PID-regelaar pag. 34
Listing van routine DIV 100 200 300 400 500 600 700 BOO 900 ,***************************************** .•• ************************************ ,FUNCTION: DIV 1000 ; INPUTS; I OUTPUTS: I • .-CALlS: ,DESTROYS: J DESCRIPTION: Be, DE
Be, DE AND THE REST OF THE DIVISION IN RESTH,RESTL BC CONTAINS RESULT, DE CONTAINS DIVISOR
CMPBD. DSLEFT, DSRGHT, susao, DECOMP A AND FLAGS
DIV CALCULAiES THE INTECER DIVISION OF BC/DE=BC AND SAVES THE REST OF THE DIVISION IN RESTH,RESTL BC MUST BE GREATER THAN DE (BC>OE)
1100 1200 1300 1400 1500 1600 1700 I ***************************** ************.:1 ... ***********************************
,
1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 AOOO 4100 ; BEQI: 01'111: 01'112: 01V21: 01'113: 4200 D1V4: 4300 41100 4500 4600 4700 4800 4900 5000 5100 5200 5300 5400 5500 5600 OIV6: 5.7()O PUSH PUSH XCHC C ... \LL XCHC ,JC CALL ,;z ';NC LXI C .. 'LL XCI-IQ CALL. lCCHG CALL .JZ .JC CALL INX XTHL CALL XTHL ,;NZ MOV STA MOV STA CM? .JNZ MOV CN? .JNZ II'lX IWI STI\ ST~\ MDV H o OSLEFT 01'115 BEOI.CMPBD EaUDe 01'111 H.O OSLEFT DSRGHT DEGI.CMPBD DIV3 D1V3 BESI.SUBI30 H DECOMP D1V2 Ad} RESTH A,e RESTL E DIV6 A.B D 01'116 H A.O RESTH RESTL nd-l ,SAVE CONTENTS OF HL,SAVE DIVISOR (Be-aC/DE) FOR TESTINQ PURPOSES • FIND MAGNITUDE OF DIVISOR
i MULTIPLY BY TWO
; SET DE IN DE AGAIN
, IF OVER FLO." OCCURS (17 BIT NEEDED) FIX THIS
i SEE IF BC<=OE
iBC A DE ANSWER IS AN INTEGER
sBC>DE CONTINUE LeOKING FOR MAGNITUDE ,SET ANSWER TO ZERO AND START DIVIDING ,MULTIPLY ANSWER BY TWO
i GET DIVISOR
iDIVIDE DIVISOR BY TWO ; RESET DIVISOR
i SEE IF BC<=DE
; IF SO CONTINUE
I CONTINUE
1 SUBTRACT FROM DIVIDEND
i INCREMENT ANSWER
JOET OLD DE FROM STACK AND SAVE HL
I SEE IF THE END IS REACHED
,PUT OLO DE ON STACK AND RESTORE HL ; CONTINUE TO DIVIDE IF NOT
,SAVE H.O.PART OF REST IN RESTH
i SAVE L. O. PART OF REST IN RESTL i CONPARE REST WITH DIVISOR
; IF REST-DIVISOR, THEN INCREMENT ANSWER
i I'lAI.c;E REST ZERO
S800 5900 6000 6100 6200 6300 6400 6500 6600 6700 6800 6900 7000 7100 7200 7300 7400 7500 7600 7700 7800 7900 8000 8100 8<:>00 8300 8400 8500 8600 8700 8800 8900 9000 9100 9200 9300 9400 9500 9600 9700 9800 9900 10000 10100 10200 10300 10400 10500 i0600 10700 10800 10900 11000 11100 ll200 11300 11400 EXT1: EGUDE: EGUDE1: DIV5: MOV POP POP RET LXI XCHQ CALL XCHG CALL XTHL CALL XTHL .JNZ LXI ..IMP XCHQ CALL XCHQ CALL .JMP PID-regelaar pag. 36
Listing van routine DIV
C,L D H H,l DSRQHT DSLEFT DECOMP EGUDE1 B,O DIV4 DSRCHI DSLEFT DIV21 I DONE
,RESTORE RECISTERS. DIVISOR IN DE
i RESTORE HL
I EXIT OF DIV
IANSWER IS AN INTEQER ,FIND POWER OF TWO ,DIVIDE BY TWO ; RESTORE
; MULTIPLY ANSWER BY TWO
ICET OLD DE FROM STACK AND STORE HL ,SEE IF END REACHED
; RESTORE HL AND PUT OLD DE ON STACK
I CONTINUE IF NOT
I SET BC TO ZERO, BECAUSE BC WILL CONTAIN REST
; ANmJER FOUNO CO TO ANSWER HANDLINC ; PREPARE TO DIVIDE DE BY TWO
I DIVIDE BY TWO RESTORIN OVERFLOW
; RESTORE DE
,MULTIPLY ANSWER BY TWO
; ***************************** ************01!'~." _*·If*****************************
,FUNCTION: DSLEFT
INPUT:HL CONTAININQ NUMBER TO BE SHIFTED LEFT OUTPUT:HL SHIFTED LEFT
I DESTROYS: A, FLAGS
I DESCRIPTION: DSlEFT SHIFTS THE CONTENTS OF HL LEFT ONE PLACE.
ZERO'S ARE INSERTED AND THE BIT SHIFTED OUT IS SHIFTED INTO THE CARRY.
;*****************************************~~.********************************** DSLEFT: XRA A MOV A.L RAL MOV L.A MOV A,H RAL MOV H,A RET
,CLEAR A ANO MORE IMPORTANT CARRY FLAC JGET FIRST PART OF WORD TO BE SHIFTED ; ROTATE LEFT
,RESTORE IN WORD REGISTER
1 GET SECOND PART TO BE ROTATED
• ROTATE LEFT USING THE BIT ROTATED INTO THE CARR' iRESTORE HICH PART OF WORD
I******************************************~.~~****************************** ,FUNCTION: DSRGHT i ; DES1ROYS: ; DESCRIPTION:
,
.INPUT:HL TO BE SHIFTED RIGHT OUTPUT:HL SHIFTED RICHT
A. FLAgS
DSRGHT SHIFTS THE CONTENTS OF HL ONE PLACE TO THE RIGHT ZERO'S ARE INSERTED AND THE BIT SHIFTED OUT IS
SHIFTED INlO THE CARRY
;*****************************************~~+****«**************************** DSRGHT: XRA DSRCH1: MOV RAR MOV A A,H H.A
I CLEAR CARRY FLAG
IQET FIRST PART OF WORD TO BE SHIFTED ; SHIFT RICHr
11500 11600 11700 11800 11900 12000 12100 12200 12300 12400 12500 12600 12700 12800 12900 13000 13100 1:;:}200 13300 13400 13500 13600 13700
Listing van routine DIV
A,L • GET LOWER PART OF WORD MOV
RAR MOV
RET L.A
,BHIFT RIGHT USING THE CARRY OF THE PREVIOUS 5HII • RESTORE WORD s*****************************************."****~**************************** ,FUNCTION: DECOMP ,INPUTS: DE.HL • OUTSPVT: DE, HL ,CALLS: NOTHING ,DESTROYS: A, FLAGS
I DESCRIPTION: DECOMP COMPARES THE CONTENTS OF REGISTER DE AND HL
DE<HL CARRY IS SET DE=HL ZERO IS SET
i ********************iHf!lo**********************,:t****************************** DECOI'I?: HOV CMP RNZ MOV eM? RET RESTH: DS 1 RESTL: DS 1 A,D H A,E L 6.5 De routine RNDOFF
,GET HIGH ORDER PART
J SET FLAGS
I IF NOT EGUAL RETURN
; GET LOW ORDER PART
I COMPARE
I RETURN WITH FLAGS SET
Bij aanroepen van RNDOFF bevatten de
registerparen BrC en D,E beiden een positief 16-bit getal. Ret getal in BC dient echter kleiner te z~Jn dan het getal in DE. RNDOFF rondt de breuk BC/DE af op 0 als BC/DE<=1/2 en op 1 als BC/DE)1/2. De geheugenplaats UPWARD bevat na afloop 0 of 1, naar gelang naar boven of naar beneden werd afgerond. Binnen de routine DIVIDE wordt UPWARD opgeteld bij het resultaat van de gehele deling, zoals die door DIV berekend werd.
PID-regelaar pag. 38
fig.11 Flowchart van routine RNDOFF
BC:: 2xBC
N
uP:
UPWARD: 0 UPWARD:: 1
Listing van routine RNDOFF
100
1*****************************************".«**************************
200 ; FUNCTION: RNDOFF
:300 ; INPUTS: Be AND DE. BC<DE
400 ; OUiPUTS: UPWARD
500 ; CALLS: CMPBD
000 iDESTROYS: A AND FLAGS
700 JDESCRIPTION: RNDOFF ROUNDS OFF THE DIVISION BelDE
BOO BC !'lUST BE LESS THAN DE (BC<DE)
900 IF 1>BC/DE>=1/2. THEN UPWARD BECOMES 1
1000 IF 0<BC/DE<1/2. THEN UPWARD BECOMES 0
1100 ;
*****************************************-1:
.~... *******************-******
1200 ) 1300 ; 1400 i 1500 BEGI: 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 UP: 2800 2900 DOWN: 3000 FAC!'.: 3100 3200 3300 UPWARD: PUSH PUSH MOV RLC ANI MOV MOV RilL MOV CALL LXI .JC Mill .JMP t'!VI POP POP RET DB H BA.C J TO I'IAAE COMPAR ISON. MULTIPLY BC BY 2
OFEH J MAKE B ITO ZERO
C.A A.B
EI.A iNOW BC HAS BEEN MULTIPLIED BV 2
BEGI. CMPBD iCOMPARE 2*BC WITH DE
H.UPWARD iUPWARD WILL CONTAIN 1 IF 1:>SC/DE>-1/2
DOWN iELSE (0<SC/OE<1/2) ZERO
M.OIH BACK M,OOH B ; RE"STORE Be H I RESTORE HL 1
7 De routines ADDEC. SUBBEC. ADDBD en suaBD
7.1 Inleiding
Naast de, in de voorgaande hoofdstukken besproken
vermenigvuldigings- en delingssubroutines, maken de
routines INTEGR en DIFFER gebruik van optel- en
aftrekroutines ADDEC en SUBBEC. Deze twee routines bepalen respektievelijk de som en het verschil van twee 16-bit getallen. AIle berekeningen gebeuren weer in 1-complement notatie.
7.2 De routine ADDEC
De routine ADDEC sommeert twee 16-bit getallen, die bij aanroep van ADDEC in de registerparen BC en DE dienen te staan. Het resultaat BC+DE staat na afloop van ADDEC in registerpaar DE. De getallen dienen in 1-complement notatie te staan. ADDEC maakt gebruik van de routines ADDBD en SUBBD. ADDBD sommeert twee niet-negatieve getallen en SUBBD bepaalt het verschil tussen twee niet-negatieve getallen.
PID-regelaar pag. 40
fig.12 Flowchart van routine ADDEC
N
100 200 300 400 500 600 700 BOO 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 :1100 3200 3300 3400 3500 3600 3700 3800 3900 4000 4100 4200 4300 4400 4500 4600 4700 4900 '4900 ~ooo 5100 5200 5300 5400
Listing van routine ADDEC
I ***************** .. ***********************"<~ ... **** .. *********************
JFUNC1ICN: ADDEC
• INPUTS: BC AND DE
,OUTPUTS: DE
I CALLS: C~WBDIADDB~SUBBD AND WISSBD
J DESTROYS: ALL REGISTERS
I DESCRIPTION: ADDEC CALCULATES THE ADDITION OF DE == BC + IE
THE CALCULATION USES 1-COMPLEMENT NOTATION SO BC AND IE MAY BE NEGATIVE
; *it***********************_** *****_*****'(.,.-+*************_*********** I J BEQI: DNEG: BKLE: BNEQ: A,B BNEQ A,D DNEG BEGI.ADDBD A,D D,A A.E E,A BEQI.CMPBD IJKLE BEGI. SVSBD FEG 1. !>II SSSD BEGI.WISSBD BEGI.SUBBD A.e E,A A,B D,A C,A A,D DENE BEGI. CI'IPBD DKLE
sALS D.C <0 SPRING NAAR BNEG ;ALS D,E <0 SPRING NAAR DNEG ,ALS BEIDE POS DAN CPTELLEN
IB,C>O EN D,E <0
,NEEM l-COr1PLEMENT
,ALS D,C <D,E SPRING IALS D.C > D.E DOE D,C-D,E J RES. IN D, E
IALS D.C <D,E WISSEL a,C-D,E I DOE D, C-D, E
,NEEM 1-COKPLEMENT VAN B,C ;ZET RES. IN D,E
IMAAK CARRya1. WANT RESULTAAT IS NEG ;ALS B,C <0 NEEM 1-COMPLEMENT
;KI~K OF D,E NEG
IALS D.E <0 SPRING NAAR DENE JKI-lK OF DE < BC 5500 DGRO: 5600 MOV RLC .Ie MOV RLC ..Ie CALL RET MOV CMA MOV MOV CNA MOV CALI.. ..IC CALL CALL RET CALL CALL MOV CNA MOV MOV CMA MOV STC RET MOV CMA MOV MOV CMA MOV MOV RLC .)C CALL JNC CALL CALL CALL BEG!. WISSBD BEGl. SUBnD BEG!. WIssnD
J ZO NEE: ~ISSEL D,C MET DIE COE a.e-D,E
PID-regelaar pag. 42
Listing van routine ADDEC
5800 RET
5900 DKLE: CALL. BEGI.SUBBD J 20 .JA: DOE S.C-D.E
6000 MOV A.B
6100 CMA NEt::M I-COMPLEMENT
6200 MOV D,A
6300 MOV A,C RES. IN D,E
6400 CMA
6500 MOV E,A
6600 STC s MAAK CARRY-1, WANT RESULTAAT IS NEG
6700 RET
6800 DENE: Mev A.D ;ALS D,E <0 NEEM I-COMPLEMENT
6900 CMA
7000 MOV D,A
7100 MOV A,E
7200 CMA
7300 Mev E,A
7400 CALL BEGI. ADDRD sTEL OP B.c + D.E
7500 Mev A.D , NEEM 1-COMPLEMENT
7600 CMA
7700 MOV D,A
7800 MOV, A.E
7900 CMA
8000 Mev E,A
Bl00 STC I MAAK CARRY-1. WANT RESULTAAT IS NEG
7.3 De routine SUBBEC
De routine SUBBEC berekent het verschil van twee
16-bit getallen. Deze twee getallen dienen bij
aanroep van SUBBEC in de registerparen BC en DE te staan. SUBBEC bepaalt dan het verschil BC-DE, dat na afloop in registerpaar DE komt te staan. De bereking gebeurt in 1-complement notatie. De getallen mogen
dus ook negatief z~Jn. De routine SUBBEC
complementeert de inhoud van registerpaar DE en roept dan de routine ADDEC aan, die dus BC+(-DE) berekent.
fig.13 Flowchart van routine SUBBEC
COMPLEMENT DE
100 200 300 400 500 600 700 sao 900 1000 1100 1200 1300 1400 1500 1600 1700 18'}0 1900 2000 2100 PID-regelaar pag. 44
Listing van routine SUBBEC
.***************************************** ••• ***************************
I FUNCTION: SUB SEC
iINPUTS: B,C AND D,E
,OUTPUTS: D.E
lCALLS: ADDEC
,DESTROYS: B.C AND A
I DESCRIPTION: SUBSEC CALCULATES DE - BC - DE
THE CALCULATION USES1-COMPLEMENT NOTATION SO BC AND DE MAY BE NEGATIVE
I ***************************** ************." .... *************************** i I I BEGI: MOV eMA MOV MOV CMA MOV CALL RET E,A A,D D,A BEQI.ADDEC 7.4 De routine ADDBD
De routine ADDBD bepaalt de som van de
registerparen BC en DE. Hierbij dienen BC en DE bij aanroep van ADDED niet-negatieve 16-bit getallen te
bevatten. Wanneer bij het optellen van de beide
regis'terparen overflow naar bit 15 of 16 optreedt, ~dan wordt het resultaat maximaal positief gemaakt, dus
1 . .
e ••
3 •• 4 •• 5 •• S •• 7t....
U. te •• u .. 12 •• 1~" . t4"J'"
1",
n ..
1 . . ' lli11"a,.,
as"
al ••H ••
il~'==
21 . .a ...
I •••fig.14 Flowchart van routine ADDBD
o:::a·o·cy
END
Listing van routine ADDBD
, ••••••••••••••• 1.1* •• *1 •• *1* ••• 1**11111*1** •• *1**.11*1.1**11.1111*111.1 ,FUNCTION' ADDID
JINPUTS, Ie AND DE ,OUTPUTS' DE AND ADR.SET ,CALLS' SET
JDESTROVS' A.I,C,DE AND THE FLAGS
,DESCRIPTION' ADDJD CALCULATES THE ADDITION OF Ie AND DE' J DE • Ie + DE
J IC AND DE "US, IE POSITIVE OR ZERO
J IF CARRV
occuRs
DURI"G ADDITION, OR lIT 15 IECO"ESJ 1. THE" D,E IS SET TO 1FFFH ("AX. POSITIUE)
' •••• 111.1,.,.1111.11111.11111111111111111.1111111111111"",11".11,., J J J IEGla EHDI TUO' PUSH MU ADD "OU "OU AOC
"aU
JC RLC JC POP RET LXI JIIPPIO-regelaar pag. 46
7.5 Oe routine SUBBO
Oe routine SUBBO bepaalt het verschil van de registerparen BC en DE. Het resultaat BC-DE komt na afloop van SUBBO in het registerpaar BC te staan. BC en OE dienen bij aanroep niet negatieve getallen te bevatten en er moet steeds gelden dat BC>=OE.
fig.15. Flowchart van routine SUBBD
c=c-£
a=B-D
Listing van routine SUBBD
100 .****************************************.( •• **************************
200 I FUNCT ION: SURBD
300 .IN?UTS: BC AND DE
400 J OUTPUTS: DC
500 ) CALLS: NOTHINO 600 ,DESTROYS: I\,B,C.D AND E
700 J DE~RIPTION: SUEnD CAlClA...ATES THE SUBTRACTION
800 OF BC AND IE: BC .. BC - DE
900 BC AND DE MUST BE POSITIVE OR ZERO
1000 I *****************************************.'C ... *« ************************* 1JOO J 1200 1300 1400 1500 1600 1700 1800 1900 2000 I ;
BEGI: MOV A,e SUB E MOV C,A MOV A,B SBB D MDV B.A RET
PID-regelaar pag. 48
8 De routines CMPBD en WISSBD
8.1 Inleiding
In dit laatste hoofdstuk over de programmatuur
van de PID-regelaar worden de routines CMPBD en WISSBD
besproken. Deze be ide routines zijn van het laagste
nivo en worden door routines uit aIle bovenliggende
nivo's vaak aangeroepen. De routines CMPBD en WISSBD
worden dus zowel in de routines PROPOR, DIFFER en
INTEGR aangeroepen, als ook in de rekenroutines, zoals
DIVECO en MULECO, en in de optel- en aftrekroutines
ADDEC en SUBBEC.
8.2 De routine CMPBD
De subroutine CMPBD vergelijkt de inhoud van
registerpaar BC met de inhoud van registerpaar DE.
Wanneer BC=DE is, dan wordt de zero-flag geset.
Wanneer BC(DE is, dan wordt de carry-flag geset.
fig.16 Flowchart van routine CMPBD
COMPARE
B WITH 0
COMPARE
C WITH E N
100 200 ::300 400 500 600 100 SOO 900 1000 1100 1200 1300 1400 1500 1600 1700 1 SOl) 1900 2000
Listing van routine CMPBD
1 ******************************'It********** ... *************************
I FUNCTION: CMPBD
I INPUTS: Be AND DE
JOUTPUTS: nc.DE, THE CARRY· AND THE ZERO F~AQ
sCALLS: NOTHINO
'DESTROYS: A AND THE FLAGS
I DESCRIPTION: CMPBD COMPARES BC WITH DE
IF BC - DE. THEN THE ZERO FLAG IS SET
IF BC < DE. THEN THE CARRY FLAG IS SET
1*****************************************.*.**************************
BEQ!: MOV A.B
CM? D
,,)2 NEXT
RET
NEXT: MOV A.C
CMP E
RET
8.3 De routine WISSBD
De routine WISSBD verwisselt de inhoud van
registerpaar BC met de inhoud van registerpaar DE.
fig.17 Flowchart van routine WISSBD
STORE
B C
BC::; DIE
DIE "" STORED BC
100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 PID-regelaar pag. 50
Listing van routine WISSBD
f******************************************.~***«*********************** JFUNCTION: WISSBD j IN~UTS: BC AND DE iOUTPUTS: BC AND DE iCALLS: NOTHING I DESTROYS: A
I DESCRIPTION: WISSBD EXCHANGES THE CONTENTS OF BC AND DE
l**********************.*******.*********~*.***************************
J
!lEGI: MOV A.B
MOV e.D /'IOV D,A MOV A.e MOV C,E MOV E,A RET
9 Aanroepen PID-regelaar door de gebruiker
Het programma REGEL fungeert dus als een
PID-regelaar, waarbij de regelparameters K, Ti en Td op een eenvoudige W1Jze, software matig, ingesteld kunnen worden. Deze flexibiliteit is gewenst, wanneer een vorm van adaptief regelen gewenst wordt. Hierbij dienen de regelparameters afhankelijk van het proces continu aangepast te kunnen worden. Dit aanpassen kan gebeuren door in het gebruikersprogramma de adressen PROP.REGEL, INTT.REGEL en/of DIFT.REGEL een nieuwe waarde te geven. Van adaptief regelen is sprake,
wanneer er software matig gereageerd wordt op
veranderingen in de eigenschappen van het te regelen
proces. Deze eigenschappen dienen dus gemeten te
worden. Er zal dan een algoritme dienen te bestaan, waarmee het mogelijk is, voor aIle waarden van de
procesparameters, de optimale regelparameters te
bepalen. Er zal dan waarschijnlijk overgegaan dienen te worden naar een systeem met twee microcomputers. Een microcomputer zal dan uitsluitend de regelakties
uitvoeren bij bepaalde instelling van de
regelparameters. De andere microcomputer zal dan
adaptief de regelparameters veranderen en deze waarden
aanbieden aan de regelcomputer. Een andere
mogelijkheid is het overgaan op een 16-bit
microcomputer, die door Zl]n hoge snelheid be ide funkties gelijktijdig kan vervullen. Op dit moment wordt er dan ook hard gewerkt aan de implementatie van het regelprogramma op een 16-bit microcomputer.
REGEL zal in het algemeen aangeroepen worden vanuit een interrupt service routine, omdat steeds na de sampletijd Ts een nieuwe regelkorrektie berekend
dient te worden. De sampletijd Ts kan bij een
microcomputer- ingesteld worden door een tijdsinterrupt
te gebruiken. Een van de timer/counters van de
programmable interval timer 8253 wordt dan zodanig geinitialiseerd, dat op de uitganq van de betreffende counter (de 8253 bevat drie van deze counters) een
blokqolf met periodetijd Ts komt te staan. Dit
signaal wordt dan aan de interrupt controller (8259) aanqeboden, die dan iedere Ts seconden een impuls genereert, die aan de interrupt request inqang (INTR) van de CPU (8085) aangeboden wordt.
Het initialiseren van de counter kan op de
volgende manier gebeuren. Stel counter 0 van de 8253 wordt gebruikt. De counter heeft een klok, die een