• No results found

De digitale PID-regelaar

N/A
N/A
Protected

Academic year: 2021

Share "De digitale PID-regelaar"

Copied!
70
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

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.

(2)

H.M.M.G. Cordewener

(3)

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

(4)

Inhoudsopgave

o

Inleiding . . . 0

1 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

(5)

PID-regelaar pag. 0

o

InIeid!ng

Dit 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.

(6)

1 pe Plp-regelaar

Het basisschema van een regelkring met regelaar en proces ziet er als volgt uit:

fig.1 Regelkring

proces

I I r

l

• .K>, e

R

I x

P

y I

W -

I I

-

I I Y I L __ _ _ _ _ _ _ _ _ _ _ _ _ .J

De 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:

(7)

PID-regelaar pag. 2

Voor de proportionele aktie: x(T) :::: K*e(T)

V~~r de differentierende aktie: x(T) = Td *

(~~)

t=T

L* T

Voor de integrerende aktie: x{T) =

S

e(t)dt

T. 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=O

Bij 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

(8)

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.

(9)

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)

(10)

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

(11)

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

(12)

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

(13)

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

(14)

fig.2 Flowchart van routine REGEL y GET K RESULT IN R£SH,R£SL ONE: RESH,RESL ADD RESULT TO RESH,RESL END:

(15)

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=O

IALS 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

(16)

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.RESL

7600 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

(17)

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 staat

na afloop in de registers D en E. De

vermenig-vuldiging wordt in 1-complementnotatie uitgevoerd door de subroutine MULECO.

(18)

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

(19)

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

(20)

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.

(21)

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

(22)

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.

(23)

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

(24)

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

(25)

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.

(26)

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

(27)

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

*

DE

THE 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 IS

IBEIDE 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

(28)

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.

(29)

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

(30)

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 ADD

nou

JHC INR "OV ADD "OU "OU RAI

nov

nou

RAI NOU

nou

RAR "OU "OU RAR

nou

"OV ANI "OV LOA INR STA CPI JH% "OU OR" JHZ "OV OR" JHZ

nov

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

(31)

_ _ _ _ _ _ _ _ _ _ --;-_-=-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 ?FFF

7 .... POP H

75 •• RET .

-7&" FOUR' LXI D.'

77 •• POP H

"71" RET

(32)

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.

(33)

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

(34)

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: DIVIDE

I DESTROYS: ALL REGISTERS

,DESCRIPTION: DIVECO CALCULATES THE DIVISION OF

ae

AND DE BC =< BC/DE

THE 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.

(35)

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.

(36)

fig.9 Flowchart van routine DIVIDE WRONG: MESSAGE: Be:: DE::: 0 IQUAL: RESULT:: 1 RESULT:: 0 RESULT: RESULT·' EXIT:

(37)

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

(38)

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,

(39)

PID-regelaar pag. 34

(40)

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

(41)

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

(42)

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.

(43)

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 B

A.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

(44)

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.

(45)

PID-regelaar pag. 40

fig.12 Flowchart van routine ADDEC

N

(46)

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

(47)

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

(48)

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

(49)

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

(50)

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"ES

J 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 JIIP

(51)

PIO-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

(52)

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

(53)

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

(54)

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

(55)

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

(56)

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

Referenties

GERELATEERDE DOCUMENTEN

Second, we will use a Probit regression model to estimate the probability that a cartel exists in an industry, using data on discovered cartels as will be explained in Chapter 4.. We

To assess how SVD-related disturbances in structural network or- ganization progress over time, we calculated differences in network density, network strength, global connectivity

Bij Birket Qarun wordt het Eoceen overdekt door dikke, continentale Oligocene afzettingen.. Het

We present a novel approach to analyse and model psychophysiological body activation patterns that emerge from physical and mental activity during daily routines.. We analyse

Geneesmiddelen die op enige manier in verband zijn gebracht met een negatieve invloed op de door het coronavirus veroorzaakte ziekte COVID-19 zijn de Angiotensine Converting

Modeling of the case as a two-stage continuous product flow line leads to the basic model for the rest of this text: a single product two-stage line with

Op het Veerse meer zijn in 2008 in hokfuiken vangsten tien soorten aangetroffen die in 2007 niet werden waargenomen en ontbraken er acht soorten die in 2007 wel werden

suggesting a dangerous counterbalancing of the traditional source-journalist power dynamic, and their finding that tweets are also triggering many news sources in mainstream