23.07.2013 Views

Regulering af Quad-rotor helikopter - VBN - Aalborg Universitet

Regulering af Quad-rotor helikopter - VBN - Aalborg Universitet

Regulering af Quad-rotor helikopter - VBN - Aalborg Universitet

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

el:<br />

Energieffektiv hi-fi-forstærker<br />

a:<br />

Analog og digital teknik<br />

jektperiode:<br />

Kontrol <strong>af</strong> Draganfly X-Pro<br />

- Modellering og regulering <strong>af</strong> en quad<strong>rotor</strong> <strong>helikopter</strong><br />

Elektronik og Elektroteknik<br />

Det Teknisk-Naturvidenskabelige Fakultet<br />

Institut for elektroniske systemer<br />

Gr. 505, 5. Semester, Efterår 2007<br />

Fredrik Bajers Vej 7 A1<br />

Det Ingeniør-, Natur- 9220 <strong>Aalborg</strong> og Sundhedsvidenskabelige Ø<br />

Fakultet<br />

Danmark<br />

Institut for Elektroniske Systemer, <strong>Aalborg</strong> <strong>Universitet</strong><br />

http://ies.aau.dk<br />

Synopsis:<br />

Dette projekt omhandler design,<br />

dimensionering og konstruktion <strong>af</strong><br />

en energieffektiv hi-fi-forstærker med<br />

et G-trin. I private hjem findes et<br />

betydeligt antal hi-fi-forstærkere,<br />

som ofte har en stor maksimal ud


tiv hi-fi-forstærker<br />

tal teknik<br />

er:<br />

sen<br />

un Jørgensen<br />

th<br />

ard Tychsen<br />

Olesen<br />

1<br />

005<br />

Titel:<br />

Det Teknisk-Naturvidenskabelige Fakultet<br />

Institut for elektroniske systemer<br />

Fredrik Bajers Vej 7 A1<br />

9220 <strong>Aalborg</strong> Ø<br />

Danmark<br />

http://ies.aau.dk<br />

Synopsis:<br />

Kontrol <strong>af</strong> Draganfly X-Pro<br />

Dette projekt omhandler design,<br />

- Modellering og regulering <strong>af</strong> en quadro-<br />

dimensionering og konstruktion <strong>af</strong><br />

toren<strong>helikopter</strong> energieffektiv hi-fi-forstærker med<br />

et G-trin. I private hjem findes et<br />

Tema: betydeligt antal hi-fi-forstærkere,<br />

som ofte har en stor maksimal ud-<br />

Tilbagekoblede gangseffekt i forhold realtidssystemer til det normale<br />

brugsniveau. Dette giver anledning<br />

til en ringe virkningsgrad. Derfor er<br />

Projektperiode:<br />

der konstrueret en hi-fi-forstærker,<br />

E5, som Efterår er optimeret 2007 efter forbedret<br />

virkningsgrad i en driftssituation.<br />

Projektgruppe: Med udgangspunkt i standarderne<br />

IEC 268 og IEC 581 er relevante<br />

505 krav opstillet til en mono-forstærker,<br />

der kan levere en udgangseffekt p˚a<br />

Deltagere: 10 W. Forstærkeren er konstrueret,<br />

s˚aledes denne kan h˚andtere signaler<br />

Alex fra Aa. en mikrofon Birklykke samt fra en CD- eller<br />

Jesper AUX-enhed. BøndingEn<br />

digital volumenkontrol<br />

med 16 trin tillader indstilling<br />

Brian <strong>af</strong> lydniveauet M. Christensen og giver brugeren<br />

Andreas en visuel Corneliussen indikation <strong>af</strong> dette. For<br />

at give brugeren en indikation <strong>af</strong><br />

Erik udgangstrinnets B. Poulsen virkningsgrad er der<br />

konstrueret en effektivitetsindikator,<br />

som udlæser et udtryk for effektiviteten<br />

p˚a et display. Udgangstrinnet<br />

Vejleder: er opbygget ved at stakke ud-<br />

Martin gangstransistorerne, Kragelund s˚aledes en høj<br />

forsyningsspænding kun indkobles,<br />

n˚ar dette er nødvendigt.<br />

Oplagstal: 7<br />

Den konstruerede hi-fi-forstærker<br />

overholder overordnet set de opstil-<br />

Sidetal: lede 164krav.<br />

Det er dog kun muligt<br />

at <strong>af</strong>sætte 9,1 W i en 8 Ω-højttaler<br />

Appendikser: og ikke 11 10 W som krævet. I forstærkeren<br />

indg˚ar et G-trin, som er<br />

Bilags antal<br />

velfungerende,<br />

og -art:<br />

og<br />

1 CD-ROM<br />

giver mulighed for<br />

at opn˚a en højere virkningsgrad end<br />

en traditionel klasse AB forstærker.<br />

Afsluttet den: 20/12 2007<br />

Det Ingeniør-, Natur- og Sundhedsvidenskabelige Fakultet<br />

Institut for Elektroniske Systemer<br />

Fredrik Bajers Vej 7, A<br />

Telefon: 96 35 86 00<br />

Fax: 98 15 36 62<br />

http://ies.aau.dk<br />

Synopsis:<br />

Denne rapport omhandler modellering og regule-<br />

ring <strong>af</strong> en Draganfly X-Pro quad<strong>rotor</strong> <strong>helikopter</strong>.<br />

Helikopterens originale elektronik er <strong>af</strong>monteret og<br />

ny udvikles og implementeres.<br />

For at opnå kendskab til <strong>helikopter</strong>ens fysiske<br />

egenskaber opstilles modeller for <strong>helikopter</strong>ens bo-<br />

dy, motor, gear og <strong>rotor</strong>. Modellerne lineariseres og<br />

bruges som grundlaget for den regulering <strong>af</strong> heli-<br />

kopteren.<br />

<strong>Regulering</strong> udføres som tre, i hinanden indlej-<br />

rede, løkker. Den inderste er en motorregulator, som<br />

kontrollerer motorens omdregningshastighed. Den<br />

hertil implementerede regulator er en PI-regulator.<br />

Omkring denne designes PI og PD regulatorer som<br />

styrer <strong>helikopter</strong>ens vinkel. Til dimensioneringen <strong>af</strong><br />

disse regulatorer benytter root-locus.<br />

Modeller og regulatorer verificeres enkeltvis<br />

gennem simulering og endeligt i accepttesten.<br />

Resultatet <strong>af</strong> projekt er, at vinklen ikke kan<br />

holdes med den krævede <strong>af</strong>vigelse på ±1 ◦ , dog er<br />

stabilitet opnået. Det vurderes også, at <strong>helikopter</strong>o-<br />

pstillingen er tilpas modstandsdygtig overfor ude-<br />

frakommende forstyrrelser.<br />

Rapportens indhold må kun offentliggøres (med kildeangivelse) efter <strong>af</strong>tale med forfatterne.


Title: <br />

<br />

Control of Draganfly X-pro<br />

- Modelling and regulating a quad<strong>rotor</strong><br />

helicopter <br />

<br />

Subject: <br />

<br />

Realtime systems with feedback <br />

<br />

Projectperiod: <br />

<br />

E5, Fall 2007 <br />

<br />

Projectgroup: <br />

505<br />

<br />

Participants: <br />

<br />

Alex Aa. Birklykke<br />

<br />

Jesper Bønding <br />

Brian M. Christensen <br />

<br />

Andreas Corneliussen <br />

Erik B. Poulsen <br />

<br />

<br />

Supervisor: <br />

<br />

MartinKragelund <br />

<br />

Circulation: 7 <br />

<br />

Pages: 164 <br />

<br />

Appendices: 11<br />

<br />

<br />

Additional material: 1 CD-ROM<br />

Finished: 20/12 2007<br />

The Faculty of Engineering, Science and Medicine<br />

The department of Electronic Systems<br />

Fredrik Bajers Vej 7, A<br />

Telephone: 96 35 86 00<br />

Fax: 98 15 36 62<br />

http://ies.aau.dk<br />

Synopsis:<br />

This report documents the modeling and regulation<br />

of a Dragonfly X-Pro quad<strong>rotor</strong> helicopter. The ori-<br />

ginal electronics are removed, and new electronics<br />

are developed and implemented.<br />

To gain knowledge of the helicopters physical<br />

characteristics models are developed for the heli-<br />

copters body, motor, gearing and <strong>rotor</strong>. The models<br />

are linearized and used as the foundation for regu-<br />

lating the helicopter.<br />

The regulation is conducted using three em-<br />

bedded loops. The inner loop controls the angular<br />

velocity of the motor. A PI-regulator is implemen-<br />

ted to conduct this process. Around this a PI- and<br />

PD-regulator is developed to control the angle of<br />

the helicopter. Root-locus optimizing is used for di-<br />

mensioning these regulators.<br />

The models and regulators are individually ve-<br />

rified through simulations and finally in the accep-<br />

tance test.<br />

This project results in the incapability of<br />

maintaining the angle with a reference of ±1 o , but<br />

stability is acquired. The helicopter setup is belie-<br />

ved to have gained the necessary resistance to out-<br />

side disturbances.<br />

The content of this report may not be published without permission from the authors.


Forord<br />

Denne rapport dokumenterer projektarbejdet udført <strong>af</strong> gruppe 505 på 5. semester, på Institut for<br />

Elektroniske Systemer på <strong>Aalborg</strong> <strong>Universitet</strong> i efteråret 2007. Projektet er underlagt temaet „Tilba-<br />

gekoblede realtidssystemer“. Titlen på projektet er „Kontrol <strong>af</strong> Draganfly X-Pro“ og det har under-<br />

titlen „Modellering og regulering <strong>af</strong> en quad<strong>rotor</strong> <strong>helikopter</strong>“.<br />

Rapporten er henvendt til vejleder, censor og andre interesserede i projektet fx. senere projektgrup-<br />

per, der skal arbejde med den benyttede <strong>helikopter</strong>en. Det antages, at læseren har et kendskab til<br />

elektronik, der svarer til en 5. semester EE-studerendes.<br />

Læsevejledning:<br />

Rapporten er opbygget <strong>af</strong> seks dele for at skabe bedre overblik. Den første del er den indledende<br />

systembeskrivelse efterfulgt <strong>af</strong> modellering <strong>af</strong> det nuværende system. Derefter designes udvidelsen<br />

<strong>af</strong> systemet i systemdesign og implementeres i fjerde del. Den femte, reflekterende del indeholder<br />

evaluering <strong>af</strong> det udførte arbejde. Delene har fået tildelt romertal i indholdsfortegnelsen. Hver del<br />

indeholder flere kapitler, der er nummereret fortløbende gennem rapporten.<br />

Den sidste del er et appendiks, der indeholder kapitler om design og konstruktion <strong>af</strong> hardware, må-<br />

lerapporter og processorkode.<br />

I rapporten ses henvisninger til eksterne kilder i firkantklammer med angivelse <strong>af</strong> en reference og<br />

sidetal. Eksempel: [Franklin et al., 2006, s. 123]. Referencen kan slåes op i litteraturlisten på side 95.<br />

Datablade og MatLAB filer forefindes på bilags-CD’en, og henvisninger dertil sker med angivelse<br />

<strong>af</strong> stien til den specifikke fil.<br />

I


Projektet er udarbejdet <strong>af</strong>:<br />

Alex Aa. Birklykke<br />

Jesper Bønding<br />

Brian M. Christensen<br />

Andreas Corneliussen<br />

Erik B. Poulsen<br />

II


Indholdsfortegnelse<br />

1 Indledning 1<br />

I Systembeskrivelse 4<br />

2 Use-case analyse <strong>af</strong> systemet 5<br />

2.1 Usecase - Tænd/Sluk systemet . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

2.2 Usecase - overvåg systemet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2.3 Usecase - Skift Position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

3 Afgrænsning 10<br />

4 Funktionelle Krav 11<br />

II Modellering 12<br />

5 Modelopdeling 13<br />

6 Body-model 15<br />

6.1 Kræfter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

6.2 Momenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

6.3 Linearisering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

6.4 Verifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

7 Rotormodel 21<br />

7.1 Opdrift på <strong>rotor</strong>blade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

7.2 Infinitesmal udsnit <strong>af</strong> <strong>rotor</strong>blad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

7.3 Kræfter og momenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

7.4 Verifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

8 Motormodel 34<br />

III<br />

8.1 Elektrisk Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

8.2 Mekanisk Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

8.3 Samlet Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />

8.4 Verifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43


III Systemdesign 46<br />

9 Overordnet design 47<br />

9.1 Vinkelsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

9.2 Rotationssensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

9.3 Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

9.4 Mikrocontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

10 Blokbeskrivelse 51<br />

10.1 Motorregulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

10.2 Rotationsssensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

10.3 Vinkelregulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

10.4 Vinkelsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

10.5 Udlæsning <strong>af</strong> data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

IV Blokdesign 56<br />

11 Motorregulering 57<br />

11.1 Fastsættelse <strong>af</strong> krav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

11.2 Design <strong>af</strong> motorregulering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

12 Rotationssensor 64<br />

12.1 Behandling <strong>af</strong> sensorsignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

13 Vinkelregulator 67<br />

13.1 <strong>Regulering</strong>sprincip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

13.2 Regulatordesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

13.3 Delverifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

13.4 Ændring <strong>af</strong> systemtype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

14 Vinkelsensor 74<br />

V Implementering 76<br />

15 Motorregulering 77<br />

16 Rotationssensor 81<br />

17 Vinkelregulator 85<br />

17.1 PD-regulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />

IV


VI Evaluering 88<br />

18 Accepttest 89<br />

19 Konklusion 93<br />

Litteraturliste 95<br />

VII Appendiks A1<br />

A Motordriver A2<br />

B Root locus A5<br />

C Accepttest specifikation A8<br />

D Målerapport til accepttest A12<br />

E Målerapport til verifikation <strong>af</strong> <strong>rotor</strong>model A18<br />

F Bestemmelse <strong>af</strong> body-parametre A21<br />

G Målerapport til verifikation <strong>af</strong> bodymodel A29<br />

H Målerapport for verifikation <strong>af</strong> samlet motor, gear og <strong>rotor</strong>-model A31<br />

I Målerapport for måling <strong>af</strong> armaturmodestand A34<br />

J AvrX A38<br />

K Kode til processor A43<br />

V


KAPITEL 1<br />

Indledning<br />

Det er faldet i gruppens interesse at lave et autonomt kontrolsystem. Autonome systemer imple-<br />

menteres i flere forskellige produkttyper. Et område, hvor autonome systemer især benyttess er i de<br />

såkaldte Unmanned Aerial Vehicles (UAV). Disse er fly og <strong>helikopter</strong>e, som bevæger sig autonomt.<br />

En ukonventionel platform for en sådan kan være en såkaldt quad<strong>rotor</strong> <strong>helikopter</strong>.<br />

En quad<strong>rotor</strong> <strong>helikopter</strong> er en <strong>helikopter</strong>, der løftes <strong>af</strong> fire vertikale <strong>rotor</strong>er, placeret i et kvadrat.<br />

Den adskiller sig fra almindelige <strong>helikopter</strong>e i måden hvorpå den ændrer retning. En almindelig<br />

<strong>helikopter</strong> ændrer retning, ved at styre vinklen på <strong>rotor</strong>bladene. En quad<strong>rotor</strong> <strong>helikopter</strong> benytter sig<br />

derimod <strong>af</strong> <strong>rotor</strong>blade med en fast vinkel og ændrer retning ved kun at styre vinkelhastigheden på<br />

disse. Ændringen i vinkelhastigheden resulterer i en ændring i løftet og momentet for hver <strong>rotor</strong>. En<br />

illustration <strong>af</strong> den tilrådighedsstilne quad<strong>rotor</strong> <strong>helikopter</strong> ses på følgende figur:<br />

Figur 1.1: Illustration <strong>af</strong> Draganfly X-Pro quad<strong>rotor</strong> <strong>helikopter</strong>.<br />

1


KAPITEL 1 - Indledning<br />

<strong>Quad</strong><strong>rotor</strong> <strong>helikopter</strong>e er opbygget således at <strong>rotor</strong>erne parvist roterer samme vej hvilket illustreres<br />

på Figur 1.2 Hvert <strong>rotor</strong>par skaber et moment, der får <strong>helikopter</strong>en til at rotere om sin vertikale<br />

centerakse. Denne bevægelse kaldes yaw. Idet de to <strong>rotor</strong>par roterer modsat hinanden, vil de skabte<br />

momenter modvirke hinanden. Hvis alle <strong>rotor</strong>er roterer lige hurtigt, bliver det samlede moment nul,<br />

hvilket betyder at vinkelaccelerationen omkring centeraksen ligeledes bliver nul. Yaw kan således<br />

styres, ved at regulere vinkelhastigheden på de parvist modsat roterende <strong>rotor</strong>er.<br />

Venstre Højre<br />

y<br />

Figur 1.2:<br />

Frem<br />

Bagud<br />

Hvert <strong>rotor</strong>par kontrollerer rotationen om henholdsvis den ene og den anden horisontale akse (x og<br />

y-akse indlagt på Figur 1.2). Rotation omkring x og y-aksen kaldes henholdsvis pitch og roll. Pitch<br />

og roll introduceres ved at hæve løftet på den ene <strong>rotor</strong> i et <strong>rotor</strong>par og sænke det, på den anden <strong>rotor</strong><br />

i samme <strong>rotor</strong>par. Hvis <strong>rotor</strong>parrets samlede moment ikke ændres under denne ændring i løft, vil yaw<br />

ideelt set ikke opstå. <strong>Quad</strong><strong>rotor</strong> <strong>helikopter</strong>en kan således styres i alle retninger. Lineære bevægelser<br />

opnås, ved at opretholde en konstant pitch/roll-vinkel.<br />

Udfordringen i projektet ligger således i, at kontrollere vinkelhastigheden på de fire <strong>rotor</strong>er, således<br />

at <strong>helikopter</strong>en kan manøvreres.<br />

2<br />

x


DEL I<br />

Systembeskrivelse<br />

Use cases gennemgåes for at få overblik over den fulde funktionalitet<br />

i systemet. For at gøre projektet realiserbart <strong>af</strong>grænses der fra nogle<br />

funktionaliteter. Der opstilles krav for den resterende funktionalitet, som<br />

ønskes designet og implementeret.


KAPITEL 2<br />

Use-case analyse <strong>af</strong> systemet<br />

I det følgende vil det ønskede system blive beskrevet ved hjælp <strong>af</strong> Use-case metoden. Denne metode<br />

benyttes, da den giver et godt overblik over de funktioner, der skal implementeres i det samlede<br />

system. Systemet er illustreret på Figur 2.1, hvor det kan ses, at der er to typer input til systemet,<br />

brugerinput og forstyrrelser.<br />

Figur 2.1: Use-case model <strong>af</strong> det ønskede system<br />

I det følgende vil formål, normalscenarie og værdi for aktøren for hver <strong>af</strong> use-casene på Figur 2.1<br />

blive beskrevet. Derefter vil analysen blive benyttet til at identificere funktionelle krav til systemet,<br />

og der vil ske en <strong>af</strong>grænsning.<br />

5


KAPITEL 2 - Use-case analyse <strong>af</strong> systemet<br />

2.1 Usecase - Tænd/Sluk systemet<br />

2.1.1 Formål<br />

Formålet med denne use-case er at beskrive systemets funktion ved opstart eller nedlukning. Dvs.<br />

når en bruger tænder systemet efter det har været slukket så længe, at det er faldet tilbage til dets<br />

hviletilstand, eller en bruger slukker for systemet, mens det er i funktion.<br />

2.1.2 Initialisering<br />

Denne use-case initialiseres ved at brugeren tænder eller slukker for strømmen til systemet, enten på<br />

en kontakt på systemet eller på en ekstern spændingskilde.<br />

2.1.3 Normalt Flow<br />

Normalscenariet skal foregå således, hvis systemet skal tændes:<br />

• Brugeren tænder for spændingskilden til både system og <strong>helikopter</strong>.<br />

• Systemet bestemmer ved hjælp <strong>af</strong> sensorer, hvor meget <strong>helikopter</strong>en hælder og til hvilken<br />

retning.<br />

• Systemet starter motorer og regulerer sig, således at det opnår fuldstændig vertikal stilling<br />

(dvs. pitch og roll er lig nul).<br />

• Desuden sikrer systemet, at <strong>helikopter</strong>en opnår en tilpas vertikal position. Denne position skal<br />

systemet søge at opretholde ved brug <strong>af</strong> alle bevægelserne beskrevet i Afsnit 1.<br />

Og således hvis systemet skal slukkes:<br />

• Brugeren slukker for spændingskilden til både system og <strong>helikopter</strong>.<br />

• Systemet slukker for motorene og opnår derved hviletilstand.<br />

2.1.4 Undtagelser<br />

Hvis brugeren ikke har tilsluttet passende spænding, skal systemet reagere således:<br />

6<br />

• Hvis muligt skal systemets processor starte og begynde at reagere på sensorernes input, ellers<br />

skal systemet blot forblive i hvile.<br />

• Hvis systemets processor kan reagere på spændingen, skal den forsøge at regulere spændingen<br />

til motorerne, således at <strong>helikopter</strong>en kan opnå vertikal tilstand.


KAPITEL 2 - Use-case analyse <strong>af</strong> systemet<br />

• Er dette ikke muligt, skal systemet fortsætte med at forsøge, indtil spændingen bliver høj nok<br />

(hvis brugeren ændrer på forsyningen), eller spændingen fjernes fra systemet igen, således at<br />

det kan falde tilbage til hvile.<br />

Allerede på dette tidspunkt kan der ske det, at <strong>helikopter</strong>en bliver udsat for forstyrrelser udefra. Dette<br />

vil gøre det sværere for systemet at opnå en stabil tilstand i vertikal stilling. Dog skal systemet i dette<br />

tilfælde ikke opføre sig anderledes.<br />

2.1.5 Værdi for aktøren<br />

Når brugeren har tændt for systemet, og normalscenariet løbes rigtigt igennem, vil brugeren få et<br />

funktionsdygtigt system, hvor han kan benytte sig <strong>af</strong> en <strong>af</strong> de andre use-cases.<br />

2.2 Usecase - overvåg systemet<br />

2.2.1 Formål<br />

Brugeren kan benytte denne use-case til at undersøge systemets motorer og påvirkninger. Han vil<br />

ved brug <strong>af</strong> denne use-case få præsenteret data fra motorer, sensorer og lignende.<br />

2.2.2 Initialisering<br />

Denne use-case vil blive initialiseret ved at brugeren forbinder en computer til systemet og starter<br />

programmet dertil.<br />

2.2.3 Normalt Flow<br />

Normalscenariet for denne use case vil være:<br />

• Brugeren forbinder sin computer til systemet, og starter et program til formålet<br />

• Systemet henter data fra sensorer og fra motorstyringer<br />

• Systemet sender disse data til computeren<br />

• Programet præsenterer de modtagne data for brugeren<br />

2.2.4 Undtagelser<br />

Hvis ikke computeren kan få forbindelse til systemet, skal den blot informere brugeren om dette og<br />

fortsat forsøge.<br />

7


KAPITEL 2 - Use-case analyse <strong>af</strong> systemet<br />

2.2.5 Værdi for aktøren<br />

Ved brug <strong>af</strong> denne use-case vil brugeren kunne få et indblik i hvilke påvirkninger systemet arbejder<br />

under, og hvordan det reagerer på disse.<br />

2.3 Usecase - Skift Position<br />

2.3.1 Formål<br />

Formålet med denne use-case er at sikre at systemet kan flytte <strong>helikopter</strong>en i alle fire retninger,<br />

højre, venstre, frem og tilbage. Desuden skal denne use-case også beskrive hvordan brugeren kan få<br />

systemet til at dreje rundt om sig selv.<br />

2.3.2 Initialisering<br />

Denne use-case bliver initialiseret ved at brugeren indtaster en ønsket position og drejning <strong>af</strong> heli-<br />

kopteren, relativt til den nuværende position, i systemet.<br />

2.3.3 Normalt Flow<br />

Det normale flow for denne use-case forløber således:<br />

• Brugeren indtaster ønsket position.<br />

• Systemet bestemmer, hvilken konsekvens den nye position har for <strong>helikopter</strong>en<br />

• Systemet sørger for at indstille pitch og roll på <strong>helikopter</strong>en således at den roligt flyver mod<br />

den nye position.<br />

• Løbende skal systemet holde øje med <strong>helikopter</strong>ens position og tilpasse pitch og roll derefter.<br />

• Når <strong>helikopter</strong>en har opnået den rigtige position skal systemet undersøge om brugeren også<br />

har ønsket at dreje <strong>helikopter</strong>en i forhold til hvilken vej den nu vender. Er dette tilfældet skal<br />

systemet sikre at dette sker stille og roligt.<br />

2.3.4 Undtagelser<br />

Systemet skal sikre at den nye position bliver indtaget så tilpas roligt at systemet forbliver i ligevægt<br />

og stabillitet hele tiden. Dette medfører selvfølgeligt at der er en vis grænse for <strong>helikopter</strong>ens pitch<br />

og roll, da den vil miste opdrift ved at gøre dette.<br />

Desuden kan der ske det at <strong>helikopter</strong>en bliver påvirket udefra, alt imens systemet forsøger at skif-<br />

te dens position. Hvis dette sker skal systemet sikre at helikoppteren forbliver stabil, og først når<br />

stabillitet er opnået skal systemet fortsætte med at bevæge <strong>helikopter</strong>en mod den nye position.<br />

8


2.3.5 Værdi for aktøren<br />

KAPITEL 2 - Use-case analyse <strong>af</strong> systemet<br />

Denne use-case har værdi for brugeren ved at han får mulighed for at flytte <strong>helikopter</strong>en fra et sted<br />

til et andet.<br />

2.3.6 Usecase - Uønsket Påvirkning<br />

Formål<br />

Formålet med denne use-case er at beskrive hvordan systemet skal forholde sig til udefrakommende<br />

inputs, som f.eks. vind eller andet der kan få systemet ud <strong>af</strong> stabillitet, pitch og roll.<br />

Initialisering<br />

Denne funktion initieres ved at <strong>helikopter</strong>en påvirkes med udefrakommende forstyrrelser.<br />

Normalt Flow<br />

Det normale scenarie for denne use-case skal være som følger:<br />

• Systemet modtager en forstyrrelse <strong>af</strong> en eller anden art<br />

• Systemet reagerer på disse inputs ved at styre kontra og derved opnå stabilitet i den, <strong>af</strong> bruge-<br />

ren, ønskede position<br />

Undtagelser<br />

Hvis den udefrakommende forstyrrelse er for stærk kan systemet komme ud <strong>af</strong> stabillitet og derved<br />

kan det risikeres, at <strong>helikopter</strong>en ikke kan holde sig luftbåren. Denne effekt skal for så vidt muligt<br />

kontrastyres, således at skaden på <strong>helikopter</strong>en bliver mindst muligt.<br />

Værdi for aktøren<br />

Denne use-case har værdi for aktøren ved at systemet bliver stabilt, og kan modstå forstyrrelser <strong>af</strong><br />

forskellig art.<br />

9


KAPITEL 3<br />

Afgrænsning<br />

Det vælges det at placere <strong>helikopter</strong>en i en opstilling hvor <strong>helikopter</strong>en kun kan bevæge sig omkring<br />

én akse, for at simplificerer både modellering og regulering <strong>af</strong> <strong>helikopter</strong>en. Da det vurderes at<br />

regulering <strong>af</strong> det fulde system vil være for krævende for et 5. semester projekt.<br />

Helikopteren placeres derfor på et kardanled der er sat fast på en trefod. På denne måde blokeres he-<br />

likopteren fra bevægelser omkring den vertikale akse. I denne opsætning kan roll-bevægelser skabes<br />

ved at skabe en forskel i hastighed på højre og venstre motor og ligeledes skabes pitch-bevægelser<br />

med forskellen mellem forreste og bagerste motors hastighed.<br />

Desuden betragtes roll og pitch som værende to bevægelser, der er u<strong>af</strong>hængige og kan beskrives ved<br />

tilsvarende udtryk. Derfor vil der her i rapporten kun blive udarbejdet et system, der kan regulere<br />

bevægelser omkring én akse, da reguleringen <strong>af</strong> bevægelse i den anden akse betragtes som triviel.<br />

Desuden betragtes seriel kommunikation med en computer også som værende trivielt, hvorfor det er<br />

valgt at begrænse denne kommunikation til en simpel udlæsning på en seriel-terminal på en tilsluttet<br />

computer.<br />

Afgrænsningerne gør at ikke al funktionalitet beskrevet i Afsnit 2 skal implementeres i systemet.<br />

Der vil derfor i Kapitel 4 blive opstillet en række krav, der illustrerer det system, der reelt vil blive<br />

opbygget.<br />

10


KAPITEL 4<br />

Funktionelle Krav<br />

I Afsnit 2 og Kapitel 3 er systemet, der ønskes designet og konstrueret, blevet beskrevet. I dette<br />

<strong>af</strong>snit vil der blive opstillet nogle krav til systemet, som ønskes overholdt. Disse krav har til formål<br />

at beskrive den ønskede funktionalitet og performance <strong>af</strong> systemet og er derfor skrevet på en sådan<br />

måde, at de kan testes med test-metoderne beskrevet i Kapitel C.<br />

Først og fremmest har systemet som formål at sikre at <strong>helikopter</strong>en kan holdes i en given roll-vinkel.<br />

Med stabillitet menes i dette henseende at systemet, under kr<strong>af</strong>tige udefrakommende påvirkninger,<br />

skal kunne holde systemet i den indstillede vinkel. Dette formål giver andledning til følgende krav:<br />

Krav. 1 Systemet skal kunne holde <strong>helikopter</strong>en i en given vinkel (roll) (±1 ◦ )<br />

Krav. 2 Systemet skal kunne holde <strong>helikopter</strong>en stabil i den givne vinkel (roll). Dvs. at <strong>helikopter</strong>en<br />

skal kunne finde tilbage i den givne vinkel selvom højre eller venstre <strong>rotor</strong> trækkes så kr<strong>af</strong>tigt<br />

ned mod jorden som opstillingen tillader det.<br />

Desuden er det, selvom <strong>helikopter</strong>en er spændt fast og derfor ikke kan flyve selv, ønskeligt, at sy-<br />

stemet kan få <strong>helikopter</strong>en til at holde en hastighed på motorerne, der sikrer opdrift, der svarer til<br />

tyngdekr<strong>af</strong>ten virkende på <strong>helikopter</strong>en. Dette vil kunne sikre at <strong>helikopter</strong>en ville holde sig flyven-<br />

de, hvis ikke den var spændt fast. Dette giver andledning til følgende krav:<br />

Krav. 3 Systemet skal kunne skabe opdrift ved hjælp <strong>af</strong> højre og venstre motor svarende til halvdelen<br />

<strong>af</strong> tyngdekr<strong>af</strong>ten virkende på <strong>helikopter</strong>en (±1%).<br />

Krav. 4 Selvom seriel kommunikation anses som triviel, skal reguleringsvariablene og sensorinputs<br />

udskrives til seriel kommunikation med en PC. Denne kommunikation skal foregå så simpelt<br />

som muligt, således at der ikke skal ventes på at, PC’en sender acknowledges <strong>af</strong> pakkerne.<br />

11


DEL II<br />

Modellering<br />

Gennem opstillelse <strong>af</strong> modeller ønskes det at finde udtryk for sammen-<br />

hænge i systemet. Der opstilles undermodeller for motor og gear, ro-<br />

tor og kroppen. Modellerne lineariseres og verificeres på baggrund <strong>af</strong><br />

målerapporter i appendiks.


KAPITEL 5<br />

Modelopdeling<br />

Det er valgt at opdele systemet i tre dele, bestående <strong>af</strong> motor med gear, <strong>rotor</strong> og <strong>helikopter</strong>ens krop.<br />

Modellerne, der beskriver disse dele, benævnes hhv. motor- og gearmodel, <strong>rotor</strong>model og bodymo-<br />

del. Navnet på den sidst nævnte er <strong>af</strong>født <strong>af</strong> betegnelsen “rigid body”, der beskriver et solidt legeme,<br />

som antages at være ubøjeligt. Motoren reguleres med spændingen VA, hvilket ses på Figur 5.1.<br />

Gearet kobler motoren til <strong>rotor</strong>en, og vil derfor have indflydelse på koblingen mellem disse. Rotor-<br />

bladene roterer med vinkelfrekvensen ω, og ændring i vinkelfrekvensen vil overføres ved ˙ω. Rotoren<br />

belaster gearet med momentet τz.<br />

Bodymodellen beskriver kroppens egenskaber og opførsel. Helikopterkroppen påvirkes <strong>af</strong> de rote-<br />

rende og eventuelt accelererende <strong>rotor</strong>blade, idet de skaber en kr<strong>af</strong>tvektor f og en momentvektor τ,<br />

der påvirker kroppen. Modsat <strong>af</strong>hænger output fra <strong>rotor</strong>modellen <strong>af</strong> motornes rotationshastighed og<br />

acceleration, samt hastigheden hvormed <strong>helikopter</strong>en bevæger sig igennem luften, hvilket er givet<br />

ved vektoren v<strong>rotor</strong>.<br />

a<br />

Figur 5.1: Blokdiagram for undermodeller med angivelse <strong>af</strong> værdioverførs-<br />

ler.<br />

Jf. <strong>af</strong>grænsningen i Afsnit 3 er <strong>helikopter</strong>en spændt fast på en trefod, <strong>helikopter</strong>ens lineære hastighed<br />

vheli og rotation i xy-planet vil være nul. Det er således kun <strong>rotor</strong>ens τ-vektor som, ud over kr<strong>af</strong>ten<br />

fz fra <strong>rotor</strong>erne, påvirker <strong>helikopter</strong>en. I forbindelse med motormodellen vil τz beskrive lastmomen-<br />

tet på motoren. På body-modellen vil dette til gengæld have en mere kompleks indvirkning, som det<br />

13


KAPITEL 5 - Modelopdeling<br />

derfor vælges at se bort fra.<br />

Herudover vælges det at modellerne for <strong>helikopter</strong>en kun skal være præcise omkring hover. Dette<br />

betyder at <strong>rotor</strong>hastigheden antages at være tæt på konstant. Der kan således også ses bort fra vin-<br />

kelaccelerationen ˙ω under udledningen <strong>af</strong> <strong>rotor</strong>modellen. I Afsnit 3 blev der ydermere <strong>af</strong>grænset til<br />

kun at styre <strong>helikopter</strong>ens vinkel med gulvet i vinklen θx. Disse forudsætninger giver anledning til<br />

et forsimplet diagram over modellerne, som ses på følgende figur:<br />

a<br />

Figur 5.2: Simplificeret blokdiagram for undermodeller med angivelse <strong>af</strong><br />

værdioverførsler.<br />

Figur 5.2 er således udgangspunktet for opstillingen <strong>af</strong> de forskellige modeller. Disse vil blive gen-<br />

nemgået i de næste tre kapitler, startende med body-modellen.<br />

14


KAPITEL 6<br />

Body-model<br />

Formålet med bodymodellen er at opstille en model, der beskriver <strong>helikopter</strong>ens position og løft, som<br />

funktion <strong>af</strong> <strong>rotor</strong>ernes kr<strong>af</strong>tpåvirkninger. For at kunne beskrive <strong>helikopter</strong>ens position, indlægges et<br />

koordinatsystem som vist på Figur 6.1 og Figur 6.2. Da kardanleddet fastlåser <strong>helikopter</strong>ens lineære<br />

bevægelser og rotation om z-aksen, har opstillingen kun to frihedsgrader. De to frihedsgrader er:<br />

orienteringen i xz-planen og zy-planen. Disse beskrives henholdsvis ved θx og θy, der defineres som<br />

vinklerne platformen hælder med i forhold til koordinatsystemets akser, regnet positivt mod uret.<br />

y<br />

Frem<br />

Venstre Højre<br />

Bagud<br />

Figur 6.1: Platformen set fra oven, viser hvorledes koordinatsystemets x- og<br />

y-akse er indlagt (z-aksen peger ud <strong>af</strong> papiret).<br />

x<br />

15


KAPITEL 6 - Body-model<br />

Venstre<br />

MC<br />

z<br />

Højre<br />

θ x omdrejningspunkt<br />

Figur 6.2: Platformen set fra siden. Viser hvorledes koordinatsystemets x-<br />

og z-akse er indlagt (y-aksen går ind i papiret). Vinklerne θx og θy defineres<br />

som vinklerne platformen hælder med i forhold til koordinatsystemets akser<br />

regnet positivt mod uret.<br />

Det antages, at de to vinkler påvirkes u<strong>af</strong>hængigt <strong>af</strong> hinanden, og da platformen er symmetrisk<br />

opbygget, opstilles kun en model for θx som funktion <strong>af</strong> de to <strong>rotor</strong> kræfter Fh og Fv, der er kr<strong>af</strong>ten<br />

for henholdsivs højre og venstre <strong>rotor</strong>. Herefter kan de udledte ligninger overføres til at beskrive θy<br />

som funktion <strong>af</strong> Ff og Fb. For at fastslå om <strong>helikopter</strong>en ville flyve, hvis den ikke var låst fast <strong>af</strong><br />

kardanleddet, skal modellen desuden også beskrive den lineære kr<strong>af</strong>t Fz, der er kr<strong>af</strong>ten, <strong>helikopter</strong>en<br />

påvirker kardanleddet med i z-retningen.<br />

For at kunne opstille en model, beskrives i det følgende først de kræfter, der virker på platformen,<br />

hvorefter det gennemgåes hvilke momenter kræfterne giver anledning til. Herefter opstilles syste-<br />

mets momentligevægtsligninger, disse lineariseres og Laplace-transformeres for slutteligt at finde<br />

bodymodellens overføringsfunktion.<br />

6.1 Kræfter<br />

De eksterne kræfter, der virker på platformen, er illustreret på Figur 6.3 og beskrives i det følgende:<br />

Tyngdekr<strong>af</strong>ten har stor indflydelse på <strong>helikopter</strong>ens bevægelser. Den har angrebspunkt i massecen-<br />

trum(MC) og virker altid mod jordens centrum.<br />

Normal kr<strong>af</strong>ten modvirker tyngdekr<strong>af</strong>ten og har angrebspunkt i omdrejningspunktet (akslen i kar-<br />

danleddet).<br />

Rotor løft De to <strong>rotor</strong>er skaber henholdsvis kræfterne Fh og Fv, når de roterer. Disse kræfter bruges<br />

til at styre <strong>helikopter</strong>ens hældning.<br />

Luftmodstanden vil modvirke <strong>helikopter</strong>ens bevægelser, men da den er meget kompleks samtidig<br />

16<br />

med at <strong>helikopter</strong>en bevægelser er begrænset <strong>af</strong> opstillingen, vil luftmodstanden ikke blive<br />

medtaget i modellen.<br />

x


F v<br />

m arm<br />

6.2 Momenter<br />

F N<br />

MC<br />

F g<br />

θ x<br />

mc arm<br />

Figur 6.3: Eksterne kræfter der påvirker platformen.<br />

KAPITEL 6 - Body-model<br />

De eksterne momenter der virker på platformen, inklusiv inertimomentet, er vist på Figur 6.4 og<br />

beskrives i det følgende:<br />

τ g(θ<br />

x)<br />

τf<br />

z<br />

τ motor<br />

Figur 6.4: Eksterne momenter der påvirker platformen.<br />

Tyngdekr<strong>af</strong>ten Da platformen ikke har omdrejningspunkt i sit massecentrum, men omdrejnings-<br />

punktet er forskudt <strong>af</strong>standen mcarm på z-aksen, vil tyngdekr<strong>af</strong>ten give anledning til et mo-<br />

ment τg(θx) når θ = 0.<br />

Rotor løft De to kræfter Fv og Fh påvirker platformen i en <strong>af</strong>stand på marm fra omdrejningspunktet<br />

og giver derved anledning til et samlet moment τmotor x givet ved:<br />

τmotor x(t) = τh(t) − τv(t) = Fh(t) · marm − Fv(t) · marm<br />

Friktion Det antages, at der i kardanleddet er en viskos friktion benævnt τf (t) = Bk · ωx(t). Denne<br />

vil virke dæmpende på <strong>helikopter</strong>ens bevægelser.<br />

x<br />

F h<br />

x<br />

(6.1)<br />

17


KAPITEL 6 - Body-model<br />

Da alle momenter nu er identificeret kan momentligevægten opstilles, idet, det antages at systemets<br />

inertimoment set ifht. x-aksen er givet ved Jx.<br />

Hvor:<br />

τmotor x(t) + τg(θx) − τf = Jx · ˙ωx (6.2)<br />

τmotor x(t) = Fh · marm − Fv · marm<br />

τg(θx) = Fg · sin(θx) · mcarm<br />

τf = Bk · ωx<br />

τJ = Jx · ˙ωx<br />

˙θx = ωx<br />

De ovenstående ligninger sammensættes til det samlede udtryk der beskriver <strong>helikopter</strong>ens vinkel-<br />

hældning som funktion <strong>af</strong> kr<strong>af</strong>terne Fh og Fv:<br />

[Fh(t) − Fv(t)] · marm = −Fg · mcarm · sin(θx) + Jx · ˙ωx + Bk · ω (6.3)<br />

Af Formel 6.3 ses det at mcarm ideelt set er nul, da τg så går ud i Formel 6.2. Det konkluderes herfor,<br />

at mcarm bør minimeres og evt. være mulig at indstille på opstillingen. Figur 6.5 viser ligningerne<br />

på model form i Simulink.<br />

1<br />

Fh<br />

2<br />

Fv<br />

m<br />

masse<br />

-C-<br />

motor_arm<br />

tyngde_acc<br />

-K-<br />

sin<br />

sin<br />

6.3 Linearisering<br />

-Ktau_g<br />

cm_arm<br />

1/J<br />

inerti<br />

acc_x<br />

friktion_x<br />

B<br />

3<br />

vinkel_acc_x<br />

1<br />

s<br />

2<br />

vinkelhastighed_x<br />

vinkelhastighed_x<br />

Figur 6.5: Den opstillede rotationsmodel i simulink.<br />

For at kunne bruge modellen til designovervejelser lineariseres bodymodellen. Dette gøres ved at<br />

antage: sin(θx) ≈ θx. Det vurderes at denne antagelse er rimelig god for |θx| ≤ 0.5[rad] svarende<br />

til ca. ±28 grader, da <strong>af</strong>vigelsen mellem sin(θx) og θx her maksimalt er på 4, 2%. Herefter Laplace-<br />

transformeres Formel 6.3 med denne approximation indsat, hvilket giver følgende:<br />

18<br />

[Fh(s) − Fv(s)] · marm = −Fg · mcarm · θx(s) + Jx · s 2 · θx(s) + Bk · s · θx(s) (6.4)<br />

1<br />

s<br />

vinkel<br />

1<br />

vinkel_x<br />

Goto<br />

[A]


Overføringsfunktionen for <strong>helikopter</strong>ens rotationsbevægelser findes herefter til:<br />

θx(s)<br />

Fh(s) − Fv(s) =<br />

marm<br />

−Fg · mcarm + Jx · s2 + Bk · s<br />

KAPITEL 6 - Body-model<br />

For at kunne vurdere <strong>helikopter</strong>ens stabilitet, opstilles udtryk for overføringsfunktionens poler (se<br />

Formel 6.6). Alle konstanter i udtrykket er positive og reelle og det antages at B 2 k < [4 · Jb · (−Fg ·<br />

mcarm)] vil systemet have to reelle poler, hvor<strong>af</strong> den ene vil være positiv og den anden negativ,<br />

hvilket antyder, at systemet er ustabilt. Dette kan også ses ved at betragte systemet som et omvendt<br />

pendul, der naturligvis vil begynde at falde, hvis massemidtpunktet forskydes i forhold til rotations-<br />

aksen.<br />

s1, s2 = −Bk ± B2 k − 4 · Jb · (−Fg · mcarm)<br />

2 · Jb<br />

s1, s2 = −Bk<br />

<br />

B2 k − 4 · Jb · (−Fg · mcarm)<br />

±<br />

2 · Jb<br />

2 · Jb<br />

Af Formel 6.7 ses det, at polerne vil ligge symmetrisk om et punkt U = −Bk/(2·Jb). Ved at indføre<br />

et tilstrækkeligt stort gain vil polerne blive skubbet sammen på den reelle akse og mødes i punktet<br />

U. Hvis gainet hæves endnu mere vil de splittes og blive skubbet i hver sin retning på den imaginære<br />

akse [Franklin et al., 2006, s.234].<br />

6.3.1 Lineære kræfter<br />

U<br />

Im<br />

Figur 6.6: Viser hvordan polerne vandrer, når gainet i sløjfen varieres.<br />

Da <strong>rotor</strong>ernes kræfter altid virker vinkelret på platformen vil de lineære kræfter Fz(t) og Fx(t) va-<br />

riere som funktion <strong>af</strong> <strong>rotor</strong>kr<strong>af</strong>ten og vinklen θx(t). Ifølge kravspecifikationen må Fz(t) kun svinge<br />

med ±1% hvorfor der opstilles en model, der beskriver Fz(t). Modellen kan herefter benyttes til at<br />

justere motorkræfterne, således at Fz(t) kan holdes konstant. Fz(t) findes ved trigonometri til: (se<br />

Figur 6.3).<br />

Re<br />

(6.5)<br />

(6.6)<br />

(6.7)<br />

Fz(t) = (Fh(t) + Fv(t)) · cos(θx(t)) (6.8)<br />

19


KAPITEL 6 - Body-model<br />

6.4 Verifikation<br />

De fysiske parametre for bodymodellen er fundet i Appendiks F. I det følgende verificeres den opstil-<br />

lede model med disse værdier, verifikationen består i at sammenligne vinkelmålinger for et simuleret<br />

og målt fald. Det udførte forsøg er beskrevet i Appendiks G. På Figur 6.7 ses gr<strong>af</strong>erne for det simu-<br />

lerede og målte fald. Ud fra gr<strong>af</strong>erne ses det, at <strong>helikopter</strong>en accelererer en smule hurtigere i praksis<br />

end det simulerede.<br />

Vinkel [rad]<br />

0.1<br />

0<br />

−0.1<br />

−0.2<br />

−0.3<br />

−0.4<br />

−0.5<br />

Maalt<br />

Simulering<br />

0 0.1 0.2 0.3 0.4 0.5<br />

Tid [s]<br />

0.6 0.7 0.8 0.9 1<br />

Figur 6.7: Verifikation <strong>af</strong> bodymodellen, målt og simuleret fald <strong>af</strong> helikopte-<br />

ren.<br />

Afvigelsen kan skyldes <strong>af</strong>vigelse i flere parametre, såsom friktionskonstanten, <strong>af</strong>standen til mas-<br />

semidtpunktet og størrelsen <strong>af</strong> inertimomentet. Det vuderes, at <strong>af</strong>vigelsen ikke vil have betydning,<br />

da <strong>helikopter</strong>en, under normal drift, ikke bevæger sig ud i det område <strong>af</strong> gr<strong>af</strong>en, hvor <strong>af</strong>vigelser-<br />

ne forekommer. Herfor undersøges <strong>af</strong>vigelserne ikke nærmere og modellen betragtes som værende<br />

gældende.<br />

20


KAPITEL 7<br />

Rotormodel<br />

Rotorens opgave er at levere en opadrettet kr<strong>af</strong>t for at modvirke tyngdekr<strong>af</strong>ten på <strong>helikopter</strong>en. Med<br />

henblik på at kunne regulere den er det nødvendigt at kende størrelsen og retningen <strong>af</strong> kr<strong>af</strong>ten ved en<br />

given omdrejningshastighed. Momentet omkring <strong>rotor</strong>ens aksel skal kendes for at kende belastningen<br />

på motor og gear, og det resulterende moment fra <strong>rotor</strong>en har indflydelse på hele <strong>helikopter</strong>en. For<br />

at få indblik i disse sammenhænge analyseres <strong>rotor</strong>ens fysik, og der opstilles en model for den.<br />

7.1 Opdrift på <strong>rotor</strong>blade<br />

På Figur 7.1 ses et forsimplet <strong>rotor</strong>blad, der bevæger sig gennem luften. Bladet er vinklet i forhold<br />

til bevægelsesretningen, så luften <strong>af</strong>bøjes nedad. Bladet må derfor påvirke luften med en kr<strong>af</strong>t, og<br />

ifølge Newtons tredje lov vil luften påvirke bladet med en ligeså stor, men modsat rettet, kr<strong>af</strong>t. Denne<br />

kr<strong>af</strong>tvektor vil altså være rettet opad og give vingen et løft.<br />

Løft<br />

Figur 7.1: Skitse <strong>af</strong> luftstrømmen omkring et <strong>rotor</strong>blad, der opnår løft ved<br />

vinkling <strong>af</strong> bladet ifht. bevægelsesretningen.<br />

21


KAPITEL 7 - Rotormodel<br />

På Figur 7.2 ses strømmen <strong>af</strong> luft omkring et <strong>rotor</strong>blad, der bevæger sig gennem luften. Rotorbladet<br />

er udformet, således at luften har længere at bevæge sig over bladet end under og hastigheden må<br />

derfor være større over bladet.<br />

Løft<br />

Lavt tryk<br />

Normalt tryk<br />

Figur 7.2: Skitse <strong>af</strong> luftstrømmen omkring et <strong>rotor</strong>blad, der udnytter Bernoul-<br />

lis princip.<br />

Ifølge Bernoullis ligning vil en gas med højere hastighed have et lavere tryk, så der bliver et lokalt<br />

undertryk over bladet [Serway and John W. Jewett, 2004, p. 434-435]. Det resulterer i et ekstra løft<br />

udover det, der opnåes ved vinkling <strong>af</strong> bladet.<br />

Løft<br />

F<br />

Slæb<br />

Figur 7.3: Bernouillus princip og vinklingen <strong>af</strong> bladet bidrager begge til løftet,<br />

og gnidningsmodstanden med luften giver et slæb.<br />

Da der ydermere er gnidning mellem bladet og luften, vil bladet udsættes for en kr<strong>af</strong>t rettet modsat<br />

hastighedsvektoren (slæb). På Figur 7.3 ses alle kræfter bladet udsættes for når det bevæger gennem<br />

luften. Det samlede løft er sammensat <strong>af</strong> løftet opnået gennem vinkling <strong>af</strong> <strong>rotor</strong>bladet og udformin-<br />

gen <strong>af</strong> bladet.<br />

Det ønskes at finde en sammenhæng mellem det samlede løft for <strong>rotor</strong>en og hastigheden <strong>af</strong> luften<br />

gennem <strong>rotor</strong>disken. Denne sammenhæng findes i [Andersen et al., 2006, s. 30-31] og er gentaget i<br />

følgende formel:<br />

22<br />

T = 2 · ρ · A · v 2 i<br />

(7.1)


Hvor:<br />

T er <strong>rotor</strong>ens løft [N]<br />

<br />

kg<br />

ρ er luftens massefylde<br />

m3 <br />

<br />

2 A er <strong>rotor</strong>skivens areal<br />

m <br />

<br />

vi er luftens fart gennem <strong>rotor</strong>skiven m<br />

s<br />

KAPITEL 7 - Rotormodel<br />

Idet luftens massefylde og arealet <strong>af</strong> <strong>rotor</strong>skiven er tilnærmelsesvis konstant, viser Formel 7.1, at<br />

<strong>rotor</strong>kr<strong>af</strong>ten <strong>af</strong>hænger <strong>af</strong> luftens hastighed gennem <strong>rotor</strong>skiven.<br />

7.2 Infinitesmal udsnit <strong>af</strong> <strong>rotor</strong>blad<br />

Det ønskes at finde en sammenhæng mellem en <strong>rotor</strong>s løft og slæb som funktion <strong>af</strong> omdrejnings-<br />

hastigheden. De netop beskrevne egenskaber ved <strong>rotor</strong>er og deres blade benyttes til denne udledning.<br />

Da bladenes udforming ændrer sig fra navet til spidsen vælges det at opdele bladene i meget små<br />

stykker, og beskrive egenskaberne for et enkelt <strong>af</strong> disse, hvorefter der kan integreres over bladenes<br />

længde.<br />

Figur 7.4 viser en <strong>rotor</strong> med to simple blade. Rotoren ligger i xy-planen og z-aksen udvikler sig<br />

positivt, vinkelret nedad, fra <strong>rotor</strong>en. Rotorens vinkelfrekvens Ω regnes positiv, når bladene roterer<br />

mod uret på figuren. Variablen φ er bladets vinkel ifht. den negative del <strong>af</strong> x-aksen.<br />

Længder er påtegnet for et <strong>af</strong> bladene for at illustrere udsnittet dr <strong>af</strong> infinitesimal længde. Variablen c<br />

er bredden <strong>af</strong> <strong>rotor</strong>bladet i <strong>af</strong>standen r fra navet. e er <strong>af</strong>standen fra navet til begyndelsen <strong>af</strong> <strong>rotor</strong>bladet,<br />

R er <strong>af</strong>standen til spidsen <strong>af</strong> bladet og c er bredden <strong>af</strong> <strong>rotor</strong>bladen i <strong>af</strong>standen r fra navet.<br />

23


KAPITEL 7 - Rotormodel<br />

Figur 7.4: Angivelse <strong>af</strong> variabler, der beskriver længder, vinkler og vinkelfre-<br />

kvens i <strong>rotor</strong>skiven.<br />

Figur 7.5 viser tværsnittet <strong>af</strong> et blad. Bladudsnittets hastighed i xy-planen er vektoren Vt, som tan-<br />

gerer cirklen dannet <strong>af</strong> det roterende bladudsnit. Lufthastigheden, parallelt med z-aksen, beskrives<br />

ved vektoren Vz. Den resulterende hastighedsvektor for bladudsnittet er Vb.<br />

<br />

r<br />

r<br />

V z<br />

V t<br />

V b<br />

dL<br />

dS<br />

Figur 7.5: Infinitesimal udsnit <strong>af</strong> <strong>rotor</strong>blad. [Andersen et al., 2006, s. 32]<br />

Vinklen α er udsnittets angrebsvinkel på luften. Vinklen α udgøres <strong>af</strong> den konstante vinkel θr, der<br />

er <strong>af</strong>hængig <strong>af</strong> bladets udforming, og vinklen Φr, der <strong>af</strong>hænger <strong>af</strong> forholdet mellem Vz og Vt. Den<br />

samlede kr<strong>af</strong>tvektor på bladudsnittet opdeles i de to kr<strong>af</strong>tvektorer dL og dS, der beskriver løftet og<br />

slæbet på en lille del <strong>af</strong> bladet bladet. dS er rettet modsat hastigheden Vb, og dL er vinkelret på Vb<br />

og bladet.<br />

Den tangentiale hastighed Vt er bestemt <strong>af</strong> vinkelfrekvensen og udsnittets <strong>af</strong>stand fra navet, hvilket<br />

følgende formel beskriver:<br />

24


Vt<br />

KAPITEL 7 - Rotormodel<br />

<br />

= Ω · r (7.2)<br />

Hastigheden i z-aksen er sammensat <strong>af</strong> luftens hastigheden vi gennem <strong>rotor</strong>en og <strong>rotor</strong>ens positions-<br />

ændring Vpos,z i z-aksen:<br />

Angrebsvinklen er givet ved:<br />

<br />

Vz<br />

<br />

= vi + Vpos,z<br />

α = θr + tan −1<br />

α = θr + Φr<br />

<br />

Vz<br />

De ovenstående formler og figurer beskriver kræfter og vinkler på bladudsnittet, når <strong>helikopter</strong>en<br />

flyver dvs. når den løbende ændrer attitude. Hvis det antages at <strong>helikopter</strong>en altid er i en nær-hover<br />

tilstand kan ligningerne forsimples. Denne antagelse medfører at hastigheden <strong>af</strong> <strong>rotor</strong>en i z-aksens<br />

retning er nul, hvilet simplificerer Formel 7.3 til følgende:<br />

<br />

Vz<br />

<br />

≈ vi<br />

Derudover vil der i nær-hover gælde at <br />

Vt >> Vz<br />

så:<br />

og<br />

dvs. at:<br />

Fremover vil |Vz|<br />

Vz<br />

blive benævnt<br />

|Vt| Vt .<br />

Φr = tan −1<br />

Vb ≈ Vt<br />

Vt<br />

<br />

<br />

Vz<br />

≈ <br />

<br />

Vt<br />

<br />

Vz<br />

α ≈ θr + <br />

<br />

Vt<br />

Vz<br />

Vt<br />

<br />

<br />

<br />

<br />

(7.3)<br />

(7.4)<br />

(7.5)<br />

(7.6)<br />

(7.7)<br />

(7.8)<br />

(7.9)<br />

25


KAPITEL 7 - Rotormodel<br />

7.2.1 Løftet dL på dr<br />

Løftet på et infinitesimalt udsnit <strong>af</strong> et <strong>rotor</strong>blad er ifølge [Bramwell, 1976] givet ved:<br />

hvor ρ er luftens massefylde.<br />

dL = 1 2<br />

· ρ · Vb · c · CL · dr (7.10)<br />

2<br />

[Bramwell, 1976, s. 90]<br />

Faktoren CL <strong>af</strong>hænger <strong>af</strong> <strong>rotor</strong>bladets udforming repræsenteret ved faktoren a og angrebsvinklen α:<br />

hvilket indsættes i Formel 7.10.<br />

CL = a · α (7.11)<br />

Faktoren a kan ikke umiddelbart beregnes, men den kan bestemmes eksperimentelt. En tidligere<br />

projektgruppe har gjort dette, og resultatet her<strong>af</strong> kan findes i [Andersen et al., 2006, s. 30-31] til<br />

a = 2, 2815.<br />

Udtrykkene i Formel 7.7 og Formel 7.9 indsættes i Formel 7.10:<br />

7.2.2 Slæbet dS på dr<br />

dL = 1 2<br />

· ρ · Vt · c · a · (θr +<br />

2 Vz<br />

) · dr (7.12)<br />

Slæbet på et infinitesimalt stykke <strong>af</strong> <strong>rotor</strong>bladet kan generelt udtrykkes på samme måde som løftet:<br />

Vt<br />

dS = 1 2<br />

· ρ · Vb · c · CS · dr (7.13)<br />

2<br />

Konstanten CL er erstattet <strong>af</strong> konstanten for slæb CS, der dog ikke kan udtrykkes så simpelt som CL.<br />

Den må derfor bestemmes eksperimentelt, hvilket er gjort i [Andersen et al., 2006, s. 152], hvor den<br />

blev estimeret til −0, 1426.<br />

7.3 Kræfter og momenter<br />

Løft og slæb fra et infinitesimalt udsnit <strong>af</strong> et <strong>rotor</strong>blad er nu beskrevet, og det ønskes at anvende<br />

dette til at skabe udtryk for de samlede kræfter og momenter på <strong>rotor</strong>en i xyz-koordinatsystemet.<br />

Der defineres tre kræfter for <strong>rotor</strong>en, der peger i henholdsvis x, y og z-aksens retning. Der defineres<br />

ydermere tre momenter, der virker på <strong>rotor</strong>en omkring hver akse i koordinatsystemet - regnet positivt<br />

med uret, når der ses i aksens retning, hvilket er defineret på følgende figur:<br />

26


estimate, as it depends on the aerodynamic design of the blade.<br />

7.3 FORCES AND TORQUES<br />

Each <strong>rotor</strong> generates forces acting outside the origin of its frame, producing torques act-<br />

ing on this <strong>rotor</strong> frame. These forces<br />

KAPITEL 7 - Rotormodel<br />

rFx, rFy, rFz and torques rτx, rτy, rτz are described<br />

in this section and illustrated in Figure 7.6.<br />

3·π<br />

2<br />

____<br />

[r a d ]<br />

Ω<br />

0 [r a d ]<br />

φ<br />

z<br />

τz<br />

τx<br />

π [r a d ]<br />

FIGURE 7.6: Illustration Figur of 7.6: torques Angivelse around the <strong>af</strong> momenter. x-,y-and z-axes.<br />

x<br />

τy<br />

y<br />

π<br />

[r a d ]<br />

2<br />

This section has the main purpose of providing the Equations of forces and torques.<br />

Kræfterne The following dL oglist dS projiceres describesned thepå procedure: hver koordinatakse som sfæriske koordinater for at bestemme<br />

deres bidrag til kræfterne dfx, dfy og dfz. Stykket dr, hvorpå dL og dS virker, har rotationsvinklen<br />

φ ifht. • den Calculate negative forces del <strong>af</strong>acting x-aksen. onFigur a <strong>rotor</strong> 7.7blade i [Andersen element. et al., 2006, s. 30-31] illustrerer, hvorledes<br />

dL og dS projiceres ned på koordinatakserne, og det opsummeres her:<br />

36 <strong>Aalborg</strong> University 2006<br />

dfx = (dL · sin(Φr) − dS · cos(Φr)) · sin(φ) (7.14)<br />

dfy = (−dL · sin(Φr) + dS · cos(Φr)) · cos(φ) (7.15)<br />

dfz = −dL · cos(Φr) − dS · sin(Φr) (7.16)<br />

Det medtages at dL og dS er ortogonale, og at der ingen kr<strong>af</strong>tkomposanter er fra dL eller dS i<br />

x-aksens retning, når bladet er parallelt med x-aksen. Ligeledes for y-aksen. Kr<strong>af</strong>tkomposanten i<br />

z-aksens retning er konstant under hele rotationen.<br />

Momenterne på <strong>rotor</strong>en er direkte <strong>af</strong>hængige <strong>af</strong> de netop udtrykte kræfter. Størrelsen <strong>af</strong> et moment<br />

er givet ved τ = f · a, hvor a er <strong>af</strong>standen, hvori kr<strong>af</strong>ten f påvirker. fx kan ikke skabe et moment<br />

om y-aksen og ligeledes for fy om x-aksen. Kr<strong>af</strong>ten fz vil skabe momenter omkring x- og y-aksen.<br />

Idet der projiceres ind på koordinakserne vha. trigonometriske funktioner som det ses på Figur 7.8 i<br />

[Andersen et al., 2006, s. 39] er det muligt at bestemme momentet omkring hver akse:<br />

dτx = −r · dfz · sin(φ)<br />

= −r · (−dL · cos(Φr) − dS · sin(Φr)) · sin(φ) (7.17)<br />

dτy = r · dfz · cos(φ)<br />

= r · (−dL · cos(Φr) − dS · sin(Φr)) · cos(φ) (7.18)<br />

dτz = r · dfx dfx<br />

= −r ·<br />

sin(φ) sin(φ)<br />

= r · (dL · sin(Φr) − dS · cos(Φr)) (7.19)<br />

____<br />

27


KAPITEL 7 - Rotormodel<br />

Omskrivningen i Formel 7.19 er baseret på Formel 7.14.<br />

De ovenstående ligninger for kræfter og momenter på <strong>rotor</strong>en ønskes simplificeret. Idet vinklen Φr<br />

er lille, og antagelsen i Formel 7.8 udnyttes, kan følgende simplificeringer foretages uden væsentlige<br />

fejl:<br />

sin(Φr) = sin<br />

cos(Φr) = cos<br />

Vz<br />

Vt<br />

<br />

Vz<br />

Vt<br />

<br />

≈ Vz<br />

Vt<br />

<br />

(7.20)<br />

≈ 1 (7.21)<br />

Formel 7.20 og Formel 7.21 indsættes i Formel 7.14-7.16. Idet dS


τx = b<br />

2π<br />

= b<br />

2π<br />

= b<br />

2π<br />

= b · ρ · a<br />

2π R<br />

0 e<br />

2π R<br />

0 e<br />

2π R<br />

0<br />

4π<br />

b · ρ · a<br />

τy = −<br />

4π<br />

τz = b<br />

2π<br />

= b<br />

2π<br />

= b · ρ<br />

4π<br />

e<br />

2π R<br />

0<br />

2π R<br />

0 e<br />

2π R<br />

KAPITEL 7 - Rotormodel<br />

dτx dφ (7.34)<br />

r · dL · sin(φ) dφ (7.35)<br />

r · 1 2<br />

· ρ · Vt · c · a · (θr +<br />

2 Vz<br />

) · sin(φ) drdφ (7.36)<br />

0 e<br />

2π R<br />

0 e<br />

2π R<br />

0<br />

e<br />

e<br />

Vt<br />

r · V 2<br />

t · c · (θr + Vz<br />

) · sin(φ) drdφ (7.37)<br />

Vt<br />

r · V 2<br />

t · c · (θr + Vz<br />

) · cos(φ) drdφ (7.38)<br />

Vt<br />

r · (dL · Vz<br />

− dS) dφ (7.39)<br />

r · 1<br />

2<br />

Vt<br />

· ρ · V 2<br />

t · c · ( Vz<br />

Vt<br />

r · V 2<br />

t · c · ( Vz<br />

Vt<br />

· a · (θr + Vz<br />

) − CS) drdφ (7.40)<br />

Vt<br />

· a · (θr + Vz<br />

) − CS) drdφ (7.41)<br />

Hvor:<br />

b er antal blade på <strong>rotor</strong>en. [-]<br />

ρ er massefylden <strong>af</strong> luften [kg/m 3 ]<br />

e er <strong>af</strong>stand fra nav til bladet bliver buet. [m]<br />

R1 er <strong>af</strong>stand fra e til bladet går fra at blive bredere til at blive smallere [m]<br />

R er <strong>af</strong>stand fra nav til spids [m]<br />

Vt er den tangentiale hastighed for dr. Givet ved ω · r [m/s]<br />

Vz er hastigheden <strong>af</strong> <strong>rotor</strong>en i z-retningen. [m/s]<br />

θr er konstant vinkling <strong>af</strong> bladene [rad]<br />

φ er vinkling fra den negative x-akse til dr. [rad]<br />

a er konstant for løftet, der <strong>af</strong>hænger <strong>af</strong> bladenes opbygning [-]<br />

CS er konstant for slæbet, der <strong>af</strong>hænger <strong>af</strong> bladenes opbygning [-]<br />

Vt<br />

(7.42)<br />

Rotorbladene har en kompliceret udforming, men deres dimensioner kan simplificeres som det ses<br />

på Figur 7.7.<br />

e<br />

s1<br />

R1<br />

1 1<br />

R<br />

Figur 7.7: Rotorblad fra X-Pro, der er geometrisk simplificeret<br />

[Andersen et al., 2006, s. 145] .<br />

s2<br />

29


KAPITEL 7 - Rotormodel<br />

Det første stykke fra navet til e er smalt og den tangentiale hastighed er lav, så bredden c kan med<br />

fordel antages at være nul. Fra e til R1 stiger bredden og c kan beskrives ved følgende forskrift:<br />

c = c1 + s1 · (−e + r) og fra R1 til R falder bredden med forskriften c = c2 + s2 · (R1 − r). Da c kan<br />

udtrykkes som funktion <strong>af</strong> r ved disse simple ligninger, er det en fordel at opdele det indre integrale<br />

i to med grænser fra hhv. e til R1 og fra R1 til R.<br />

fx =<br />

+<br />

fx =<br />

+<br />

b · ρ<br />

4π<br />

R<br />

R1<br />

b · ρ<br />

4π<br />

R<br />

R1<br />

R1<br />

2π<br />

0<br />

R1<br />

e<br />

V 2<br />

t · (c1 + s1 · (−e + r)) · ( Vz<br />

Vt<br />

V 2<br />

t · (c2 + s2 · (R1 − r)) · ( Vz<br />

Vt<br />

2π<br />

0<br />

R1<br />

e<br />

· a · (θr + Vz<br />

) − CS)dr (7.43)<br />

Vt<br />

· a · (θr + Vz<br />

<br />

) − CS)dr sin(φ) dφ<br />

Vt<br />

V 2<br />

t · (c1 + s1 · (−e + r)) · (− Vz<br />

V 2<br />

t · (c2 + s2 · (R1 − r)) · (− Vz<br />

2π<br />

Vt<br />

Vt<br />

· a · (θr + Vz<br />

) + CS)dr (7.44)<br />

Vt<br />

· a · (θr + Vz<br />

<br />

) + CS)dr cos(φ) dφ<br />

b · ρ · a<br />

<br />

fz = −<br />

4π 0<br />

R1<br />

V<br />

e<br />

2<br />

t · (c1 + s1 · (−e + r)) · (θr + Vz<br />

)dr (7.45)<br />

Vt<br />

R<br />

+ V 2<br />

t · (c2 + s2 · (R1 − r)) · (θr + Vz<br />

<br />

)dr dφ<br />

Ligeledes for momenterne:<br />

τx =<br />

+<br />

R1<br />

2π<br />

Vt<br />

b · ρ · a<br />

<br />

4π 0<br />

R1<br />

r · V<br />

e<br />

2<br />

t · (c1 + s1 · (−e + r)) · (θr + Vz<br />

)dr (7.46)<br />

Vt<br />

R<br />

r · V 2<br />

t · (c2 + s2 · (R1 − r)) · (θr + Vz<br />

<br />

)dr · sin(φ) dφ<br />

R1<br />

2π<br />

b · ρ · a<br />

<br />

τy = −<br />

4π 0<br />

R1<br />

r · V<br />

e<br />

2<br />

t · (c1 + s1 · (−e + r)) · (θr + Vz<br />

)dr (7.47)<br />

Vt<br />

R<br />

+ r · V 2<br />

t · (c2 + s2 · (R1 − r)) · (θr + Vz<br />

<br />

)dr · cos(φ) dφ<br />

τz =<br />

+<br />

b · ρ<br />

4π<br />

R<br />

R1<br />

2π<br />

0<br />

R1<br />

e<br />

Vt<br />

Vt<br />

Vt<br />

r · V 2<br />

t · (c1 + s1 · (−e + r)) · ( Vz<br />

r · V 2<br />

t · (c2 + s2 · (R1 − r)) · ( Vz<br />

Vt<br />

Vt<br />

Vt<br />

· a · (θr + Vz<br />

) − CS)dr (7.48)<br />

Vt<br />

· a · (θr + Vz<br />

<br />

) − CS)dr dφ<br />

MatLAB-filen /matlab/RotorModel/forces.m installeret benyttes til at udregne dobbeltin-<br />

tegralerne. Konstanterne i de ovenstående udtryk erstattes <strong>af</strong> målte værdier fra Tabel C.1 i<br />

[Andersen et al., 2006, s. 149], der opsummeres her:<br />

30


er 2 [-]<br />

ρ er 1.293 [km/m 3 ]<br />

e er 0,034 [m]<br />

R1 er 0,082 [m]<br />

R er 0,26 [m]<br />

θr er 0,44 [rad]<br />

a er 2,2815 [-]<br />

CS er -0.1426 [-]<br />

De behandlede udtryk bliver som følger:<br />

KAPITEL 7 - Rotormodel<br />

fx = 0 (7.49)<br />

fy = 0 (7.50)<br />

fz = −0, 193 · 10 −3 · ω 2 − 8, 946 · 10 −3 · ω (7.51)<br />

τx = 0 (7.52)<br />

τy = 0 (7.53)<br />

τz = 5, 109 · 10 −6 · ω 2 − 0, 655 · 10 −3 · ω + 0, 030 (7.54)<br />

Da <strong>rotor</strong>erne skal holde <strong>helikopter</strong>en i hover vælges det, for at minimere beregningskompleksite-<br />

ten at linearisere udtrykket for kr<strong>af</strong>ten fz. Lineariseringen udføres omkring et lineariseringspunkt,<br />

hvor <strong>rotor</strong>kr<strong>af</strong>ten netop svarer til tyngdekr<strong>af</strong>ten på én fjerdedel <strong>af</strong> <strong>helikopter</strong>ens masse. Den samlede<br />

masse <strong>af</strong> X-Pro’en er ca. 2,3 kg jf. [Andersen et al., 2006] og den tilhørende <strong>rotor</strong>kr<strong>af</strong>t er ca. 5,84<br />

N. Det kræver en vinkelfrekvens på ca. 147 rad<br />

s . På Figur 7.8 er kr<strong>af</strong>ten fz plottet som funktion <strong>af</strong><br />

vinkelfrekvensen ω, og lineariseringspunktet er markeret som en cirkel.<br />

31


KAPITEL 7 - Rotormodel<br />

Kr<strong>af</strong>t fra <strong>rotor</strong> [N]<br />

0<br />

-1<br />

-2<br />

-3<br />

-4<br />

-5<br />

-6<br />

-7<br />

-8<br />

-9<br />

-10<br />

0 20 40 60 80 100 120 140 160 180 200<br />

Vinkelfrekvens [rad/s]<br />

Figur 7.8: Rotorkr<strong>af</strong>t som funktion <strong>af</strong> vinkelfrekvensen. Cirklen angiver line-<br />

ariseringspunktet.<br />

Forskriften for den lineære kurve er:<br />

fz,lin = fz(147) + f ′ z(147) · (ω − 147) (7.55)<br />

fz,lin = −0.0704 · ω + 4.48 (7.56)<br />

Formel 7.56 beskriver en tidsmæssig sammenhæng mellem <strong>rotor</strong>kr<strong>af</strong>ten og vinkelfrekvensen. Hvis<br />

det konstante led fjernes, er udtrykket lineært og tids-invariant, og kan Laplace-transformeres for at<br />

finde sammenhængen i s-domænet:<br />

7.4 Verifikation<br />

Fz(s) = L {−0.0704 · ω(t)} = −0.0704 · Ω(s) (7.57)<br />

I målerapporten, der forefindes i Appendiks E, er der blevet optaget sammenhørende målinger <strong>af</strong><br />

<strong>rotor</strong>kr<strong>af</strong>ten fz og vinkelfrekvensen. Plottet <strong>af</strong> disse målinger sammen med kurverne beskrevet ved<br />

fz og fz,lin ses på Figur 7.9, der er kopieret fra Afsnit E.5.<br />

32


Kr<strong>af</strong>t fra <strong>rotor</strong> [N]<br />

0<br />

-1<br />

-2<br />

-3<br />

-4<br />

-5<br />

-6<br />

-7<br />

-8<br />

-9<br />

-10<br />

0 20 40 60 80 100 120 140 160 180 200<br />

Vinkelfrekvens [rad/s]<br />

KAPITEL 7 - Rotormodel<br />

Figur 7.9: Plot <strong>af</strong> opadrettet kr<strong>af</strong>t fra <strong>rotor</strong> som funktion <strong>af</strong> vinkelfrekvensen.<br />

Det ses <strong>af</strong> figuren at andengradsligningen stemmer godt overens med de plottede punkter, og da<br />

hældningen <strong>af</strong> linjen, der beskriver den lineariserede sammenhæng, altid har samme fortegn som<br />

hældningen <strong>af</strong> andengradsligningen vil lineariseringen kunne benyttes uden fortegnsfejl. Det vil sige,<br />

at hvis en controller, der regulerer efter førstegradsligningen, ønsker at øge <strong>rotor</strong>kr<strong>af</strong>ten, vil den øge<br />

vinkelfrekvensen, hvilket efter den mere præcise andengradsligning netop vil give en øget <strong>rotor</strong>kr<strong>af</strong>t;<br />

omend med en fejl i form <strong>af</strong> en positiv skalar.<br />

33


KAPITEL 8<br />

Motormodel<br />

Følgende kapitel beskriver en samlet model <strong>af</strong> motor og gearopsætningen på helikoptoren. Helikop-<br />

teren er, som tidligere beskrevet, udstyret med fire <strong>rotor</strong>er. Disse er hver forbundet med en DC-motor,<br />

vha. et gear. Motorerne er børstemotorer med permanente magneter. Via et tandhjul på drivaksen er<br />

motorerne, som det fremgår i Figur 8.1, forbundet til <strong>rotor</strong>erne med en tandrem. Gearet har et ud-<br />

vekslingsforhold ηg på 10 fra motor til <strong>rotor</strong>.<br />

ROTOR<br />

MOTOR<br />

GEAR<br />

Figur 8.1: Illustration <strong>af</strong> koblingen mellem motor, gear og <strong>rotor</strong>.<br />

Motorbeskrivelsen deles op i to, en del hvor den elektriske model <strong>af</strong> motoren beskrives og en del hvor<br />

den mekaniske model <strong>af</strong> både motor og gear opstilles. Til sidst samles modellerne og verificeres<br />

34


KAPITEL 8 - Motormodel<br />

sammen med <strong>rotor</strong>erne i verificeringskapitlet. Motorparametrene er blevet bestemt <strong>af</strong> en tidligere<br />

gruppe [Bjørn et al., 2007, s.42] og det antages at disse er <strong>af</strong> sådan en kvalitet, at de kan bruges i<br />

modellen. Der vil således ikke blive målt på motorerne ud over ved verificeringen.<br />

8.1 Elektrisk Model<br />

Den elektriske del <strong>af</strong> motoren består hovedsageligt <strong>af</strong> spolerne i armaturet og spændingskilden, der<br />

driver motoren. Det antages, at spolerne er ens og at de kan beskrives ved kredsløbsækvivalentet<br />

givet i Figur 8.2. Herudover forekommer der også mindre spændingsfald i kommunikatoren. Disse<br />

er dog så små, at det vælges at se bort herfra [Ritchie, 2007]<br />

v (t)<br />

a<br />

+ -<br />

Ra<br />

i a(t)<br />

Figur 8.2: Kredsløbsækvivalent til den elektriske del <strong>af</strong> motoren. Størrelsen<br />

va(t) er armaturspændingen. Enhederne Ra og La er hhv. armaturets o-<br />

hm’ske modstand og induktans og e(t) er den inducerede elektromotoriske<br />

kr<strong>af</strong>t.<br />

Benyttes Kirshhoff’s spændingslov på kredsløbet, kan armaturspændingen va(t) udtrykkes som føl-<br />

gende:<br />

L a<br />

dia<br />

va(t) = Raia(t) + La + e(t) (8.1)<br />

dt<br />

Selvinduktionen for en spole er, ifølge Faraday’s lov, givet ved:<br />

ε = −N dΦB<br />

dt<br />

+<br />

-<br />

e(t)<br />

(8.2)<br />

[Serway and John W. Jewett, 2004, s.1005]<br />

Hvor ΦB er fluxen gennem spolen, og N er antallet <strong>af</strong> vindinger. Det noteres, at minusset angiver, at<br />

selvinduktionspændingen er modsat armaturspændingen. Dette skyldes Lenz’ lov, som siger, at der i<br />

en spole, som føres igennem et magnetisk felt, vil induceres en strøm i den retning, der danner et felt<br />

som modvirker det første felt [Serway and John W. Jewett, 2004, s.977]. Idet armaturet drejer rundt<br />

i motoren, vil der, pga. det permanente magnetfelt, således induceres en strøm modsat armaturstrøm-<br />

men. Da der er taget højde herfor i Formel 8.1 droppes notationen. Splittes differentialledet op vha.<br />

35


KAPITEL 8 - Motormodel<br />

kædereglen, hvor motoraksens vinkel θm benyttes som mellem-variablen, kan udtrykket omskrives<br />

til:<br />

e(t) = N dΦB dθm<br />

dθm dt<br />

dΦB<br />

= N ωm(t) (8.3)<br />

dθm<br />

Selvinduktionen kan dermed udtrykkes ved vinkelhastigheden. Undersøges fluxen ΦB, <strong>af</strong>hænger<br />

den udelukkende <strong>af</strong> spolens geometri og B-feltet herigennem. Da motorerne er med permanente<br />

magneter og det at antages spolerne i armaturet er ens, kan N dΦB antages at være konstant. Denne<br />

dθm<br />

sammenhæng udtrykkes normalt ved konstanten Ke - også kendt som selvinduktionskonstanten. e(t)<br />

kan således udtrykkes som:<br />

e(t) = Keωm(t) (8.4)<br />

Hvor Ke er givet i <br />

Vs<br />

rad og ωm(t) er motorens vinkelhastighed i [rad/s]. Omskrives og Laplacetransformeres<br />

Formel 8.1, med udtrykket for selvinduktionen indsat, kan armaturstrømmen Ia(s)<br />

findes:<br />

va(t) =<br />

dia<br />

Raia(t) + La<br />

dt + Keωm(t) (8.5)<br />

Va(s) = RaIa(s) + LasIa(s) + Keωm(s) ⇒<br />

Ia(s) = Va(s) − Keωm(s)<br />

Ra + Las<br />

(8.6)<br />

Udfra Formel 8.6 opstilles en Simulink model for den elektriske del <strong>af</strong> motoren.<br />

1<br />

V_a<br />

Subtract<br />

1<br />

L_a.s+R_a<br />

Transfer Fcn<br />

K_e<br />

Gain<br />

1<br />

I_a<br />

2<br />

omega<br />

Figur 8.3: Simulink-model <strong>af</strong> den elektriske motormodel<br />

Som det fremgår <strong>af</strong> Formel 8.6 har systemet kun en enkelt pol og er derfor et 1. ordens system.<br />

Før den samlede model kan bestemmes, mangler den mekaniske del <strong>af</strong> systemet. Denne vil blive<br />

gennemgået i det efterfølgende <strong>af</strong>snit<br />

8.2 Mekanisk Model<br />

Den mekaniske model består, som det fremgår <strong>af</strong> Figur 8.1, <strong>af</strong> motorens armatur og gearkoblingen.<br />

For at simplificere modellen antages det at tandremmen ikke er elastisk. Herudover vil der blive set<br />

36


ort fra sticktionen i gear og motor, hvilket vil blive nærmere forklaret i Afsnit 8.2.1.<br />

KAPITEL 8 - Motormodel<br />

I forbindelse med gearkoblingen noteres det at en omdrejning på motoren kun vil give en tiendedel<br />

omdrejning på <strong>rotor</strong>en, samt at momentet bliver bliver ganget op med 10. Formel 8.7 og Formel 8.8<br />

udtrykker sammenhængen i forhold til gearudvekslingsforholdet ηg:<br />

Hvor:<br />

ωm er motorens vinkelhastighed [rad/s]<br />

ωg er gearets vinkelhastighed [rad/s]<br />

ηg er gearudvekslingsforholdet [-]<br />

Momentoverførsel mellem gear og motor:<br />

Hvor:<br />

ωg = ωm<br />

ηg<br />

τg = ηg τm<br />

τm er lastmomentet virkende på motoren [Nm]<br />

τg er lastmomentet virkende på gearet [Nm]<br />

ηg er gearudvekslingsforholdet [-]<br />

8.2.1 Motor Model<br />

Som det fremgår <strong>af</strong> Figur 8.4 vil motoren belastes <strong>af</strong> <strong>rotor</strong>en, her benævnt τl,m. Motorens fysiske<br />

udformning bidrager også med belastning i form <strong>af</strong> intern friktion τf,m og armaturets inerti Jm.<br />

f,m . m Jmm Armatur<br />

J m<br />

Rem<br />

f,g m . g Gear r .<br />

<br />

m<br />

J g g<br />

J g<br />

m l,m .<br />

m<br />

Figur 8.4: Free-body-diagram <strong>af</strong> motoren og gearet.<br />

Rotor<br />

(8.7)<br />

(8.8)<br />

37


KAPITEL 8 - Motormodel<br />

Den interne friktion deles normalt op i tre forskellige friktionsmomenter: Viskos friktion τv, som er<br />

proportional med ω og er ækvivalent til den friktion, der forekommer i væsker. Coulomb friktionen<br />

τc, som skyldes træghed i lejerne i motoren. Og den sidste form for friktion kaldes sticktion friktion.<br />

Sticktion beskriver, det at det kræver et større moment at starte rotationen <strong>af</strong> motoren end at køre den<br />

ved hastigheder tæt på nul [Pedersen, 2007]. Eftersom <strong>rotor</strong>eren ikke skal starte og stoppe gentagen-<br />

de gange under flyvning, vælges det at se bort fra sticktion og kun fokusere på viskos og coulomb<br />

friktion. Det samlede friktionsmoment kan således udtrykkes som:<br />

⎧<br />

⎪⎨ bωm + sign(ω)τc hvis ω = 0<br />

τf,m = τm − τl,m<br />

⎪⎩ sign (τm − τl,m) τc<br />

hvis ω = 0 og | τm − τl,m |≤ τc<br />

hvis ω = 0 og | τm − τl,m |> τc<br />

(8.9)<br />

[Andersen and Pedersen, 2007]<br />

For at simplificere modellen yderligere antages det, at den kun skal gælde under flyvning eller hvor<br />

ω > 0. Friktionsmomentet er således givet ved det første udtryk i Formel 8.9.<br />

Det samlede moment virkende på motorakslen skal, i følge Newtons 2. lov, være nul<br />

[Serway and John W. Jewett, 2004, s.365]. Motormomentet kan således udtrykkes som følgende:<br />

τm − τl,m − τf,m = Jm ˙ωm<br />

(8.10)<br />

Drivmomentet er givet ved τm = Kmia og kobler således den elektriske del med den mekaniske.<br />

Km er motorkonstanten givet i [Nm/A] og kan antages at være lig med Ke. Såfremt det igen antages,<br />

at der ingen tab er i den magnetiske kobling i motoren, kan Formel 8.10 overskrives til:<br />

Jm ˙ωm(t) = Kmia(t) − τl − τf<br />

Laplace-transformeres og omskrives Formel 8.11, kan vinkelhastigheden udtrykkes som følgende:<br />

(8.11)<br />

Jmωm(s)s = KmIa(s) − τl − τf,m (8.12)<br />

ωm(s) = (KmIa(s) − τl − τf,m) 1<br />

Jms<br />

(8.13)<br />

Figur 8.5 viser Simulink-modellen for den mekaniske motormodel. Det ses, at hvis 1<br />

Jms<br />

i to med hhv. 1<br />

Jm<br />

deles op<br />

og 1<br />

s , integreres der for at finde vinkelhastigheden. Vinkelaccelerationen ˙ωm må<br />

dermed kunne findes mellem de to blokke. Accelerationen er vigtig eftersom den er nødvendig for<br />

at finde impulsmomentet skabt <strong>af</strong> gearets inerti. Dette vil blive uddybet i næste <strong>af</strong>snit omkring gear-<br />

modellen.<br />

38


1<br />

I_a<br />

8.2.2 Gear Model<br />

K_m<br />

Gain<br />

3<br />

tau_l<br />

tau_m<br />

2<br />

tau_f<br />

Subtract<br />

1<br />

J_m.s<br />

Transfer Fcn<br />

KAPITEL 8 - Motormodel<br />

1<br />

omega<br />

Figur 8.5: Simulink-model over den mekaniske motormodel<br />

Gearet kobler, som nævnt, motoren til <strong>rotor</strong>en. Set fra motoren kan hele gear- og <strong>rotor</strong>systemet<br />

betragtes som en samlet belastning τl,m. Gearmodellen findes ved først at finde belastningsmoment i<br />

forhold til <strong>rotor</strong>aksen og derefter koble momentet til motoren vha. koblingsformlerne givet i Formel<br />

8.7 og 8.8 på side 37.<br />

Newtons 2. lov for <strong>rotor</strong>aksen er givet ved:<br />

Jg ˙ωg = τf,g + τr − τl,g<br />

(8.14)<br />

Hvor τf,g er givet ved bgωg + τc, hvor bg er den viskose friktionskonstant for gearet. Omskrives<br />

udtrykket, vha. Formel 8.7 og 8.8, så det <strong>af</strong>hænger <strong>af</strong> motorens vinkelhastighed frem for gearets,<br />

findes belastningen på motoren:<br />

τl,g = (Jg ˙ωm + bgωm) 1<br />

τl,m = τl,g<br />

ηg<br />

+ τc + τr<br />

ηg<br />

Det samlede lastmoment fra gearet kan således udtrykkes ved Simulink-modellen vist i Figur 8.6.<br />

1<br />

tau_l,m<br />

2<br />

omega_dot<br />

1<br />

omega<br />

1/eta<br />

Gain5<br />

1/eta<br />

Gain3<br />

1/eta<br />

Gain1<br />

tau_l,g<br />

J_g<br />

Gain4<br />

b_g<br />

Gain2<br />

Add<br />

Figur 8.6: Gear modellen i Simulink<br />

4<br />

tau_c,g<br />

3<br />

tau_<strong>rotor</strong><br />

(8.15)<br />

(8.16)<br />

39


KAPITEL 8 - Motormodel<br />

8.3 Samlet Model<br />

Kobles den elektriske og mekaniske motormodel sammen med gearmodellen fås et udtryk for det<br />

samlede system, hvilket er vist i Figur 8.7.<br />

3<br />

Va(s)<br />

Subtract1<br />

1<br />

L_a.s+R_a<br />

Transfer Fcn1<br />

K_m<br />

Gain<br />

tau_m<br />

tau_f,m<br />

K_e<br />

Gain7<br />

Subtract<br />

tau_l,m<br />

1<br />

J_m<br />

Transfer Fcn<br />

b_m<br />

Gain6<br />

tau_cm<br />

Coulomb friktion<br />

omega_dot(s)<br />

1<br />

s<br />

Integrator<br />

omega_m(s)<br />

Figur 8.7: Samlet motor/gear-model<br />

1/eta<br />

Gain5<br />

1/eta<br />

Gain3<br />

1/eta<br />

Gain1<br />

J_g<br />

Gain4<br />

b_g<br />

Gain2<br />

Add<br />

2<br />

tau_c,g<br />

1<br />

tau_<strong>rotor</strong><br />

Ved at betragte Figur 8.7 ses det, at løkken med gearets viskose friktion bg, kan samles i en paral-<br />

lelkobling med friktionen i motoren bm. Idet der tages højde for gearudvekslingen, kan den samlede<br />

viskose friktion for systemet btot udtrykkes som (bm + bg<br />

η 2 ). Reduceringen er illustreret på Figur 8.8.<br />

Det ses nu at gearets inertimoment Jg indgår i en lukket sløjfe med inertimomentet for motoren Jm.<br />

Vha. formlen for lukket-sløjfe overføringsfunktionen kan inertimomentløkken reduceres til<br />

Da nævneren er et udtryk for det samlede inertimoment benævnes den Jtot.<br />

40<br />

1<br />

Jm+ Jg<br />

η2 .


2<br />

Va(s)<br />

Subtract1<br />

1<br />

L_a.s+R_a<br />

Transfer Fcn1<br />

K_m<br />

Gain<br />

tau_m<br />

tau_f,m<br />

K_e<br />

Gain7<br />

tau_l,m<br />

Subtract<br />

1/eta<br />

Gain5<br />

Transfer Fcn<br />

1<br />

1<br />

J_m+J_g/eta^2<br />

b_m+b_g/eta^2<br />

Transfer Fcn2<br />

tau_cm+tau_cg/eta<br />

Coulomb friktion<br />

1<br />

s<br />

Integrator<br />

KAPITEL 8 - Motormodel<br />

omega_m(s)<br />

tau_<strong>rotor</strong><br />

Figur 8.8: Den samlede model hvor sløjferne med viskos friktion og inerti-<br />

moment er blevet lukket<br />

1<br />

1/eta<br />

Gain1<br />

1<br />

omega_g(s)<br />

Figur 8.8 viser motor og gearmodellen hvor de to sløjfter er blevet lukket. Som det fremgår danner<br />

btot og Jtot selv en sløjfe. Lukkes denne, kan modellen yderligere reduceres, hvilket er gjort i Figur<br />

8.9.<br />

2<br />

Va(s)<br />

Subtract1<br />

K_m<br />

L_a.s+R_a<br />

Transfer Fcn1<br />

tau_m<br />

K_e<br />

Gain7<br />

tau_l,m<br />

Subtract<br />

1/eta<br />

Gain5<br />

1<br />

J_tot.s+b_tot<br />

Transfer Fcn<br />

tau_c_tot<br />

Coulomb friktion<br />

Figur 8.9: Samlet motor/gear-model<br />

omega_m(s)<br />

1/eta<br />

Gain1<br />

1<br />

tau_<strong>rotor</strong><br />

1<br />

omega_g(s)<br />

Ses der bort fra belastningen τl,m, kan zero-state overføringsfunktionen for gearmodellen findes. I<br />

og med zero-state antages, går Coulomb friktionen τc ud. Da motormodellens ste ady-state <strong>af</strong>hænger<br />

<strong>af</strong> den samlede friktion i motoren, og dermed også τc, vil zero-state antagelsen medføre en fejl i<br />

DC-gainet. Med andre ord vil modellen give en anden steady-state hastighed end den i virkeligheden<br />

er. Det er dermed kun systemets dynamik, der kan vurderes ud fra overføringsfunktionen, hvilket vil<br />

blive eftervist i Afsnit 8.3.1.<br />

Eftersom rotationssensorne sidder på gearet udregnes udtrykket i forhold til ωg, hvilket giver:<br />

41


KAPITEL 8 - Motormodel<br />

M(s) = ωg(s)<br />

Va(s) =<br />

Km<br />

ηg(LaJtots 2 + (btotLa + RaJtot)s + (KmKe + Rabtot))<br />

(8.17)<br />

Motormodellen kan således udtrykkes ved en 2. ordens overføringsfunktion. Eftersom reguleringen<br />

vil øge systemets ordens yderligere, er det ønskeligt at reducere motormodellens orden. Dette skyldes<br />

at design approksimationerne tager udgangspunkt i et 2. ordens system [Franklin et al., 2006, s.116].<br />

Det vælges derfor at undersøge om overføringsfunktionen kan simplificeres.<br />

8.3.1 Simplificering <strong>af</strong> modellen<br />

Systemets orden kan reduceres, hvis det ikke har en nævneværdig indflydelse at fjerne 2. ordens<br />

leddet i Formel 8.17. Leddet kan enten fjernes ved at se bort fra induktansen La eller inertien Jtot i<br />

systemet. Disse parametre indgår henholdsvis i den elektriske og mekaniske del <strong>af</strong> motoren. For at<br />

vurdere deres indflydelse er det således nødvendigt at se på hvilken der har størst indflydelse på det<br />

samlede system.<br />

Udfra Figur 8.9 kan tidskonstanterne for hhv. den elektriske og mekaniske del findes:<br />

τe = La<br />

≈ 1, 3 ms (8.18)<br />

Ra<br />

τmek = Jtot<br />

btot<br />

≈ 1, 3 s (8.19)<br />

Da den mekaniske tidskonstant er størst vil systemets dynamik blive domineret her<strong>af</strong>. Fjernes in-<br />

duktansen La vil det således, teoretisk set, kun have en indflydelse i de første milisekunder <strong>af</strong> mo-<br />

torreponset. Overføringsfunktionen for motorgearmodel kan derfor reduceres til følgende 1.ordens<br />

udtryk:<br />

Hvor:<br />

og<br />

M(s) =<br />

τm er tidskonstanten for motor-gearsystemet<br />

A er DC-forstærkningen<br />

A =<br />

Km<br />

ηg(btotRa + KeKm)<br />

A<br />

τms + 1<br />

og τm =<br />

RaJtot<br />

btotRa + KeKm<br />

(8.20)<br />

For at verificere at induktansen kan fjernes uden at påvirke systemet betydeligt, er stepresponset<br />

for både den reducerede og originale funktion vist i Figur 8.10. Desuden er stepresponset for den<br />

simulerede model også illustreret, for at vise at zero-state antagelsen og dermed τc ikke har nogen<br />

indflydelse på systemets dynamik.<br />

42


1<br />

0.9<br />

0.8<br />

0.7<br />

0.6<br />

0.5<br />

0.4<br />

0.3<br />

0.2<br />

0.1<br />

0<br />

0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09<br />

KAPITEL 8 - Motormodel<br />

Original<br />

Simplificeret<br />

Simulink<br />

Figur 8.10: Enhedsstepresponset for hhv. den simplificeret og originale<br />

overføringsfunktion for motoren.<br />

Det ses at der er en mindre <strong>af</strong>vigelse i omkring t = 0, hvilket var forventet. Hvad figuren ikke viser,<br />

er at steady-state værdien for de fundne overføringsfunktioner, givet i Formel 8.17 og 8.20, er cirka<br />

tre gange højere end den for simulerede model (beregninger kan findes i bilag under /matlab/<br />

MotorModel/ MotorGearStepRespons.m). Dette viser at zero-state antagelsen påvirker DC-<br />

gainet for de fundne overføringsfunktioner. På trods her<strong>af</strong> vælges der at arbejde videre med den<br />

simplificerede overføringsfunktion.<br />

8.4 Verifikation<br />

Motor-gearmodellen virker som udgangspunkt kun på et teoretisk grundlag. Endvidere bygger mo-<br />

dellen på en række antagelser, hvilket, som vist, har h<strong>af</strong>t en indflydelse på modellen. Herudover er<br />

motorparametrene brugt, fundet <strong>af</strong> en tidligere projektgruppe. Der er således forbundet en række mu-<br />

lige fejlkilder med modellen, hvorfor det er nødvendigt at verificere den, inden regulatoren designes.<br />

Verificeringen er foretaget ved at påtrykke motoren et spændingsstep, som beskrevet i Appendik H.<br />

Motoren er koblet til gearet og <strong>rotor</strong>en. Rotoren medtages fordi motormodellen ikke tager højde for<br />

<strong>rotor</strong>erens inerti. Da inertiet vil belaste motoren med et impulsmoment under acceleration, vil dette<br />

have betydning for systemets samlede dynamik. Det forventes derfor at dynamikken for den opstille-<br />

de model, vil <strong>af</strong>vige fra den, som de målte data udtrykker. Dette skyldes at motorparametrene fra den<br />

tidligere projektgruppe kun gælder motor og gearsystemet. Parametrene vil derfor blive modificeret<br />

så modellens dynamik kommer til at stemme overens med dynamikken for det målte system.<br />

I stedet for at måle <strong>rotor</strong>hastigheden i forhold til armaturspændingen, som den opstillede model<br />

ligger op til, vælges det at måle armaturstrømmen ifht. spændingen. Grunden hertil, skyldes besvær-<br />

ligheder med at måle <strong>rotor</strong>hastigheden, hvilket er beskrevet yderligere i Appendiks H. Da systemet<br />

er lineær vil strømmen desuden beskrive systemets dynamik, så vel som <strong>rotor</strong>hastigheden.<br />

43


KAPITEL 8 - Motormodel<br />

Current [A]<br />

16<br />

14<br />

12<br />

10<br />

8<br />

6<br />

4<br />

2<br />

Measured<br />

Simulated<br />

0<br />

0 0.2 0.4 0.6<br />

Time [s]<br />

0.8 1<br />

Figur 8.11: Strømkurver for det simulerede og målte system. Den stiblede<br />

linje angiver resultatet for det simulerede system med parametrene taget fra<br />

den tidligere projektgruppe. Den solide kurve angiver det målte respons.<br />

Figur 8.11 viser strømkurver, fundet fra den simulerede model og strømmålinger på motoren. Som<br />

det fremgår stemmer strømmens udvikling mellem de to målinger overens. Omkring t = 0 stiger<br />

strømmen brat, hvilket skyldes at hele spændingsfaldet ligger over armaturemodstanden som, i følge<br />

den tidligere gruppes målinger, er 209 mΩ. Der sker således næsten en kortslutning <strong>af</strong> strømforsy-<br />

ningen i t = 0. Ændringen i strømmen vil teoretisk set skabe et spændingsfald over armaturspolen,<br />

hvilke vil hæve stigtiden. Dette ses kun svagt i toppen <strong>af</strong> strømpeaket for modellen og slet ikke for<br />

data for det målte system. Antagelsen om spolens manglende indflydelse er dermed velbegrundet.<br />

Mht. strømpeakens størrelse, stemmer disse dårligt overens, hvilket højst sandsyndligt skyldes, at ar-<br />

maturmodstanden brugt i modellen ikke er korrekt. For at verificere denne påstand, er der foretaget<br />

en måling <strong>af</strong> armaturmodstaden, hvilket kan findes i Appendiks I. Her findes modstanden i stedet til<br />

410 mΩ. Resultatet her<strong>af</strong> kan ses i Figur 8.12, som viser modellen med de koorigerede motordata og<br />

målingerne.<br />

Efter peaket falder strømmen til et steady-state niveau. Dette skyldes at motoren begynder at ro-<br />

tere, hvilket inducerer emf. emf’en mindsker spændingfaldet over armaturmodstanden, hvilket får<br />

strømmen til at falde. Strømmens indsving <strong>af</strong>hænger således direkte <strong>af</strong> hvor hurtigt motoren rote-<br />

rer. Indsvinget på Figur 8.11 skyldes dermed accelerationen i motorerens rotationshastighed. Dette<br />

bestemmes igen <strong>af</strong> impulsmomentet, skabt <strong>af</strong> inertien i systemet. Som det fremgår <strong>af</strong> Figur 8.11, så<br />

svinger modellen hurtigere ind end i virkeligheden. Dette er forventet, eftersom modellen ikke tager<br />

højde for inertien i <strong>rotor</strong>erne. Det er fundet, at inertien med <strong>rotor</strong> cirka er 3,5 gange større end den<br />

benyttede i simuleringen. Benyttes denne værdi i stedet fås indsvinget vist på Figur 8.12.<br />

Steady-state værdien på Figur 8.11 <strong>af</strong>viger endvidere fra den målte. I steady-state er det kun Coulomb<br />

og viskos friktion, samt <strong>rotor</strong>en, der yder friktion. Stor friktion betyder at motoren trækker en stor<br />

strøm. Dette betyder at friktionen i modellen er for stor. Hvilket antyder at de målte friktionspara-<br />

44


Current [A]<br />

10<br />

9<br />

8<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

0 0.2 0.4 0.6<br />

Time [s]<br />

0.8 1<br />

KAPITEL 8 - Motormodel<br />

Measured<br />

Simulated<br />

Figur 8.12: Strømkurver for det simulerede og målte system, hvor motorpa-<br />

rametrene er blevet korigeret i simuleringen.<br />

metre ikke er korrekte. Divideres disse med en faktor 10 vil modellen passe med målingerne, hvilket<br />

er illustreret i Figur 8.12. De samlede parametre for systemet, der vil blive arbejdet videre med, er<br />

således givet i Tabel 8.1.<br />

Model parametre<br />

Originale Korigerede<br />

Parameter Beskrivelse Værdier Værdier Enhed<br />

La Armaturinduktans 0,2811 mH<br />

Ra Armaturmodstand 209 410 mΩ<br />

Km Motorkonstanten 4, 6 · 10 −3 N m/A<br />

Ke Selvinduktionskonstanten 4, 6 · 10 −3 V s/rad<br />

Jtot Samlede inerti 2, 7 · 10 −6 9, 45 · 10 −6 kg m 2<br />

btot Samlede viskos friktion 2, 12 · 10 −6 2, 12 · 10 −7 N m/rad s<br />

τc Coulomb friktion 7, 6 · 10 −3 7, 6 · 10 −4 N m/rad s<br />

Tabel 8.1: Modelparanetre brugt til at beskrive motor, gear og <strong>rotor</strong>syste-<br />

met. De originale værdier er fra en tidligere projektgruppe som har foretaget<br />

målinger på motoren og gearet [Bjørn et al., 2007, s.45]<br />

Det kan konkluderes at modellen passer godt overens med det forventet respons, men at parametrene,<br />

fundet <strong>af</strong> den tidligere projektgruppe, ikke kan bruges til at beskrive motorernes respons. Afvigel-<br />

sen i inertiet kan forklares med <strong>rotor</strong>en. Men med hensyn til målingen <strong>af</strong> armaturmodstanden, må<br />

det kunne antages at målingen er nogenlunde præcis. Den store <strong>af</strong>vigelse, kan således antyde at<br />

motorerne er blevet udskiftet, hvis der ikke er tale om målefejl.<br />

45


DEL III<br />

Systemdesign<br />

Der skal udtænkes en overordnet opbygning <strong>af</strong> systemet, så den ønskede<br />

funktionalitet kan opnås. Designet skal tilgodese de beskrevne modeller<br />

og de opstillede krav. Der skal vælges en platform til systemet baseret<br />

på en mikrokontroller, og de nødvendige interfaces til det fysiske system<br />

skal vælges.


KAPITEL 9<br />

Overordnet design<br />

For at kunne holde <strong>helikopter</strong>en stabil i en given vinkel, skal der udvikles en platform, som sikrer at<br />

den nødvendige regulering kan foretages. Udformningen <strong>af</strong> platformen skal således tage udgangs-<br />

punkt i de opstillede modeller. Figur 9.1 viser koblingen mellem modellerne og platformen.<br />

V a z (f -f )<br />

h v<br />

Figur 9.1: Illustration <strong>af</strong> koblingen mellem <strong>helikopter</strong>modellerne og mikro-<br />

controllerplatformen. Interfaces, der overlapper mikrocontrolleren, indehol-<br />

der både software og hardware.<br />

<br />

47


KAPITEL 9 - Overordnet design<br />

Som det fremgår <strong>af</strong> figuren vil en ændring i Va på motoren medføre en kr<strong>af</strong>t fra <strong>rotor</strong>erne, som igen<br />

vil påvirke vinklen θ på <strong>helikopter</strong>kroppen. For nøjagtigt at kunne styre kroppens vinkel skal der<br />

først og fremmest implementeres en sensor, der kan registrere denne. Herudfra foretages der en vin-<br />

kelregulering i mikrocontrolleren, som bestemmer hvorvidt motorerne skal <strong>rotor</strong>ere langsommere<br />

eller hurtigere. Dette sker ved at angive en hastighedsreference til motoren. For at sikre at motoren<br />

<strong>rotor</strong>er ved den givne hastighed, skal der implementeres en motorregulering. Dette gør en rotations-<br />

sensor til en nødvendig del <strong>af</strong> platformen.<br />

Eftersom motoren skal drives med en større strøm end mikrocontrolleren kan levere, skal der desuden<br />

designes en driver hertil. Tilsammen udgør dette et overordnet design for platformen, som systemet<br />

skal virke på.<br />

Designovervejelserne i forbindelse med de forskellige interfaces vil blive blive gennemgået i de<br />

følgende <strong>af</strong>snit og i næste kapitel vil der blive lavet en detaljeret beskrivelse <strong>af</strong> blokkene i Figur 9.1.<br />

9.1 Vinkelsensor<br />

Da det ønskes at regulere <strong>helikopter</strong>ens vinkel ved hjælp <strong>af</strong> en regulator i software, er det nødvendigt<br />

at implementere en type sensor der kan måle vinklen, og udlæse denne, som et elektronisk signal, til<br />

processoren. Der er en hel række <strong>af</strong> sensorer der kan benyttes til dette, hvor<strong>af</strong> følgende har været i<br />

betragtning til projektet:<br />

Accelerometer Denne type sensor fungerer ved at kunne måle platformens acceleration. Dvs. at<br />

sensoren hele tiden vil måle tyngdeaccelerationen. Dog har tidligere projekter om helikop-<br />

teren vist at rystelserne fra <strong>helikopter</strong>ens motorer udsætter et accelerometer for så kr<strong>af</strong>tige<br />

accelerationer, at det er meget svært at filtrere et brugbart signal ud fra støjen.<br />

Laser-<strong>af</strong>standssensor Denne type sensor benytter sig <strong>af</strong> en laser-pointer og geometri for at måle<br />

<strong>af</strong>standen til et givent objekt (i dette tilfælde gulvet). Laser-<strong>af</strong>standsmålere udmærker sig ved<br />

at være meget præcise, dog uden at kunne måle særligt lange <strong>af</strong>stande.<br />

Ultralyds-<strong>af</strong>standsmåler Denne type sensorerer benytter sig <strong>af</strong> ultralyd og refleksioner <strong>af</strong> disse<br />

til at lave en måling <strong>af</strong> <strong>af</strong>standen til et objekt. Sensorerne udmærker sig ved at kunne måle<br />

forholdsvis store <strong>af</strong>stande. dog kræves det, at der kan udbredes ultralydssignaler vinkelret mod<br />

gulvet. Da ultralydstranducere er meget retningsbestemte kræver dette en speciel konstruktion<br />

på <strong>helikopter</strong>en for at kunne sikre dette selv om <strong>helikopter</strong>en hælder til en side.<br />

Potentiometer i opstillingen Denne sensor benytter sig <strong>af</strong> <strong>af</strong>grænsningen, der er lavet i Afsnit 3,<br />

hvor det er valgt at placere <strong>helikopter</strong>en på et kardanled og derved begrænse dens bevægelser.<br />

I dette kardanled kan implementeres en lineær variabel modstand, hvorved der kan udlæses en<br />

analog spænding tilsvarende vinklen på <strong>helikopter</strong>en.<br />

Af ovenstående sensorer vælges det at benytte et potentiometer i kardanleddet. Dette gøres fordi det<br />

er den eneste sensor der kan benyttes på den aktuelle opstilling. De andre sensorer kræver enten at<br />

opstillingen bliver ændret, eller også kræver de for omfattende signalbehandling.<br />

48


9.2 Rotationssensor<br />

KAPITEL 9 - Overordnet design<br />

Rotationssensoren skal måle rotationshastigheden og sende den til mikrocontrolleren, så den kan<br />

benyttes til regulering <strong>af</strong> motorernes hastighed. På opstillingen er monteret en rotationssensor på<br />

hver <strong>rotor</strong> i form <strong>af</strong> en hall sensor og to magneter i <strong>rotor</strong>ens tandhjul. Det vælges at benytte denne<br />

rotationssensor, da den er monteret på opstillingen og har været benyttet med succes <strong>af</strong> en tidligere<br />

projektgruppe. Rotationssensoren har den fordel at den giver et godt signal/støj forhold, da den kun<br />

er følsom overfor direkte vinkelrette magnetfelter. Endvidere har denne sensor TTL udgangssignaler,<br />

som kan tilsluttes direkte til mikrocontrolleren uden nogen form for signalbehandling.<br />

9.3 Driver<br />

Med henblik på at kunne styre motorerne fra mikroprocessoren, er det nødvendigt at implementere<br />

et driverkredsløb. Dette er nødvendigt, fordi processoren ikke kan levere de meget store strømme,<br />

sådanne motorer trækker. Desuden er det nødvendigt, fordi processorens output er PWM-signaler<br />

mellem 0 og 5 V, og motoren skal drives ved omkring 15 V.<br />

Da det er valgt ikke at beskrive hardware implementationen i rapporten, er udviklingen <strong>af</strong> dette<br />

kredsløb placeret i Appendiks A.<br />

9.4 Mikrocontroller<br />

Da det, som illustreret på Figur 9.1, er valgt at implementere reguleringen <strong>af</strong> <strong>helikopter</strong>en i en mikro-<br />

processor, er det nødvendigt at foretage at valg <strong>af</strong> hvilken processor, der skal benyttes. Processoren<br />

skal være i stand til at kommunikere med alt ovennævnt udstyr, og skal desuden være i stand til at<br />

kommunikere med en PC. Dvs. at processoren skal have følgende kommunikationsinterfaces:<br />

• PWM-signalgeneratorer til kontrol <strong>af</strong> motorer.<br />

• A/D-convertere til måling <strong>af</strong> spændingen fra potentiometeret i kardanleddet.<br />

• Mulighed for benyttelse <strong>af</strong> eksterne interrupts til rotationssensorerne.<br />

• Minimum en UART til seriel kommunikation med en PC.<br />

På <strong>helikopter</strong>en var der, da projektet blev udbudt, påmonteret en mikrocontroller med alle ovenstå-<br />

ende interfaces. Denne mikrocontroller var <strong>af</strong> typen Robostix, og er bygget på en AVR ATMega128,<br />

der indeholder 8 A/D-convertere, 6 PWM-signalgeneratorer, 2 Uarts og 4 hardwaretimere. Således<br />

indeholder denne processor alle de nødvendige interfaces, og det vurderes at clockfrekvensen på<br />

16 MHz er tilstrækkeligt, da det er en RISC processor, hvor størstedelen <strong>af</strong> instruktionerne tager 1<br />

clockcycle.<br />

Af Figur 9.1 ses det, at der skal laves flere regulatorer i softwaren på mikrocontrolleren. Desuden er<br />

det også valgt at mikrocontrolleren skal kunne udskrive reguleringsvariable og sensoroutputs til en<br />

49


KAPITEL 9 - Overordnet design<br />

PC. Det vil kræve, at en funktion på processoren køres ved siden <strong>af</strong> regulatorerne. Derfor er det valgt<br />

at implementere en kerne på processoren, for derved at få mulighed for at lave multiprocessering.<br />

Til AVR proccessorfamilien er skrevet en kerne kaldet AVRX. Denne kerne er skrevet i assembler<br />

og er interfacet til C ved hjælp <strong>af</strong> en header-fil. Denne kerne gør det muligt at køre flere proces-<br />

ser samtidig, og kan skifte mellem disse ved at tage højde for prioriteter og benytte round robin.<br />

Derfor vælges det at benytte denne kerne, da den implementerer alle de nødvendige funktioner som<br />

sem<strong>af</strong>orer og timer-køer.<br />

Funktionerne i AVRX og hvordan de benyttes er beskrevet i Appendiks J.<br />

50


KAPITEL 10<br />

Blokbeskrivelse<br />

For at give et overblik over de forskellige software-blokke i platformen og deres funktion vil disse<br />

blive gennemgået hver for sig i de følgende <strong>af</strong>snit. Herudover vil de interfaces, blokkene benytter sig<br />

<strong>af</strong>, samt hvilke variable der er knyttet hertil, blive beskrevet. Hver blok implementeres i hver deres<br />

tråd på processoren og den samlede kode for systemet kan findes i Appendiks K.<br />

10.1 Motorregulator<br />

10.1.1 Funktionalitet<br />

Motorregulatoren har, som beskrevet, til formål at sikre at motorerne roterer ved den rigtige hastig-<br />

hed, givet <strong>af</strong> vinkelregulatoren. Dog skal motorregulatoren også sikre, at motorerne spinder lige så<br />

hurtigt op, som de spinder ned ved belastning fra <strong>rotor</strong>erne. Dette er nødvendigt for at overholde Krav<br />

3 i Kapitel 4, der bestemmer at det samlede løft skal være konstant, hvorfor eventuelle ændringer <strong>af</strong><br />

motorernes hastigheder skal være <strong>af</strong> samme størrelse, men modsat rettet.<br />

10.1.2 Interfaces<br />

Motorerne skal kontrolleres fra processoren ved hjælp <strong>af</strong> PWM-signaler. Disse signaler kan gene-<br />

reres ved hjælp <strong>af</strong> nogle signalgeneratorer, der er implementeret som hardware i processoren. Disse<br />

signalgeneratorer er imidlertid ikke i stand til at levere strøm nok til at styre motoren direkte, hvorfor<br />

der skal konstrueres et driverkredsløb (se designdokument i Appendiks A).<br />

Desuden skal motorregulatorerne styres fra vinkelregulatoren, hvorfor de skal læse referenceværdier<br />

51


KAPITEL 10 - Blokbeskrivelse<br />

fra denne. Ydermere skal motorregulatorerne læse output fra hastighedssensorerne for at kunne sam-<br />

menligne den aktuelle hastighed med referencen. Undersystemet skal derfor benytte sig <strong>af</strong> følgende<br />

variable:<br />

motor_ref_h Reference til højre motor.<br />

motor_ref_v Reference til venstre motor.<br />

motor_sensor_h Variabel til input fra højre hastighedssensor.<br />

motor_sensor_v Variabel til input fra venstre hastighedssensor.<br />

PWM_h Registret til styring <strong>af</strong> PWM signalgeneratoren tilknyttet højre motor.<br />

PWM_v Registret til styring <strong>af</strong> PWM signalgeneratoren tilknyttet venstre motor.<br />

10.2 Rotationsssensor<br />

10.2.1 Funktionalitet<br />

Dette undersystem har til formål at udregne, hvor hurtigt motorerne kører, således motorreguleringen<br />

altid kan tilgå data fra rotationssensorerne. Da rotationssensorerne fungerer ved at <strong>af</strong>give to pulser<br />

per omgang tandhjulet drejer rundt, er det nødvendigt at måle tiden mellem pulserne, for herefter at<br />

udregne rotationshastigheden. For at sikre at tiden måles præcist, vælges det at forbinde sensorout-<br />

puttet til mikroprocessorens interrruptben. Tidsmålingen kan dermed ikke forstyrres <strong>af</strong> andre tråde<br />

på processoren.<br />

10.2.2 Interfaces<br />

Dette undermodul skal placere den beregnede hastiged i variablerne:<br />

motor_sensor_h Variabel til input fra højre hastighedssensor.<br />

motor_sensor_v Variabel til input fra venstre hastighedssensor.<br />

10.3 Vinkelregulator<br />

10.3.1 Funktionalitet<br />

Vinkelregulatoren skal sikre at <strong>helikopter</strong>en kan indtage en forudbestemt vinkel (±1 ◦ ) og forblive<br />

stabil i denne. Samtidig skal systemet, i henhold til Krav 3 i Kapitel 4, sikre at <strong>helikopter</strong>ens <strong>rotor</strong>er<br />

skaber et konstant (±1%) vertikalt løft, der svarer til tyngdekr<strong>af</strong>ten på halvdelen <strong>af</strong> <strong>helikopter</strong>ens<br />

masse.<br />

52


KAPITEL 10 - Blokbeskrivelse<br />

I udledningen <strong>af</strong> body-modellen i Afsnit 6, er det fundet, at <strong>helikopter</strong>en i den nuværende opstilling<br />

er ustabil. Udfordringen er således først og fremmest at gøre systemet stabilt. Når dette er opnået,<br />

kan der fokuseres på at sikre en bestemt vinkel.<br />

10.3.2 Interfaces<br />

Vinkelregulatoren har behov for både at læse information fra vinkelsensoren, samtidig med at den<br />

kan regulere referenceværdierne til motorregulatorerne. Dette skal den gøre ved hjælp <strong>af</strong> følgende<br />

variable:<br />

motor_ref_h Reference til højre motorregulator.<br />

motor_ref_v Reference til venstre motorregulator.<br />

vinkelsensor_x til monitorering <strong>af</strong> vinkel θx.<br />

10.4 Vinkelsensor<br />

10.4.1 Funktionalitet<br />

Vinkelsensor-softwaren skal omsætte målinger fra den A/D-converter, der er tilsluttet potentiometret<br />

i kardanleddet. Disse vinkler skal benyttes i vinkelregulatoren, der hele tiden skal have en opdateret<br />

værdi.<br />

10.4.2 Interfaces<br />

Vinkelsensoren skal placere den beregnede vinkel i variablen vinkelsensor_x, således at den<br />

kan læses <strong>af</strong> henholdsvis vinkelregulatoren og dataoverførselsrutinen. Vinkelsensor-softwaren skal<br />

bygges op som en funktion, der kan kaldes fra vinkelregulator-softwaren.<br />

10.5 Udlæsning <strong>af</strong> data<br />

10.5.1 Funktionalitet<br />

Dette undersystem har til formål at udlæse reguleringsvariable og sensorinputs gennem seriel kom-<br />

munikation til en computer. Det skal gøres ved hjælp <strong>af</strong> de UARTS der er indbygget i processoren.<br />

Data skal sendes som ASCII-tegn således at de kan læses ved hjælp <strong>af</strong> simple terminalprogrammer<br />

på computeren.<br />

Dataene skal sendes hvert sekund, således at brugeren opnår en følelse <strong>af</strong> at få data i real-tid, samtidig<br />

med at systemet ikke bliver overbelastet ved dette.<br />

53


KAPITEL 10 - Blokbeskrivelse<br />

10.5.2 Interfaces<br />

Dette system skal kunnne læse og overføre følgende variable:<br />

vinkelsensor_x til monitorering <strong>af</strong> vinkel θx.<br />

vinkel_ref_x til flightcontrollerreferencen til vinklen θx.<br />

motor_sensor_h til monitorering <strong>af</strong> højre motors hastighed.<br />

motor_sensor_v til monitorering <strong>af</strong> venstre motors hastighed.<br />

motor_ref_h til monitorering <strong>af</strong> referenceværdien til højre motor.<br />

motor_ref_v til monitorering <strong>af</strong> referenceværdien til venstre motor.<br />

PVM_h til monitorering <strong>af</strong> output til motor 3 (højre motor).<br />

PVM_v til monitorering <strong>af</strong> output til motor 4 (venstre motor).<br />

AD_x til monitorering <strong>af</strong> input fra sensoren der måler vinklen θx.<br />

AD_y til monitorering <strong>af</strong> input fra sensoren der måler vinklen θy.<br />

54


DEL IV<br />

Blokdesign<br />

Det overordnede design <strong>af</strong> systemet er færdiggjort, og næste skridt er<br />

at designe hver blok individuelt. Funktionalitetskravene kan <strong>af</strong>ledes til<br />

tekniske krav til hver blok, og der skal designes et system, som kan op-<br />

fylde disse. Der skal foretages valg angående opbygning <strong>af</strong> blokke, og<br />

de enkelte blokke skal analyseres, så de er forberedt til implementering.


KAPITEL 11<br />

Motorregulering<br />

For at sikre en konstant opdrift fra <strong>rotor</strong>erne er det vigtigt at disse roterer ved en konstant og regu-<br />

lerbar hastighed. Der skal således designes en regulator, som muliggører dette. <strong>Regulering</strong>en virker<br />

ved at sammenligne den ønskede vinkelhastighed R(s) med motorens faktiske hastighed. En forskel<br />

mellem ønsket og faktisk hastighed vil give sig til udtryk som en fejl E(s). Controlleren D(s) bru-<br />

ger fejlen til at regulere motoren M(s), så den ønskede hastighed opnåes. følgende figur illustrerer<br />

reguleringsprincippet.<br />

1<br />

R(s)<br />

E(s) Va(s)<br />

D(s)<br />

Regulator<br />

M(s)<br />

Motor<br />

Figur 11.1: Blokdiagram for motorreguleringen<br />

1<br />

Omega_g(s)<br />

For at kunne designe reguleringen er det nødvendigt at opstille krav til det samlede systems dynamik,<br />

stabilitet og steady-state fejl. Dynamikken bestemmer blandt andet, hvor hurtigt motorsystemet skal<br />

kunne reagere på ændringer i referencen eller hvor lang indsvingstiden (settling time, ts) skal være.<br />

Disse krav vil blive defineret i det følgende <strong>af</strong>snit, hvorefter reguleringen vil blive designet.<br />

57


KAPITEL 11 - Motorregulering<br />

11.1 Fastsættelse <strong>af</strong> krav<br />

Dynamik<br />

Kr<strong>af</strong>ten er proportional med <strong>rotor</strong>hastigheden, så en forøgelse i hastigheden på én motor medfører<br />

en tilsvarende nedgang i hastighed på den modsatte motor. I designet <strong>af</strong> reguleringen skal det derfor<br />

sikres, at stigtiden er den samme som faldtiden for motor, gear og <strong>rotor</strong>systemet. For at sætte krav til<br />

dynamikken på systemet vælges det, at sætte krav til stigtiden tr.<br />

Ses der på faldtiden for motoren, <strong>af</strong>hænger den udelukkende <strong>af</strong> friktionen og inertien i systemet.<br />

Da bl.a. Coulomb friktionen og belastningen fra <strong>rotor</strong>eren er ulineære, kan disse ikke udtrykkes vha.<br />

en overføringsfunktion. Som følge her<strong>af</strong>, er der opstillet en motormodel i Simulink, der kan findes på<br />

bilags-CD’en under /matlab/MotorGearRotorRiseTime/MotorGearRotorModel.mdl.<br />

Figur 11.2 viser stig- og faldtiden for systemet fundet vha. <strong>af</strong> modellen.<br />

Amplitude<br />

1<br />

0.9<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

0.1<br />

0<br />

RiseTime=<br />

324ms<br />

FallTime=<br />

98ms<br />

0 0.2 0.4 0.6<br />

Time [s]<br />

0.8 1 1.2<br />

Figur 11.2: Simulink simulering <strong>af</strong> stig og faldtiden for motor-gearsystemet<br />

med <strong>rotor</strong>. Modellen og beregningerne kan findes i bilag under<br />

/matlab/MotorGearRotorRiseTime/<br />

Som det fremgår, så er stigtiden cirka 3,5 gange større end faldtiden for systemet. Dette betyder,<br />

at når referencen mellem motorerne ændres, vil motoren, der skal falde i hastighed, indfinde sig<br />

3,5 gange hurtigere end den modsatte motor. For at minimere forskellen, kan det enten vælges at<br />

øge faldtiden eller gøre stigtiden mindre. Da det ikke ønskes at begrænse hastigheden på motorerne,<br />

vælges det at forkorte stigtiden med en regulator.<br />

For at sikre et konstant samlet løft, skal det således gælde at tr = 98 ms. I Kapitel 7 blev det<br />

fundet, at <strong>rotor</strong>erne skal rotere med 147 rad/s, for at holde <strong>helikopter</strong>en i hover. Antages det, at<br />

<strong>rotor</strong>hastigheden ikke falder under 130 rad/s under reguleringen i hover, kan den mindste periodetid<br />

Ts,min, hvormed målingerne foretages, udregnes til:<br />

58


Ts,min =<br />

2π<br />

2ωr,min<br />

=<br />

KAPITEL 11 - Motorregulering<br />

π<br />

= 24, 2 ms (11.1)<br />

130 rad/s<br />

For at kunne regulere motoren skal der, som tommelfingerregel, foretages seks hastighedsmålinger<br />

i løbet <strong>af</strong> stigtiden [Franklin et al., 2006, s.192]. Da der kun samples hvert 24. milisekund, skal<br />

stigtiden dermed som minimum være seks gange større. Dette giver en stigtid på:<br />

tr = 6 · Ts,min = 6 · 24, 2 ms ≥ 145, 2 ms (11.2)<br />

Stigtiden på 98 ms kan således ikke overholdes, hvis controlleren skal nå at regulere på stigende<br />

flanker. For at sikre en præcis regulering, vælges det derfor at ændre kravet til en stigtid på minimum<br />

145,2 ms.<br />

Stabilitet<br />

Som stabilitetskritium for reguleringen vælges det at se på oversvinget Mp i tidsdomænet. Oversvin-<br />

get beskriver, hvor meget det regulerede system må svinge over referenceværdien, idet denne ændres<br />

til en ny værdi. Ideelt set ønskes der intet oversving, men det vælges at tillade et oversving på højst<br />

1%.<br />

System type<br />

For at kunne kontrollere attituden <strong>af</strong> <strong>helikopter</strong>en præcist er det vigtigt, at <strong>rotor</strong>ernes hastighed passer<br />

med referencen. Forstyrrelser udefra skal dermed undertrykkes, således steady-state fejlen ess = 0.<br />

Desuden vil referencen ændre sig i step. Systemet er dermed et type 1 [Franklin et al., 2006, s.178<br />

tab.4.1], hvilket medfører, at der skal implementeres en PI-regulator.<br />

Figur 11.3 sammenfatter kravene til regulatoren.<br />

59


KAPITEL 11 - Motorregulering<br />

Amplitude<br />

1.2<br />

1<br />

0.9<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

0.1<br />

Oversving M p < 1 %<br />

Stigtid t r > 145,4 ms<br />

Steady−state error e ss = 0<br />

0<br />

0 0.1 0.2 0.3 0.4 0.5<br />

Time [s]<br />

0.6 0.7 0.8 0.9 1<br />

Figur 11.3: Skitse <strong>af</strong> de samlede krav.<br />

11.2 Design <strong>af</strong> motorregulering<br />

Med udgangspunkt i de fundne krav skal der designes en PI-regulering til motorerne. Den samlede<br />

kontrolløkke er illustreret i Figur 11.4. PI er en forkortelse for Proportionel plus Integrator, hvorfor<br />

der er to blokke i reguleringen på Figur 11.4.<br />

1<br />

R(s)<br />

E(s)<br />

PI−regulator D(s)<br />

ki<br />

D(s)_P<br />

ki<br />

Ti.s<br />

D(s)_I<br />

Va(s)<br />

A<br />

tau_m.s+1<br />

M(s)<br />

Figur 11.4: Blokdiagram for motorreguleringen<br />

Som det ses <strong>af</strong> Figur 11.4, kan overføringsfunktionen for regulatoren udtrykkes som:<br />

<br />

D(s) = ki 1 + 1<br />

<br />

Tis<br />

Hvor:<br />

ki er integratorforstærkningen<br />

Ti er reset tiden<br />

1<br />

omega_g(s)<br />

(11.3)<br />

For at kunne finde parametrene til regulatoren er det nødvendigt at tage udgangspunkt i lukket-sløjfe<br />

60


forstærkningen for kontrolløkken i Figur 11.4, hvilke er givet ved følgende udtryk:<br />

ωg(s)<br />

R(s) =<br />

Tiτ<br />

kiA s2 +<br />

Tis + 1<br />

<br />

1<br />

kiA + 1 Tis + 1<br />

KAPITEL 11 - Motorregulering<br />

(11.4)<br />

Som det fremgår er den lukkede kontrolløkke et 2. ordens system med et nulpunkt, hvor bl.a. PI-<br />

parametrene indgår som koefficienter i nævnerpolynomiet. Ifølge Franklin, kan systemet beskrives<br />

på følgende standardiserede form:<br />

Hvor:<br />

ζ er dæmpningskoefficienten<br />

ωn er egenfrekvensen<br />

H(s) =<br />

α er den normaliserede nulpunktslokation<br />

(s/αζωn) + 1<br />

(s/ωn) 2 + 2ζ(s/ωn) + 1<br />

(11.5)<br />

[Franklin et al., 2006, s.122 lign.3.59]<br />

For at få udtrykt kravene i forhold til koefficienterne i reguleringen, skal nævnerkoefficienterne i<br />

kontrolløkken, givet i Formel 11.4, være lig med dem for den standardiserede overføringsfunktion.<br />

For at dette er tilfældet, må integrationsforstærkningen ki og reset tiden Ti være givet ved følgende<br />

udtryk:<br />

ki = 2ζωnτm − 1<br />

A<br />

Ti = kiA<br />

ω 2 nτm<br />

(11.6)<br />

(11.7)<br />

For at bestemme reguleringsparametrene mangles det at finde dæmpingskoefficienten ζ og egenfre-<br />

kvensen ωn. Ifølge Franklin kan egenfrekvensen udtrykkes ved følgende formel:<br />

ωn ∼ 1, 8<br />

=<br />

tr<br />

(11.8)<br />

[Franklin et al., 2006, s.116 lign.3.49]<br />

Udtrykket er kun præcist for 2. ordens systemer uden nulpunkter. Brugt i systemer med nulpunkter<br />

er Formel 11.8 kun en grov approksimation [Franklin et al., 2006, s.116]. På trods her<strong>af</strong> vælges det<br />

at bruge formlen som udgangspunkt for designet. Det holdes derfor in mente, at det endelige design<br />

muligvis <strong>af</strong>viger fra de fastsatte krav. Effekten her<strong>af</strong> vil blive klarlagt under verificeringen, der findes<br />

sidst i <strong>af</strong>snittet. Med en stigtid på 145, 2 ms bliver egenfrekvensen således:<br />

61


KAPITEL 11 - Motorregulering<br />

ωn =<br />

1, 8<br />

= 12, 4 rad/s (11.9)<br />

145, 2 ms<br />

Vha. Formel 11.10 kan dæmpningskoefficienten findes ud fra oversvinget, hvilket er udregnet i For-<br />

mel 11.11. Ligesom med egenfrekvensen er udtrykket for dæmpingskoefficienten kun en approksi-<br />

mation for 2. ordens systemer uden nulpunkter. Ligger nulpunktet tæt på polerne i overføringsfunk-<br />

tionen for kontrolløkken (α < 3), vil oversvinget øges drastisk [Franklin et al., 2006, s.122].<br />

-ln (Mp)<br />

ζ = <br />

π2 − ln (Mp) 2<br />

hvor 0 < Mp < 1 (11.10)<br />

[Franklin et al., 2006, s.117 lign.3.51]<br />

ζ = <br />

-ln (0, 01)<br />

π2 − ln (0, 01) 2<br />

= 0, 83 (11.11)<br />

Da det umiddelbart er svært at vurdere nulpunktets indflydelse, vælges det i stedet at modvirke<br />

nulpunktets indflydelse ved, på forhånd, at øge dæmpningskoefficienten til 0,93.<br />

Vha. Formel 11.6 og Formel 11.7 kan parametrene til regulatoren findes. Udregningerne kan findes<br />

på bilags-CD’en under /matlab/MotorModel/regulator.m. Overføringsfunktionen bliver<br />

således:<br />

<br />

<br />

1<br />

D(s) = 0, 1596 1 +<br />

0, 1234s<br />

= 0, 01969s + 0, 1596<br />

0, 1234s<br />

Den samlede overføringsfunktion for kontrolløkken kan dermed findes til:<br />

ωg(s)<br />

R(s)<br />

= 18, 9614s(s + 8, 105)(s + 5, 487)<br />

s(s + 5, 487)(s 2 + 24, 45s + 153, 7))<br />

(11.12)<br />

(11.13)<br />

(11.14)<br />

Det ses, at to <strong>af</strong> polerne er blevet plomberet. Disse har derfor ingen indflydelse på systemets respons,<br />

hvorfor der kan ses bort herfra. Overføringsfunktionen kan således reduceres til:<br />

ωg(s)<br />

R(s)<br />

= 18, 9614(s + 8, 105)<br />

(s 2 + 24, 45s + 153, 7))<br />

(11.15)<br />

Vha. MATLAB funktionen stepinfo kan stigtiden for kontrolløkken bestemmes til 72 ms, hvilket<br />

er 51% mindre end kravet på 145,2 ms. Ligeledes kan oversvinget findes til 6,5%, hvilket <strong>af</strong>viger<br />

en del fra designkravet på 1%. Det første design overholder dermed ikke de stillede krav. For at få<br />

62


KAPITEL 11 - Motorregulering<br />

designet til at passe, lægges de 51% til stigtidskravet således tr = 219 ms, og designprocessen gen-<br />

tages. Dette giver en stigtid på 159 ms, hvilket er 9% over kravet. Da det er tættere på og over kravet<br />

anses stigtiden som passende. Oversvinget findes til 2,23%, hvilket er blevet bedre, men som stadig<br />

<strong>af</strong>viger fra kravet. Da 2,23% stadig kan anses som et lille oversving, vælges det ikke at ændre yderli-<br />

gere på designet <strong>af</strong> motorreguleringen. Med ændringen i stigtiden, fås følgende overføringsfunktion<br />

for regulatoren:<br />

D(s) =<br />

<br />

<br />

1<br />

0, 0818 1 +<br />

0, 1442s<br />

D(s) =<br />

0, 0118s + 0, 08181<br />

0, 1442s<br />

(11.16)<br />

(11.17)<br />

Ovenstående udtryk er nu blevet udledt, og det er bestemt at det kan regulere motorerne efter de<br />

ønskede krav.<br />

63


KAPITEL 12<br />

Rotationssensor<br />

Da propellernes rotationshastighed skal reguleres i forhold til en ønsket omdregningshastighed, er det<br />

nødvendigt at tilbagekoble denne hastighed til regulatoren. Til dette kan flere typer sensorer bruges.<br />

På platformen, der er til rådighed, er der implementeret Hall-sensorer. Disse er lokaliseret under<br />

<strong>rotor</strong>ernes tandhjul, og to permanent magneter er indlejret i hvert tandhjul. Denne type sensor er<br />

meget resistant overfor udefrakommende påvirkninger. Disse påvirkninger kunne f.eks. være direkte<br />

eller indstrålet lys, støv og lign, som ville påvirke en IR-sensor. Desuden bliver Hall-sensoren ikke<br />

påvirket <strong>af</strong> magnetfelter, som ikke er vinkelrette på sensoren.<br />

Hall-sensoren er <strong>af</strong> typen TLE4905L. Databladet findes på bilags-CD’en i stien<br />

/CD/Datablade/TLE4905L.pdf Denne sensor er ifølge producenten typisk brugt som bl.a.<br />

rotationssensor, hvilket gør den ideel til dette formål. Desuden fungerer denne som en digital kom-<br />

ponent, og behøver derved ikke konvertering til digitale niveauer. Kombineres dette med dens lave<br />

følsomhed overfor forstyrrelser giver dette et højt signal til støj forhold. Herudover er denne type<br />

sensor meget lille og let, hvilket er ønskeligt for at minimere <strong>helikopter</strong>ens samlede vægt. Sidst<br />

nævnes det, at denne sensor har et lavt effektforbrug på maksimalt 8 mA.<br />

12.1 Behandling <strong>af</strong> sensorsignal<br />

Hall-sensoren TLE4905L giver et konstant output på 0 V, når en magnet er placeret indenfor dennes<br />

rækkevidde. Når magneten er uden for sensorens rækkevidde, giver den et konstant signal på 5 V.<br />

Dette giver grundlag for mindst tre databehandlingsmetoder for at udlede <strong>rotor</strong>ens hastighed.<br />

64


12.1.1 Antal pulser per sample<br />

KAPITEL 12 - Rotationssensor<br />

Pulserne fra Hall-sensoren bliver talt over en fast tid. Hvis hver puls repræsenterer én omgang, så<br />

kan udtrykket for rotationshastigheden opstilles som:<br />

ωr = npulser · π<br />

Ts<br />

(12.1)<br />

Denne metode er nyttig, hvis antallet <strong>af</strong> pulser er relativt højt i samplingsperioden Ts. Metoden har<br />

en fast samplingsfrekvens på 1 . Endvidere vil denne metode give nul, hvis ingen pulser forekommer<br />

Ts<br />

i en samplingsperiode. Desuden kan resultatet svinge, hvis samplingsperioden ikke er et multiplum<br />

<strong>af</strong> perioden fra puls til puls. Dette ses på følgende figur:<br />

5 V<br />

Hall s ens or<br />

0 V<br />

30 r / s<br />

Hastighed<br />

0 r / s<br />

T s = 0.1 s<br />

Figur 12.1: Eksempel på udledning <strong>af</strong> <strong>rotor</strong>hastighed ved antal pulser inden<br />

for periodetiden Ts.<br />

12.1.2 Periode fra puls til puls<br />

Periodetiden fra forreste flanke på en puls til forreste flanke på den næste måles. Denne måling vil<br />

give tiden for en fuld rotation <strong>af</strong> <strong>rotor</strong>bladet. Herfor kan et udtryk for rotationshastigheden opstilles<br />

som:<br />

ωr = π<br />

∆T<br />

T id [s]<br />

(12.2)<br />

Som det ses på Figur 12.2 bliver hastighedsmålingen opdateret oftere og svinger ikke ved konstant<br />

hastighed. Denne metode har dog ikke en fast samplingsfrekvens og hvis <strong>rotor</strong>en stopper, kan dette<br />

ikke detekteres, med mindre en øvre grænse for ∆T fastsættes. Derfor bliver detektionen <strong>af</strong> et stop<br />

forsinket med den øvre grænse for ∆T i forhold til den egentlige tid for stoppet.<br />

65


KAPITEL 12 - Rotationssensor<br />

ˆΩr [ rounds/ s] ≈<br />

1 [ round]<br />

∆ T [ s]<br />

(G.2)<br />

As can be seen on Figur e G.3 , the velocity measur ement is updated more frequently,<br />

and does not oscillate. In contrast, this method does not have a xed update fre-<br />

quency, and if the <strong>rotor</strong> stops, this can not be detected unless an upper limit for ∆ T<br />

is dened. If this upper limit would be reached, the detection of a stop could be<br />

wastely delayed compar ed to the actual time of the stop.<br />

5 V<br />

Hall s ens or<br />

0 V<br />

30 r / s<br />

Hastighed<br />

0 r / s<br />

∆T<br />

F I G U R E G .3: An exampleofderiving the<strong>rotor</strong>velocityby measuringthetime<br />

Figur 12.2: ∆ Eksempel T frompulseto på udledning pulse. <strong>af</strong> <strong>rotor</strong>hastighed ved at måle tiden ∆T<br />

fra puls til puls.<br />

Another problem with this method, is the reliability of the result at changing ve-<br />

Af locities. de to ovenstående The extent implementationsmåder of this problem vælges depends det at onbenytte how puls rapidly til puls the metoden, velocity hvorchanges tiden<br />

mellem compar toed pulsers to the flanker update målesfrequency, og benyttes til see beregning Figur e<strong>af</strong> G.5 hastigheden on the next på <strong>rotor</strong>en, page. da den giver det<br />

bedste resultat for hastigheder over nul <strong>af</strong> de to muligheder.<br />

Pulse length: Since the Hall effect sensor gives a low signal as long as the magnet is<br />

in range, it is also an option to measur e the length of the pulse. The method is<br />

illustrated in Figur e G.4 on the following page and is similar to measuring the time<br />

from pulse to pulse, except that only one pulse is necessary. Investigating the Hall<br />

sensor signal showed, that the signal is 0 V about 1/ 20 th of the time. The estimated<br />

<strong>rotor</strong> velocity will then be:<br />

Ωr [ rounds/ s] ≈ 1/ 20 [ round]<br />

∆ t [ s]<br />

T id [s]<br />

(G.3)<br />

Compar ed to measuring from pulse to pulse, the pulse length gives a more accurate<br />

result, because acceleration will have less impact on the result, see Figur e G.5 on the<br />

next page. But the pulse length method has the same problem regarding a stop of<br />

the <strong>rotor</strong>, since it takes a very long pulse to determine a velocity near zero.<br />

Another disadvantage of this method is its implementation. It will requir e a rel-<br />

atively high sample rate of the signal to precisely detect the pulse length, which<br />

would be as short as 1.57 ms at a velocity of 200 rad/ s.<br />

Gr oup 831 173<br />

66


KAPITEL 13<br />

Vinkelregulator<br />

Som beskrevet i Afsnit 6.3 omlring body modellen er <strong>helikopter</strong>platformen et ustabilt system, hvilket<br />

bevirker, at der ikke vil kunne opretholdes en konstant vinkel ved blot at sikre, at de to <strong>rotor</strong>er kører<br />

lige hurtigt. Da forstyrelser som vind, og ændring i omgivelser ville kunne ændre <strong>helikopter</strong>ens<br />

hældning, hvorefter den ikke vil have mulighed for at rette op igen. Derfor skal der designes et<br />

system til at gøre <strong>helikopter</strong>en stabil, hvilket gøres ved hjælp <strong>af</strong> tilbagekobling.<br />

13.1 <strong>Regulering</strong>sprincip<br />

I det følgende <strong>af</strong>snit beskrives det, hvordan de tre opstillede modeller sammenkobles til én samlet<br />

model for <strong>helikopter</strong>ens vinkel. Ydermere beskrives, hvordan en regulator kobles til den samle-<br />

de model. Motormodellen M(s) beskiver vinkelhastigheden, iforhold til et givent spændingsinput.<br />

Denne vinkelhastighed bruges direkte som input til <strong>rotor</strong>modellen R(s) ved at gange de to over-<br />

føringsfunktioner sammen. Rotormodellen beskriver løftet som funktion <strong>af</strong> vinkelhastigheden, men<br />

den opstillede bodymodel B(s) beskriver vinklen θx som funktion <strong>af</strong> differensen mellem kræfterne<br />

fra to <strong>rotor</strong>er. Derfor kan de to overføringsfunktioner ikke blot ganges sammen, og istedet opstilles<br />

et blokdiagram, der beskriver deres sammenkobling, hvilket ses på følgende figur:<br />

67


KAPITEL 13 - Vinkelregulator<br />

V<br />

a,h<br />

M (s)<br />

h<br />

Va,v<br />

M (s)<br />

v<br />

R (s)<br />

h<br />

R (s)<br />

v<br />

+ −<br />

B(s) θ out<br />

Figur 13.1: Blokdiagram over sammenkobling <strong>af</strong> modellerne, hvor B(s) er<br />

bodymodel, M(s) motormodel og R(s) <strong>rotor</strong>model.<br />

Det ses <strong>af</strong> Figur 13.1, at der skal designes en regulator, som giver to outputs i form <strong>af</strong> spændingsre-<br />

ferencerne Va,v og Va,h. Det vælges, at implementere regulatoren som vist på Figur 13.2, hvor ωref<br />

angiver middelhastigheden for de to <strong>rotor</strong>er. Denne implementering vælges, da systemet jævnfør<br />

krav 3 i funktionelle krav 2 skal holde det samlede løft Fz(t) konstant. På baggrund <strong>af</strong> den i Afsnit<br />

6.3.1 opstillede model for Fz(s) og <strong>rotor</strong>modellen kan hastighedsreferencen ωref bestemmes for det<br />

ønskede løft.<br />

θ ref<br />

+ −<br />

θ e<br />

D(s)<br />

+ +<br />

−<br />

+<br />

M (s)<br />

h<br />

ωref<br />

M (s)<br />

v<br />

R (s)<br />

h<br />

R (s)<br />

v<br />

Figur 13.2: Blokdiagram over vinkelreguleringen.<br />

+<br />

− B(s) θx<br />

Ud fra blokdiagrammet på Figur 13.2 opskrives åbensløjfe overføringsfunktionen for systemet:<br />

θx(S)<br />

θe(s) = [(D(s) + ωref ) · Mh(s) · Rh(s) − (ωref − D(s) ) · Mv(s) · Rv(s)] · B(s) (13.1)<br />

Hvis det antages, at de to motorers og <strong>rotor</strong>ers sammenkoblinger har den samme respons dvs.<br />

Mh(s) = Mv(s) = M(s) og Rh(s) = Rv(s) = R(s) går ωref ud i Formel 13.1, og denne<br />

kan reduceres til:<br />

θx(s)<br />

= 2 · D(s) · M(s) · R(s) · B(s) (13.2)<br />

θe(s)<br />

Regulatoren skal designes på baggrund <strong>af</strong> Formel 13.2, så <strong>helikopter</strong>en får den ønskede respons.<br />

68


13.2 Regulatordesign<br />

KAPITEL 13 - Vinkelregulator<br />

Ved at indsætte modellernes overføringsfunktioner i Formel 13.2, fås følgende åbensløjfe overfø-<br />

ringsfunktion skrevet op på pol-nulpunktsform:<br />

θx(s)<br />

θe(s)<br />

3, 6919 · (s + 6, 939)<br />

= D(s)<br />

(s − 3, 676)(s + 3, 92)(s2 = D(s) · G(s) (13.3)<br />

+ 12, 23s + 67, 59)<br />

Det ses <strong>af</strong> Formel 13.3, at åbensløjfe overføringsfunktionen indeholder en pol i s = 3, 676, der giver<br />

ustablitet. Lukketsløjfe stabiliteten undersøges i det følgende vha. root locus (se Appendiks B), hvor<br />

det antages, at D(s) = Kp. Figur 13.3 viser pol-nulpunktsplaceringen i s-planet. For at undersøge<br />

om p1 bevæger sig ind i venstre halvplan, når Kp øges, beskrives det hvordan root locus kommer til<br />

at se ud jævnfør reglerne beskrevet i Appendiks B.<br />

Im<br />

4<br />

3<br />

2<br />

1<br />

0<br />

−1<br />

−2<br />

−3<br />

p 3<br />

p 4<br />

n 1<br />

p 2<br />

Pol nulpunkts placering<br />

−4<br />

−8 −6 −4 −2<br />

Re<br />

0 2 4<br />

Figur 13.3: Pol nulpunktplacering <strong>af</strong> åbensløjfe overføringsfunktionen i s-<br />

planet<br />

Regel 1 Én <strong>af</strong> de fire poler vil ende i nulpunktet n1 og de andre vil gå mod uendelig.<br />

Regel 2 Polen p1 vil bevæge sig til venstre, og p2 vil bevæge sig mod højre, begge langs den relle-<br />

akse. De vil de mødes i et punkt s12(bestemmes senere) og splittes. Polerne p3 eller p4 vil<br />

ende i nulpunktet og den anden vil gå mod −∞ .<br />

Regel 3 Fra punktet s = α1 vil der være 3 asymptoter med vinklerne φ1 , φ2 og φ3.<br />

α1 =<br />

φl = 180◦ + 360 ◦ (1 − l)<br />

n − m<br />

φ1 = 180◦<br />

3 = 60◦ φ2 = 180◦ + 360◦ = 180<br />

3<br />

◦<br />

φ3 = j 180◦ + 720◦ = −60<br />

3<br />

◦<br />

pi − zi<br />

n − m<br />

p 1<br />

l = 1, .., n − m (13.4)<br />

(13.5)<br />

(13.6)<br />

3.676 − 3, 92 − 12, 23 − (−6.393)<br />

= = −2, 027 (13.7)<br />

3<br />

69


KAPITEL 13 - Vinkelregulator<br />

Da et root locus plot altid vil være symmetrisk om den relle-akse, kan det konkluderes at φ1<br />

og φ3 må tilhøre p1 og p2. Polerne vil altså splittes i punktet s12, og derfra gå mod uendelig<br />

med en vinkel på henholdsvis 60 ◦ og −60 ◦ målt fra punktet α1<br />

Regel 6 Ved at løse Formel B.9 findes de steder i s-planen, hvor der optræder to eller flere poler (er<br />

løst i MATLAB).<br />

<br />

b(s) · da<br />

<br />

<br />

db<br />

0.7187<br />

− a(s) · = 0 s =<br />

ds ds<br />

−7.361<br />

(13.8)<br />

De to komplekse poler mødes i punktet s34 = −7.361. Derfra splittes de, og den ene pol ender<br />

i nulpunktet n1, og den anden går mod −∞. Polerne p1 og p2 mødes i punktet s12 = 0.7187<br />

og splittes, hvorefter de vil gå mod asymptoterne beskrevet under regel 3. Polen p1 bevæger<br />

sig således ikke ind i venstre halvplan. Figur 13.4 viser root locus-plottet.<br />

Im<br />

10<br />

5<br />

0<br />

−5<br />

s 34<br />

Root locus<br />

Root Locus<br />

−10<br />

−10 −8 −6 −4 −2 0 2 4<br />

Re<br />

Figur 13.4: Root locus plot for systemet med proportional regulator. Det ses<br />

at systemet ikke kan stabiliseres med denne regulator typpe.<br />

Ud fra det ovenstående kan det konkluderes, at det ikke er muligt at stabilisere systemet med en<br />

proportional regulator. Det ses ved at alle poler på intet tidspunkt vil befinde sig i venstre halv-plan.<br />

Det vælges herfor at indlægge et nulpunkt n2 i venstre halv-plan til højre for p2, herved vil p2 jf. regel<br />

2 i stedet bevæge sig mod n1, og p1 vil uhindret kunne bevæge sig ind i venstre halv-plan til den<br />

møder det indlagte nulpunkt n2. De øvrige ændringer <strong>af</strong> root locus-plottet beskrives i det følgende:<br />

Regel 1 Ved indlæggelse <strong>af</strong> et ekstra nulpunkt fjernes én <strong>af</strong> asymptoterne.<br />

Regel 2 Da p1 og p2 vil ende i nulpunkterne må p3 og p4 gå mod ±∞j og gå mod asymptoterne<br />

beskrevet under regel 3.<br />

Regel 3 Asymptoternes vinkel ændres til ±90 ◦ og asymptoternes udgangspunktet α2 forskydes:<br />

70<br />

α2 =<br />

pi − zi<br />

n − m<br />

−6, 081 − n2<br />

=<br />

2<br />

Formel 13.9 beskriver sammenhængen mellem placeringen <strong>af</strong> nulpunktet og punktet α2.<br />

s 12<br />

(13.9)


KAPITEL 13 - Vinkelregulator<br />

Da det imaginære pol-par er det eneste, der kan give uønskede svingninger i stepresponset, skal deres<br />

imaginære del minimeres. Da de jævnfør regel 3 vil gå mod ±∞j for store værdier <strong>af</strong> Kp kan dette<br />

blive et problem, hvorved placeringen <strong>af</strong> nulpunktet bliver meget vigtig for systemets respons. Ved<br />

at placere n2 tæt på p2 trækkes den ustabile pol hurtigere over i venstre halv-plan, så der kan vælges<br />

mindre værdier <strong>af</strong> Kp for at gøre systemet stabilt. Det vælges således at placere n2 i s = −3, 8.<br />

Im<br />

15<br />

10<br />

5<br />

0<br />

−5<br />

−10<br />

n2<br />

α 2<br />

Root locus<br />

−15<br />

−8 −6 −4 −2<br />

Re<br />

0 2 4<br />

Figur 13.5: Root locus plot for systemet, hvor nulpunktet n2 er tilføjet. Linien<br />

α2 angiver asymptoten for p3 og p4.<br />

I følge Afsnit 11.1 har motorerne en rise-time tr,motor på 145, 2 ms. Det vælges, at vinkelregulerin-<br />

gen skal have en rise-time tr,vinkel, der er 10 gange større. Den præcise placering <strong>af</strong> polen svarende<br />

til tr,vinkel = 1, 46 er fundet vha. MATLAB til s = −1.6. For at opnå denne placering <strong>af</strong> polen<br />

skal værdien <strong>af</strong> Kp for denne pol placering bestemmes. Dette gøres vha. MATLAB’s indbyggede<br />

funktion rlocus til Kp = 48, 7. Herved får regulatoren følgende overføringsfunktion:<br />

<br />

D(s) = Kp · 1 + 1<br />

<br />

s = 48, 7 · (1 + 0, 26 · s) = 12, 7 · s + 48.7 (13.10)<br />

n2<br />

Stepresponsen for systemet med den designede regulator er vist på Figur 13.6. Det ses <strong>af</strong> figuren, at<br />

systemet har en steady-state fejl, hvilket skyldes at systemet er et type 0 system.<br />

Vinkel [rad]<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

0 0.5 1 1.5 2 2.5<br />

Tid [s]<br />

3 3.5 4 4.5 5<br />

(sec)<br />

Steprespons<br />

Figur 13.6: Stepresponset for systemet med regulator, hvilket giver en rise-<br />

time op ca. 1,5 s.<br />

71


KAPITEL 13 - Vinkelregulator<br />

13.3 Delverifikation<br />

Den designede regulator blev <strong>af</strong>prøvet i laboraitoriet, hvor det viste sig, at regulatoren var i stand til<br />

at stabilisere opstillingen. Men da der var støjproblemer på vinkelsensoren, havde <strong>helikopter</strong>en svært<br />

ved at opretholde sin position i længere tid <strong>af</strong> gangen. Det blev derfor valgt, at mindske stigtiden, så<br />

<strong>helikopter</strong>en hurtigere fandt på plads igen. Dette blev gjort ved, at hæve Kp. Det viste sig i praksis<br />

at en værdi på Kp = 56 var et godt kompromis mellem overshoot og rise-time, herfor vælges det at<br />

arbejde videre med denne værdi.<br />

Jævnfør krav 1 i funktionelle krav 1 skal systemet kunne stå i en fastsat vinkel ±1 ◦ , hvilket ikke<br />

er muligt med den designede regulator pga. steady-state fejlen. En mulig løsning på dette problem<br />

er at gange input referencen med det reciprokke <strong>af</strong> DC-forstærkningen, men da DC-forstærkningen<br />

<strong>af</strong>hænger <strong>af</strong> fysiske parametre for systemet vælges, en anden løsning.<br />

13.4 Ændring <strong>af</strong> systemtype<br />

Da den designede regulator har vist sig at kunne stabilisere systemet, beholdes denne, men for at<br />

fjerne steady-state fejlen vælges det at ændre systemtypen fra 0 til 1. Dette gøres ved at tilføje endnu<br />

en regulator, blokdiagrammet for reguleringen kommer herved til at se ud som vist på Figur 13.7.<br />

θ<br />

ref<br />

+ −<br />

θe1 θe2 D (s) +<br />

−<br />

2M(s) R(s) B(s)<br />

θx 2<br />

D 1(s)<br />

Figur 13.7: Tilbagekoblings blokdiagram med ekstra regulator<br />

For et system med enheds-tilbagekobling vil systemtypen være givet ved antallet <strong>af</strong> poler i nul i<br />

åbensløjfe overføringsfunktionen [Franklin et al., 2006, s. 178]. Der skal således indlægges en pol<br />

i nul i D2(s) for at opnå den ønskede systemtype. Det viser sig, at stepresponsen giver et stort<br />

overshoot, hvis D2(s) = 1<br />

s , herfor benyttes root locus igen til at undersøge polvandringen, da det<br />

store overshoot må betyde, at et pol-par har bevæget sig ud <strong>af</strong> den imaginære akse. Root locus plottet<br />

for D2(s) = Kp2 1<br />

s hvor Kp2 varieres fra nul til uendelig er vist på følgende Figur 13.8:<br />

Det ses <strong>af</strong> Figur 13.5, at den indlagte pol p5 og p1 mødes ved ca. s = −1, 3 og splittes derfra.<br />

Der skal vælges en værdi for Kp2 der giver et acceptabelt overshoot. Da systemet har tendens til at<br />

svinge sættes det maksimale overshoot til 1%. Dette krav kan omregnes til en dæmpningsfaktor ud<br />

fra Formel 13.11 [Franklin et al., 2006, s. 117], hvor der antages et andensordens system:<br />

72<br />

Mp = e −πζ/√ 1−ζ 2<br />

⇒ ζ =<br />

−ln(Mp)<br />

<br />

ln(Mp) 2 −ln(0.01)<br />

= = 0, 82 (13.11)<br />

+ π2 ln(0.01) 2 + π2


Im<br />

6<br />

4<br />

2<br />

0<br />

-2<br />

-4<br />

-6<br />

n 1<br />

KAPITEL 13 - Vinkelregulator<br />

Root locus<br />

-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1<br />

Re<br />

Figur 13.8: Root locus plot med indlagt pol i nul. θp angiver minimums vink-<br />

len for den ønskede dæmpningsfaktor.<br />

Kravet til 1% overshoot kan ud fra dæmpningsfaktoren omregnes til vinkelen θp i s-planen polerne<br />

som minimum skal overholde:<br />

θp = sin −1 (ζ) = sin −1 (0, 82) = 55, 7 ◦<br />

p 2<br />

p 3<br />

p 4<br />

n 2<br />

p 1<br />

p<br />

p 5<br />

(13.12)<br />

Af Figur 13.8 ses det, at p5 og p1 i starten næsten har en konstant real-del. Hvis det antages at<br />

Re(p5) = Re(p1) = 1, 3 kan Im(p5) og Im(p1) udregnes ud fra kravet til vinklen:<br />

Re(p1)<br />

Im(p1) > tan(55, 7◦ ) ⇔ Im(p1) < Re(p1)<br />

tan(55, 7 ◦ )<br />

⇒ Im(p1) < 1, 05 (13.13)<br />

Vha. MATLAB findes de værdier <strong>af</strong> Kp2, som opfylder kravet ovenfor til 0 < Kp2 < 0, 3. For at<br />

opnå den hurtigste lukketsløjfe respons vælges Kp2 = 0, 3. Overføringsfunktionen for regulatoren<br />

bliver dermed D2(s) = 0,3<br />

s . Stepresponset for systemet er vist på Figur 13.9.<br />

Vinkel [rad]<br />

1.2<br />

1<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

Step Respons<br />

Steprespons<br />

0<br />

0 1 2 3<br />

Tid [s] (sec)<br />

4 5 6<br />

Figur 13.9: Steprespons for det endelige system<br />

Der er blevet udarbejdet en vinkelregulator til <strong>helikopter</strong>-opstillingen, der opfylder det opstillede<br />

krav om at <strong>helikopter</strong>en skal kunne holde en given vinkel ±1 ◦ .<br />

73


KAPITEL 14<br />

Vinkelsensor<br />

Som beskrevet i Afsnit 9.1 er det valgt at implementere et liniært potentiometer i kardanleddet for på<br />

den vis at få en analog spænding svarende til vinklen på <strong>helikopter</strong>en. Denne analoge spænding skal<br />

måles <strong>af</strong> mikrocontrolleren ved hjælp <strong>af</strong> en <strong>af</strong> dennes A/D-convertere, og skal dernæst omregnes til<br />

en vinkel i radianer til benyttelse i vinkelregulatoren.<br />

Potentiometeret er opkoblet, således at det fordeler 5 V over hele måleområdet, hvorfor der kan<br />

beregnes en omregningskonstant mellem spænding og vinkel ved følgende formel:<br />

Hvor<br />

k = V+45 − V−45<br />

90◦ · π<br />

180◦ (14.1)<br />

V+45 er spændingen fra potentiometret, når <strong>helikopter</strong>en er placeret i en vinkel på +45 ◦ [V]<br />

V−45 er spændingen fra potentiometret, når <strong>helikopter</strong>en er placeret i en vinkel på −45 ◦ [V]<br />

Det er desuden også nødvendigt at måle spændingen fra potentiometeret når <strong>helikopter</strong>en er placeret<br />

fuldstændig vandret, da dette skal benyttes til følgende formel for konvertering fra spændingsoutput-<br />

tet fra sensoren til en vinkel i radianer:<br />

vrad = Vx − V0<br />

k<br />

vrad er vinklen ved en given spænding Vx [rad]<br />

(14.2)<br />

Tilbage er derfor kun at implementere ovenstående formel i processorens kode. Dette vil ikke blive<br />

yderligere beskrevet. Dog skal det nævnes, at der er implementeret en midling over 50 målinger fra<br />

A/D-converteren, da det erfares, at der er støj på signalet fra sensoren.<br />

74


DEL V<br />

Implementering<br />

De enkelte blokke skal implementeres på baggrund <strong>af</strong> blokdesignet. Da<br />

det er valgt at implementere det meste <strong>af</strong> funktionaliteten på microcon-<br />

trolleren, skal de fundne overføringsfunktioner for regulatorerne diskre-<br />

tiseres.


KAPITEL 15<br />

Motorregulering<br />

En motorregulering er designet og er givet ved den kontinuerte overføringsfunktion i Formel 15.1.<br />

D(s) =<br />

0, 009735s + 0, 05895<br />

0, 165s<br />

(15.1)<br />

Eftersom reguleringen ønskes implementeret i en mikroprocessor er det nødvendigt at tranformere<br />

denne til et udtryk der kan beregnes i diskret tid. For at gøre dette, kan det enten vælges at invers<br />

Laplace-transformere, for herefter at diskretisere funktionen. Da det er en PI-regulering kan inte-<br />

grationen i tidsdomænet implementeres vha. en numerisk integration. Alternativt er der modtaget<br />

undervisning på semestret i bilineær transformation <strong>af</strong> s-domæne funktioner, hvorfor det vælges at<br />

benytte denne metode.<br />

En bilineær transformation er en algebraisk transformation mellem s og z, hvor hele den imaginære<br />

akse i s-planet bliver <strong>af</strong>billedet på en omdrejning på enhedscirklen i z-planet [Oppenheim et al., 1989,<br />

s.450]. Transformationen foretages ved at erstatte s i overføringsfunktionen med udtrykket givet i<br />

Formel 15.2.<br />

s = 2<br />

Td<br />

−1 1 − z<br />

1 + z −1<br />

(15.2)<br />

[Oppenheim et al., 1989, s.450 lign.7.20]<br />

Eftersom alle frekvenser (−∞ ≤ Ω ≤ ∞) er <strong>af</strong>billedet mellem π ≤ ω ≤ π er transformationen<br />

ulineær [Oppenheim et al., 1989, s.450]. Dette giver sig til udtryk i en kompression <strong>af</strong> frekvenserne<br />

tæt på π. Størrelsen π kan vises at svare til den halve samplingsfrekvens [Andersen, 2007]. For at<br />

undgå forvrængning <strong>af</strong> regulatorresponset er det derfor nødvendigt at vælge en samplingsfrekvens<br />

77


KAPITEL 15 - Motorregulering<br />

højere end Nyquist-frekvensen. Båndbredden for motoren kan vha. MATLAB findes til 5,5 Hz (se<br />

bilags-CD’en under /matlab/MotorModel/regulering.m for beregninger). For at undgå<br />

forvrængning fra transformationen skal samplingsfrekvensen dermed være over 11 Hz.<br />

En anden ting der gør sig gældende er, at der, som tommelfingerregel, skal reguleres 6 gange inden<br />

for den fastsatte stigtid [Franklin et al., 2006, s.192]. Da systemet er designet til en stigtid på mini-<br />

mum 145,2 ms, kan dette vha. tommelfingerreglen omregnes til frekvensen hvormed reguleringen<br />

skal foretages.<br />

fs,reg = 1<br />

Ts<br />

= 6<br />

tr<br />

=<br />

6<br />

= 41, 3 Hz (15.3)<br />

0, 1452 ms<br />

For at sikre en præcis regulering skal der således foretages nye beregninger med 41,3 Hz. Øges fre-<br />

kvensen vil det pga. rotationssensornes opbygning ikke være sikkert at der vil være nye hastigheds-<br />

målinger tilgængelige. Mindskes frekvensen vil reguleringen ikke kunne nå at reagere tilstrækkelig<br />

hurtigt. <strong>Regulering</strong>sfrekvensn på 41,3 Hz er således den gyldne middelvej.<br />

Frekvensen kan omregnes til en samplingstid Td på ca. 24 ms. Indsættes samplingstiden i Formel<br />

15.2 kan den bilineære transformation <strong>af</strong> overføringsfunktionen for regulatoren udføres. Resultatet<br />

er udregnet i /matlab/MotorModel/regulator.m og kan ses i Formel 15.4<br />

Va(z)<br />

E(z)<br />

= 0, 0947 − 0, 07989z−1<br />

1 − z −1<br />

Ved invers z-transformation kan følgende differensligning findes:<br />

(15.4)<br />

va[n] = 0, 0947e[n] − 0, 07989e[n − 1] + va[n − 1] (15.5)<br />

Den tidsdiskrete regulator fungerer således ved at tage en vægtet differens mellem den nuværende<br />

og forrige fejl og lægge det forrige output til. I Figur 15.1 er stepreponset for hhv. det tidsdiskrete<br />

og kontinuerte reguleret system plottet. Som det fremgår, følger den diskretiserede regulator fint den<br />

kontinuerte.<br />

Som det fremgår <strong>af</strong> Figur 15.1 <strong>af</strong>viger det diskrete steprepons en smule fra den kontinuerten. Men<br />

eftersom <strong>af</strong>vigelsen ikke er større vælges ikke at ændre yderligere på systemet.<br />

78


Amplitude<br />

1<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

Step Response<br />

KAPITEL 15 - Motorregulering<br />

Continous<br />

Discrete<br />

0<br />

0 0.5 1 1.5<br />

Time (sec)<br />

Figur 15.1: Kontinuert og tidsdiskret steprespons for det reguleret system<br />

simuleringet i MATLAB.<br />

Som det ses <strong>af</strong> differensligningen på Formel 15.5, er integrationen implementeret ved at den forrige<br />

output-værdi er medtaget i beregningen. Da der er en fysisk grænse for hvor store værdier <strong>af</strong> va[n],<br />

der kan lægges over motoren, er der behov for at implementere en såkaldt anti-windup mekanisme.<br />

Denne sikrer imod at va[n] og va[n − 1] antager værdier, der ikke kan udtrykkes i spændingen over<br />

motoren. Bliver dette ikke gjort, vil va[n] kunne blive integreret meget stor, hvorved det vil tage<br />

lang tid at få va[n] integreret tilbage til værdier hvor motorerne ikke længere kører med maksimal<br />

hastighed.<br />

Anti windup mekanismen er udarbejdet ved hjælp <strong>af</strong> en simpel if-sætning. Denne if-sætning sætter<br />

blot va[n] til 10 V og fuld duty-cykle på spændingen over motoren, hvis va[n] har værdien 10 V eller<br />

derover.<br />

Princippet bag windup fænomenet og mekanismen der er implementeret til at sikre imod det er<br />

illustreret på Figur 15.2.<br />

79


KAPITEL 15 - Motorregulering<br />

max<br />

min<br />

v A [n] ud<br />

min<br />

max<br />

v A [n] ind<br />

Figur 15.2: Illustration <strong>af</strong> princippet bag windup og mekanismen der sik-<br />

rer imod det. Den stiplede linie repræsenterer va[n] som den ville løbe hvis<br />

den ikke blev begrænset. Den faste linie illustrerer begrænsningen i output-<br />

værdier.<br />

Pga. en fejl i en tidligere version <strong>af</strong> regulator.m <strong>af</strong>viger den implementerede differensligning,<br />

fra den i rapporten beskrevet. Den implementerede differensligning er udregnet med en samplingstid<br />

på 36 ms i stedet for 24 ms. <strong>Regulering</strong>srutinen er ligeledes implementeret med denne samplingstid.<br />

<strong>Regulering</strong>en <strong>af</strong> motoren sker således langsommere end designet ligger op til. Dette vil således være<br />

en fejlkilde i den samlede regulering <strong>af</strong> <strong>helikopter</strong>en.<br />

80


KAPITEL 16<br />

Rotationssensor<br />

Da hastighedssensorerne indeholder en smith trigger og derfor udsender digitale spændingsniveauer,<br />

der kan påtrykkes og detekteres på processoren uden yderligere behandling, vælges det at tilslutte<br />

sensorerne til nogle <strong>af</strong> processorens interrupt-ben. Derved kan processoren indstilles til at modtage<br />

interrupts ved en <strong>af</strong> flankerne på sensorens output. Desuden vælges det at dedikere en <strong>af</strong> timerne i<br />

processoren til dette formål, således at tiden mellem to interrupts kan beregnes.<br />

Da der kun er én timer til rådighed, skal softwaren udvikles, således at denne ikke bliver <strong>af</strong>brudt <strong>af</strong><br />

nulstillingen, da det ellers ikke er muligt at lave et stykke u<strong>af</strong>hængigt kode til hver sensor. Derfor<br />

sættes timeren op således at denne laver et overflow-interrupt med et givent interval. I den tilhørende<br />

interrupt-rutine vil en tæller for hver <strong>af</strong> sensorerne blive talt op. Derudover sættes en max-værdi for<br />

tællerne, således at hvis tællerne når denne, skal de ikke tælles yderligere op, og i stedet skal ha-<br />

stigheden sættes til nul. Operationerne i dette overflow-interrupt er illustreret på Figur 16.1. Løkken<br />

der er illustreret på Figur 16.1 skal dog ikke implementeres, i stedet skal hver <strong>af</strong> de fire instruktioner<br />

skrives hver for sig, således at der undgåes overhead og uoverskuelighed fra løkken.<br />

Således er det muligt, når en magnet kommer inden for sensorens rækkevidde og processoren der-<br />

for modtager et interrupt, at gemme en værdi indeholdende antal overflows der har været i timeren<br />

siden sidste interrupt, og desuden gemme værdien i timeren. Ved hjælp <strong>af</strong> disse to værdier, og den<br />

gemte timer fra sidste gennemløb, er det muligt at beregne tiden det har taget for <strong>rotor</strong>eren at dre-<br />

je en halv omgang. Til sidst sættes en sem<strong>af</strong>or, for at signalere at der er nyt input til rådighed til<br />

beregningsrutinen. Operationerne der skal udføres i sensor-interruptet er illustreret på nedenstående<br />

figur:<br />

Beregningen <strong>af</strong> hastigheden bliver placeret i en tråd til formålet, således at det ikke begrænser andre<br />

tråde, med højere prioritet, i at køre. I denne tråd udføres beregningerne illustreret på Figur 16.3.<br />

81


KAPITEL 16 - Rotationssensor<br />

82<br />

n+1<br />

Nej<br />

ISR_Start<br />

n=1<br />

tæller_n =<br />

grænse?<br />

Nej<br />

tæller_n+1<br />

n=4?<br />

Ja<br />

ISR_Stop<br />

Ja<br />

hastighed_n=0<br />

Figur 16.1: Flowchart over softwaren til benyttelse <strong>af</strong> en timer til fire hastig-<br />

hedsmålinger.<br />

ISR_Start<br />

Gem timer<br />

Gem tid<br />

Set sem<strong>af</strong>or<br />

ISR_Stop<br />

Figur 16.2: Flowchart, som illustrerer operationerne, der skal udføres når en<br />

sensor interrupter processoren.


KAPITEL 16 - Rotationssensor<br />

Da beregningerne først skal ske når der er nyt input fra et sensor-interrupt er der implementeret en<br />

sem<strong>af</strong>or, således at denne tråd først må køre når sem<strong>af</strong>oren bliver sat i interrupt-rutinen.<br />

Vent på sem<strong>af</strong>or<br />

tæller =<br />

grænse<br />

timere = timer+256-gammel_timer<br />

tid = tæller * overflow_tid<br />

tid += timere* tick_time<br />

hastighed = pi / tid<br />

gammel_timer = timer<br />

Figur 16.3: Flowchart over operationerne, der udføres i tråden til beregning<br />

<strong>af</strong> hastighed ud fra sensor-input.<br />

På Figur 16.4 er illustreret de tider der skal tages med i beregningen. Længst til venstre illustreres<br />

tiden det tager fra sidste interrupt til første overflow. Da den forrige tæller er gemt og timeren er en<br />

8-bit værdi kan antal timerticks her beregnes ved formlen:<br />

Nej<br />

Ja<br />

timerticks = 256 − gammel_timer (16.1)<br />

Oven i dette kan lægges den, nyligt gemte, timerværdi da denne indeholder antal timerticks illustreret<br />

længst til højre på følgende figur:<br />

Figur 16.4: Tider der skal medregnes ved beregning <strong>af</strong> rotationshastighe-<br />

den, og variablerne disse er gemt i<br />

Timeren er sat op til at have en divider på 1024. Dette vil sige at timeren bliver talt op for hver 1024.<br />

clockpuls på processoren. Herved kan det beregnes hvor længe det tager for hver timertick, således:<br />

83


KAPITEL 16 - Rotationssensor<br />

tick_time =<br />

1<br />

16 MHz<br />

1024<br />

= 64 µs (16.2)<br />

Hvert overflow i timeren giver 256 timerticks, hvorfor hvert overflow tager 256 gange tiden det tager<br />

at tælle timeren en op. Dog er der talt et overflow for meget da både første og sidste overflow i<br />

intervallet illustreret i midten på Figur 16.4 bliver talt med.<br />

Derfor kan tiden det har taget <strong>rotor</strong>en at dreje en halv omgang beregnes således:<br />

tid = (timer + 256 − gammel_timer) · ticktime + (tæller − 1) ∗ 256 ∗ ticktime (16.3)<br />

Og herudfra kan rotationshastigheden på roteren bestemmes ved formlen<br />

v =<br />

2 · π π<br />

=<br />

2 · tid tid<br />

(16.4)<br />

For at sikre imod store fejlmålinger fra højfrekvent støj skal der implementeres et stykke kode der<br />

sikrer at kun hastigheder der er under en fastsat grænse bliver accepteret og skrevet i variablen til<br />

formålet. Dette gøres ved følgende kode:<br />

1 double h a s t i g h e d = M_PI / t i d ; / / (2∗ p i ) / ( 2 ∗ t i d )<br />

2 i f ( h a s t i g h e d < MAX_HASTIGHED) {<br />

3 m o t o r _ s e n s o r _ f = h a s t i g h e d ;<br />

4 }<br />

Desuden sker det nogle gange at processoren danner flere interrupts på en puls fra sensoren, det-<br />

te giver, hvis beregningsrutinen får lov at køre, nogle meget høje værdier for hastigheden. Dette<br />

kan få motorcontrolleren til at regulere hastigheden på motoren forkert, hvorfor det giver en ustabil<br />

hastighed.<br />

For at sikre imod dette fænomen sættes processoren til at blokere interrupts fra den givne sensor i et<br />

stykke tid efter at den har fået det første. Derved vil processoren kun køre interruptrutinen en gang<br />

for hver puls fra sensoren, og ignorere alle sving der måtte være i pulsen der ellers ville få den til at<br />

interrupte igen.<br />

Måden hvorpå processoren sættes til ikke at blokere for interrupts efter et stykke tid, er at placere<br />

et vente-kald til sidst i beregningsrutinen, således at denne venter nogle millisekunder hvorefter den<br />

sætter processoren til igen at modtage interrupts.<br />

84


KAPITEL 17<br />

Vinkelregulator<br />

I det følgende kapitel vil der blive udledt diskrete ækvivalenter <strong>af</strong> overføringsfunktionerne til de<br />

to regulatorer der blev udledt i Kapitel 13. Dette er nødvendigt med henblik på at kunne regulere<br />

<strong>helikopter</strong>ens vinkel ved hjælp <strong>af</strong> mikroprocessoren.<br />

Først vil blive udledt en diskret PD regulator tilsvarende den udledt i Afsnit 13.2. Herefter vil<br />

der blive udledt en overføringsfunktion til regulatoren der skal ændre på referenceværdien til PD-<br />

regulatoren, og herved øge systemtypen.<br />

17.1 PD-regulator<br />

I Afsnit 13.2 er givet en regulatorfunktion i kontinuert tid. Denne regulator kan dog ikke umiddelbart<br />

implementeres i projektet, da det er valgt at benytte en mikroprocessor til at udføre beregningerne.<br />

Derfor skal overføringsfunktionen diskretiseres og der skal findes en differensligning der kan imple-<br />

menteres i processorens kode.<br />

Ved bestemmelse <strong>af</strong> beregningsfrekvens på vinkelregulatoren benyttes tommelfingerreglen beskrevet<br />

i [Franklin et al., 2006, s. 192]. Denne siger, at hvis reguleringsrutinen gennemløbes seks gange på en<br />

stigende flanke, er dette som hovedregel tilstrækkeligt. Da Stigtiden på vinkelregulatoren er 0.653 s<br />

skal reguleringsrutinen derfor køres omkring en gang hver 100 millisekund. Dog vælges det, fordi<br />

systemet tillader det, at regulere med 15 Hz, dvs. hvert 67. millisekund.<br />

Udgangspunktet for udledningen <strong>af</strong> en tidsdiskret overføringsfunktion er overføringsfunktionen for<br />

regulatoren. Denne er her gengivet for overskuelighed:<br />

Dct(s) = 14.56 · s + 56 (17.1)<br />

85


KAPITEL 17 - Vinkelregulator<br />

Da dette er en overføringsfunktion kun med nulpunkter giver den billiniære metode, som er benyt-<br />

tet til motorcontrolleren, et resultat der er ustabilt. Derfor vælges det i stedet at benytte metoden<br />

“Matched Pole-zero”. Denne metode benytter sig <strong>af</strong> sammenhængen imellem polers placering i s-<br />

domænet for en given funktion og placeringen <strong>af</strong> polerne i z-domænet. Denne sammenhæng kan,<br />

ifølge [Franklin et al., 1990] beskrives ved følgende formel:<br />

Hvor<br />

Ts er tiden imellem to kald <strong>af</strong> regulatoren [s]<br />

z = e s·Ts (17.2)<br />

[Franklin et al., 1990, s. 147]<br />

Ved denne metode antages det, at nulpunkternes placering kan bestemmes ved Formel 17.2.<br />

Diskretiseringen <strong>af</strong> Formel 17.1 sker ved at nulpunktet overføres til z-domænet:<br />

Hvor<br />

zct = − 56<br />

14, 56<br />

zct er nulpunktets placering i s-domænet [-]<br />

zdt er nulpunktets placering i z-domænet [-]<br />

Ddt er den diskrete overføringsfunktion [-]<br />

Kdt er en konstant der bestemmes efterfølgende [-]<br />

(17.3)<br />

zdt = e zct·Ts 56 −<br />

= e 14,56 ·0.067 = 0, 773 (17.4)<br />

Ddt = Kdt(z − 0.773) (17.5)<br />

Dernæst skal den diskrete overføringsfunktion tilpasses, således at den har samme forstærkning som<br />

den kontinuerte. Dette gøres ved at betragte slutværdisætningen for hver <strong>af</strong> overføringsfunktionerne,<br />

og bestemme Kdt således at disse bliver ens.<br />

Dcs(s) <br />

= Dds<br />

s=0 z=1<br />

(17.6)<br />

53 = Kdt(1 − 0, 773) ⇒ (17.7)<br />

Kdt =<br />

56<br />

= 246, 70<br />

1 − 0, 773<br />

(17.8)<br />

Da der er flere nulpunkter end poler vælges det at placere en pol i z = 0 således at der kan opnåes et<br />

kausalt system. Således kan den diskrete overføringsfunktion endeligt bestemmes som:<br />

Ddt = 246, 70(z − 0, 773) =<br />

246, 7z − 190.7<br />

z<br />

Denne overføringsfunktion kan omdannes til en differensligning ved invers z-transformation:<br />

86<br />

(17.9)


U(z)<br />

E(z)<br />

17.1.1 PI-regulator<br />

= 246, 7 · z − 190.7 = 246.7 − 190.7 · z−1<br />

1<br />

KAPITEL 17 - Vinkelregulator<br />

⇒ (17.10)<br />

z −1 U(z) = (246, 7 − 190 · z −1 )E(z) (17.11)<br />

⇓ Invers Z-transformation<br />

u[n] = 246, 7 · e[n] − 190.7e[n − 1] (17.12)<br />

Regulatoren til ændring <strong>af</strong> systemtypen skal også implementeres i form <strong>af</strong> en differensligning, da<br />

denne regulator indeholder flere poler end nulpunkter benyttes den bilineær transformation til diskre-<br />

tesering. Den tidskontinuerte overførings funktion blev i <strong>af</strong>snit 13.4 fundet til:<br />

D2(s) =<br />

0, 3<br />

s<br />

(17.13)<br />

Da det blev valgt at sample den første vinkelregulator med Td = 0, 067s vælges den samme sam-<br />

plingsfrekvens, så de to regulatorer kan beregnes på samme tid. Herefter indsættes den bilineær<br />

transformation i overføringsfunktionen, og den diskrete regulator findes til:<br />

D2(z) =<br />

D2(z) =<br />

D2(z) =<br />

0, 3<br />

2 1−z−1<br />

T d · 1+z−1 0,3<br />

1<br />

2 Td<br />

+ 0,3<br />

1<br />

2 Td<br />

z−1 1 − z −1<br />

0, 01 + 0.01z−1<br />

1 − z −1<br />

Ved invers z-transformation findes differensligningen for regulatoren til:<br />

(17.14)<br />

(17.15)<br />

(17.16)<br />

y[n] = 0, 01x[n] + 0, 01x[n − 1] + y[n − 1] (17.17)<br />

87


DEL VI<br />

Evaluering<br />

Et system, der overholder de funktionelle krav, har været igennem en<br />

designprocess, og er derefter blevet implementeret på microcontroller.<br />

Det endelige system udsættes for en accepttest for at undersøge om det<br />

lever op til de funktionelle krav. På baggrund <strong>af</strong> accepttesten konklud-<br />

eres der på den gennemførte proces.


KAPITEL 18<br />

Accepttest<br />

Formålet med dette <strong>af</strong>snit er at undersøge og dokumentere, hvorvidt systemet overholder kravene i<br />

Kapitel 4. Dette er gjort i henhold til testspecifikationerne i Appendiks C og målingerne er beskrevet<br />

i Appendiks D.<br />

I det følgende vil resultaterne <strong>af</strong> testene blive gennemgået. Resultaterne analyseres og det konklude-<br />

res, hvorvidt kravene er opfyldt tilfredsstillende.<br />

18.1 Stabillitet i vinkel<br />

Systemets stabilitet i en given referencevinkel er testet ved at referencen er indskrevet i programmet,<br />

hvorefter systemet startes, og data logges fra potentiometret i kardanleddet.<br />

Selvom dette er gjort i henhold til testspecifikationerne i Appendiks C, er dette ikke helt uproble-<br />

matisk. Grundet faren ved opstillingen er det nødvendigt for operatøren at opholde sig bag plastiks-<br />

kærme mens systemet kører. Derfor skal måleudstyret tilsluttes potentiometret ved hjælp <strong>af</strong> lange<br />

ledninger hvorpå der kan induceres støj. Dette støj influerer ikke kun på målingerne, men vil også<br />

påvirke systemet, hvorfor det sansynligvis yder en anelse dårligere, end hvis ikke måleinstrumenter-<br />

ne var tilsluttet.<br />

Resultaterne <strong>af</strong> forsøget er illustreret på Figur 18.1 og opsamlet i Tabel 18.1.<br />

Det ses på Figur 18.1, der illustrerer én måling, at systemet tager noget tid om at svinge ind til<br />

den ønskede værdi. Det ses også, at systemet begynder at svinge når det har holdt <strong>helikopter</strong>en<br />

i referencevinklen i et stykke tid. Dette menes at skyldes støj, men det har ikke været muligt at<br />

finde kilden. Det ses desuden også på Figur 18.1, at signalerne er overlejret med støj, således at de<br />

beregnede vinkler <strong>af</strong>viger en anelse fra de reelle. Ydermere er der, ved accepttesten, implementeret<br />

89


KAPITEL 18 - Accepttest<br />

en motorregulator der ikke kaldes tilstrækkeligt ofte (som beskrevet i Kapitel 15). Dette indfører<br />

også en fejl der ummiddelbart også kan være skyld i at systemet ikke reagerer som det skal.<br />

Vinkel [°]<br />

−5<br />

−10<br />

−15<br />

−20<br />

−25<br />

−30<br />

Systemopstart med vinkelreference = −10°<br />

−35<br />

5 10 15<br />

Tid [s]<br />

20 25<br />

(a) reference = −10 ◦<br />

Figur 18.1: Resultat <strong>af</strong> vinkelmåling, hvor systemets reference er sat til<br />

−10 ◦ .<br />

Vinkelreference Max-<strong>af</strong>vigelse Gennemsnitlig <strong>af</strong>vigelse Interval [s]<br />

-10 1, 2606 ◦ 0, 6610 ◦ 8,5 - 18,5<br />

-8 1, 6747 ◦ 0, 6276 ◦ 9,6 - 19,6<br />

-6 1, 9345 ◦ 0, 9030 ◦ 11 - 21<br />

-4 0, 8945 ◦ 0, 3548 ◦ 11 - 21<br />

-2 3, 3866 ◦ 1, 0767 ◦ 12.8 - 22.8<br />

0 0, 5869 ◦ 0, 2104 ◦ 12.8 - 22.8<br />

2 0, 5032 ◦ 0, 1585 ◦ 12.8 - 22.8<br />

4 1, 2810 ◦ 0, 8677 ◦ 17.3 - 27.3<br />

6 2, 3194 ◦ 0, 8156 ◦ 13.7 - 23.7<br />

8 4, 3953 ◦ 1, 1738 ◦ 15 - 25<br />

10 4, 6287 ◦ 0, 9849 ◦ 16 - 26<br />

Tabel 18.1: Resultat <strong>af</strong> vinkelmålinger ved forskellige referencevinkler.<br />

I Tabel 18.1 ses resultater <strong>af</strong> beregninger <strong>af</strong> gennemsnits- og maks-værdier for <strong>af</strong>vigelsen i forhold<br />

til vinkelreferencen. Beregningerne er lavet på datasæt fra det anførte interval, der strækker sig fra<br />

systemet har stabilliseret sig og 10 sekunder frem.<br />

Det ses, at der er maks-værdier der overskrider 1 ◦ , hvorfor det ikke kan konkluderes, at systenet<br />

overholder Krav 1 i Kapitel 4.<br />

Det kan desuden ses <strong>af</strong> tabellen, at det tager længere tid for systemet at stabillisere sig ved de sidste<br />

målinger end de første. Dette kan skyldes, at potentiometret i kardanleddet flytter sig en anelse under<br />

hver måling, hvorfor fejlen i vinkelmålinger vil blive større og støre igennem målingerne.<br />

90


KAPITEL 18 - Accepttest<br />

18.2 Modstandsdygtighed imod udefrakommende forstyrrelser<br />

Krav 2 i Kapitel 4 er testet ved at systemet startes op og stabilliserer sig, hvorefter det påvirkes meget<br />

kr<strong>af</strong>tigt ved at operatøren trækker den ene <strong>rotor</strong> kr<strong>af</strong>tigt ned. Hvis systemet kan stabillisere sig efter<br />

denne påvirkning, og en tilsvarende til den anden side, er kravet overholdt.<br />

På Figur 18.2 er illustreret responset fra systemet ved forstyrrelse i henholdsvis højre og venstre side.<br />

Det ses på denne figur, at systemet kan stabillisere sig i vinklen igen ved begge påvirkninger, hvorfor<br />

kravet er overholdt. Dog kunne det på målingerne til testen <strong>af</strong> stabillitet i vinklen ses, at systemet<br />

efter noget tid bliver påvirket udefra, hvorefter det begynder at svinge lidt. Det er formentlig samme<br />

fejl som der ses på Figur 18.1.<br />

Vinkel [°]<br />

20<br />

10<br />

0<br />

−10<br />

−20<br />

−30<br />

Forstyrrelse <strong>af</strong> <strong>helikopter</strong>en ved reference = 0<br />

−40<br />

10 15 20 25 30<br />

Tid [s]<br />

35 40 45 50 55<br />

Figur 18.2: Systemets respons på udefrakommede forstyrrelser i form <strong>af</strong><br />

meget kr<strong>af</strong>tigt ryk i den ene <strong>rotor</strong>arm.<br />

91


KAPITEL 18 - Accepttest<br />

18.3 Opretholdelse <strong>af</strong> konstant løft<br />

Kravet omkring konstant løft er testet ved at <strong>helikopter</strong>en placeres i en ny opsætning, der gør det<br />

muligt at måle vægten <strong>af</strong> denne, mens den flyver. Hvis <strong>helikopter</strong>en kan løfte halvdelen <strong>af</strong> sin egen<br />

vægt, mens den flyver, er kravet overholdt.<br />

Resultatet <strong>af</strong> målingen er at <strong>helikopter</strong>en i sig selv vejer 2.53 kg, og den vejer i opstillingen 10,712<br />

kg. Når <strong>helikopter</strong>en flyver kan vægten 9,490 kg <strong>af</strong>læses på vægten. Med disse data kan <strong>helikopter</strong>ens<br />

løft beregnes således:<br />

Hvor<br />

mløft = malt − malt-flyvende = 10, 712 kg − 9, 490 kg = 1, 222 kg (18.1)<br />

mløft er massen der løftes <strong>af</strong> <strong>helikopter</strong>en [kg]<br />

malt er massen på <strong>helikopter</strong>en og opsætningen tilsammen [kg]<br />

malt-flyvende er vægten der er <strong>af</strong>læst på vægten mens <strong>helikopter</strong>en flyver. [kg]<br />

Dette er meget tæt på halvdelen <strong>af</strong> <strong>helikopter</strong>ens vægt; 1,265 kg. Dog er er det ikke inden for kravet<br />

om ±1%. Det har vist sig, i løbet <strong>af</strong> designprocessen, at dette krav er meget svært at overholde da<br />

det ikke har været muligt at få motorerne til at accellerere lige så hurtigt som <strong>rotor</strong>erne får dem til at<br />

deaccellerere.<br />

92


KAPITEL 19<br />

Konklusion<br />

Et projekt er blevet udarbejdet på baggrund <strong>af</strong> ønske om at få en quad<strong>rotor</strong> <strong>helikopter</strong> til at hover.<br />

<strong>Regulering</strong>en <strong>af</strong> <strong>helikopter</strong>en foregår ved at kontrollere hastigheden og derved løftet frembragt <strong>af</strong> de<br />

fire <strong>rotor</strong>er individuelt.<br />

Da kompleksiteten <strong>af</strong> en fuldstændig regulering <strong>af</strong> <strong>helikopter</strong>en blev vurderet for høj til et projekt på<br />

5. semester, blev reguleringen <strong>af</strong>grænset til én akse. Denne <strong>af</strong>grænsning blev implementeret ved at<br />

fastspænde <strong>helikopter</strong>en på et kardanled monteret på en trefod. Ved at fastlåse den ene akse i kardan-<br />

leddet blev <strong>helikopter</strong>en begrænses til én frihedsgrad. Projektet har således omhandlet regulering og<br />

stabilisering <strong>af</strong> <strong>helikopter</strong>en i denne akse, ved at kontrollere hastighederne på <strong>rotor</strong>erne.<br />

Som udgangsspunkt for reguleringen er den samlede <strong>helikopter</strong> blevet modelleret. Der er således<br />

opstillet og verificeret modeller for motor med gear, <strong>rotor</strong> og <strong>helikopter</strong>ens krop. Verifikationerne<br />

viste, at systemets dynamik kunne beskrives ud fra modellerne, men at body-modellen var ustabil.<br />

På baggrund her<strong>af</strong> er der blevet designet en motorregulator, som sikrer en konstant og korrekt ro-<br />

torhastighed, samt en vinkelregulator til at kontrollere <strong>helikopter</strong>ens vinkel. Motorreguleringen er<br />

implementeret vha. <strong>af</strong> en PI-regulator og designet med udgangspunkt i den standardiserede 2. or-<br />

dens overføringsfunktion. For at kunne stabilisere <strong>helikopter</strong>en er root locus-metoden blevet brugt.<br />

Ved hjælp her<strong>af</strong> blev det fundet, at der kunne opnås et stabilt system ved implementering <strong>af</strong> en<br />

PD-regulator. Der var dog en konstant fejl i vinklen, hvorfor det var nødvendigt at implementere en<br />

PI-regulator for at undgå steady-state fejl.<br />

Det samlede system blev implementeret på en Robostix med en 16 MHz ATMega128 processor. For<br />

at sikre en robust regulering er reguleringen <strong>af</strong> <strong>helikopter</strong>en blevet programmeret til at køre på en<br />

preemptiv AvrX kerne med prioriterede tråde.<br />

Accepttesten viste en generel stigning i vinkel<strong>af</strong>vigelsen ved større vinkelreferencer. Dette er for-<br />

93


KAPITEL 19 - Konklusion<br />

ventet, eftersom modellerne antager, at <strong>helikopter</strong>en flyver med en vinkelreference på ca. 0 grader.<br />

Helikopteren udviser nogle udforklarlige udsving. Ligesom den 8 ud <strong>af</strong> 11 gange <strong>af</strong>viger fra kravet<br />

til vinklen.<br />

Testen viste ydermere, at det lykkedes at overholde kravet på en maksimal vinkel<strong>af</strong>vigelse på ±1<br />

grad ved 3 ud <strong>af</strong> 11 målte vinkelreferencer. Det lykkedes at stabilisere <strong>helikopter</strong>systemet, samt at<br />

det kan finde tilbage i den rette vinkel ved forstyrrelser udefra.<br />

94


Litteraturliste<br />

[Andersen et al., 2006] Andersen, M. B., Binderup, O., Gislason, S., Haukrogh, J., Kjærgaard, M.,<br />

and Sørensen, M. (2006). Draganflyer X-Pro - Modelling and Control. Technical report, <strong>Aalborg</strong><br />

<strong>Universitet</strong>.<br />

[Andersen, 2007] Andersen, O. (2007). Lecture: Digital filters with infinite impulse response (IIR).<br />

Internet. http://kom.aau.dk/~oa/Teaching/2007/SB/lecture7.php.<br />

[Andersen and Pedersen, 2007] Andersen, P. and Pedersen, T. S. (2007). Modeldannelse. Techni-<br />

cal report, Afdeling for Proceskontrol, Instutut for Elektroniske Systemer, Aalbrorg <strong>Universitet</strong>,<br />

Frederiks Bajers Vej 7, DK-9220 <strong>Aalborg</strong> Ø, Danmark.<br />

[Barello, 2007] Barello, L. (Vist: 2007). Avrx. Internet. http://www.barello.net/avrx/.<br />

[Bjørn et al., 2007] Bjørn, J., Kjærgaard, M., and Sørensen, M. (2007). Autonomous hover flight for<br />

a quad <strong>rotor</strong> helicoptor - linear quadratic controller - piecewise <strong>af</strong>fine hybrid systems controller.<br />

Technical report, <strong>Aalborg</strong> <strong>Universitet</strong>.<br />

[Bramwell, 1976] Bramwell, A. R. S. (1976). Helicopter Dynamics. Edward Arnold Ltd.<br />

[Close et al., 2002] Close, C. M., Frederick, D. K., and Newell, J. C. (2002). Modeling of Analyses<br />

of Dynamic Systems. John Wiley and Sons, inc, 3 edition. ISBN 0-471-39422-4.<br />

[Franklin et al., 2006] Franklin, G. F., Powell, J. D., and Emami-Naeini, A. (2006). Feedback Con-<br />

trol of Dynamic Systems. Pearson Prentice Hall, 5 edition. ISBN 0-13-149930-0.<br />

[Franklin et al., 1990] Franklin, G. F., Powell, J. D., and Workman, M. L. (1990). Digital Control of<br />

Dynamic Systems. Addison-Wesley Publishing Company, second edition. ISBN: 0-201-11938-2.<br />

[Oppenheim et al., 1989] Oppenheim, A. V., Sh<strong>af</strong>er, R. W., and Buck, J. R. (1989). Discrete-time<br />

Signal Processing. Prentice Hall, 2 edition.<br />

95


[Pedersen, 2007] Pedersen, T. S. (2007). Regulation specifications. Internet. http://www.<br />

control.auc.dk/%7Etom/TilbkobED5/regspec1e.pdf.<br />

[Ritchie, 2007] Ritchie, E. (2007). Case study: Electronic table using linak actuators. In-<br />

ternet. http://www.iet.aau.dk/%7Eaer/E5-2ModellingOfDynamicSystems/<br />

E5-2ModellingOfDynamicSystems2007Index.htm.<br />

[Serway and John W. Jewett, 2004] Serway, R. A. and John W. Jewett, J. (2004). Physics for Scien-<br />

96<br />

tists and Engineers. Thomson, Brooks/Cole, 6.ed edition. ISBN 0-534-40949-0.


DEL VII<br />

Appendiks


APPENDIKS A<br />

Motordriver<br />

Fra processoren sendes PWM-signaler til styring <strong>af</strong> motorhastigheden. Dette signal skifter mellem<br />

0 og 5 V, ved en fast frekvens og dutycyklen bestemmer herefter hastigheden på motoren. Da de<br />

monterede motorer er normerede til 12V skal udgangssignalet fra mikrocontrolleren forstærkes op,<br />

og der skal tages højde for den store strøm der trækkes fra motorerne.<br />

A.1 Opbygning <strong>af</strong> motordriver<br />

Det vælges at bruge et driverkredsløb, virkende som switch. Et sådant kredsløb opbygges omkring<br />

MOSFET transistorer Disse transistorer skal kunne håndtere spændingen på 12 V, samt peakstrøm-<br />

me på optil 50 A (<br />

15 V<br />

300 mΩ<br />

) ved opstart. Desuden er det ønskeligt, at denne har en meget lav ON-<br />

modstand, så mest muligt <strong>af</strong> effekten <strong>af</strong>sættes i DC motoren. Herved fungerer dette kredsløb analogt<br />

med en switch, hvor signalet fra mikrocontrolleren åbner og lukker for strømmen gennem transisto-<br />

ren, og herved strømmen gennem motoren.<br />

A.1.1 MOSFET transistor<br />

Det vælges at benytte en MosFET transistor <strong>af</strong> typen SUB85N02-06. Denne transistor er en power<br />

transistor, og er normeret til en maksimal spænding på 20 V og maksimal strøm på 85 A. Denne<br />

transistor kan derfor håndtere de strømme og spændinger, den vil blive udsat for i systemet. Desuden<br />

har denne transistor også en meget lav ON-modstand (rds) på kun 0,006 Ω ved en forspænding på<br />

4,5 V. Den lave modstand gør, at størst mulig del <strong>af</strong> den brugte effekt bliver <strong>af</strong>sat i motoren. Da mod-<br />

standen i DC-motoren er på 300 mΩ, hvilket er 50 gange større end ON-modstanden i transistoren,<br />

negligeres denne i det videre arbejde.<br />

A2


Elektromotoren, som denne MOSFET transistor skal forsyne, placeres mellem positiv forsyning og<br />

transistorens drain terminal. Transistorens source terminal forbindes direkte til stel. Dette bevirker,<br />

at når transistoren åbnes, åbnes en direkte vej, gennem motoren og transistoren, til stel, hvilket åbner<br />

for strømmen gennem elektromotoren. Dette bevirker at spændingen over motoren skifter mellem<br />

forsyningsspændingen og 0 V.<br />

Da transistoren skal virke som switch, skal dennes tidskarakteristika undersøges for at vurdere hvor<br />

høj PWM frekvens der kan benyttes fra systemet. Transistoren har fire tidsegenskaber, som skal un-<br />

dersøges: Turn-on delay time(t d(on)(MOS)), Rise time(t r(MOS)), Turn-Off delay time(t d(off)(MOS))<br />

og Fall time(t f(MOS)). Disse værdier giver anledning til en minimum periodetid, skitseret på følgen-<br />

de figur:<br />

Figur A.1: Tidskarakteristika for MOSFET transistoren SUB85N02-06<br />

Den maksimale frekvens hvorved denne MOSFET transistor kan skifte, er derfor givet ved:<br />

fmax(MOS) <<br />

1<br />

td(on)(MOS) + tr(MOS) + td(off)(MOS) + tf(MOS) fmax(MOS) <<br />

1<br />

40ns + 180ns + 120ns + 150ns<br />

fmax(MOS) < 2, 04MHz<br />

Dette betyder at transistoren benyttes til frekvenser op til 2,04 MHz.<br />

(A.1)<br />

(A.2)<br />

For at begrænse strømmen ind i gaten på transistoren, samt fjerne ringing, indsættes en modstand<br />

i gaten på MOSFET transistoren. Denne modstand bestemmes således at den ikke har indflydel-<br />

se på tidskarakteristika for MOSFET transistoren. Modstanden dimensioneres ud fra stigetiden for<br />

transistoren, hvor forholdet mellem denne og tidskonstanten τ for kondensatoren i gaten.<br />

τmos<br />

= 1 (A.3)<br />

Ci(Rgate + Rout(driver)) 180ns<br />

= 1<br />

6600pF (Rgate + 3, 6Ω)<br />

Rgate = 23, 7Ω<br />

Da denne modstand er dimensioneret efter MOSFET transistorens tidskarakteristika, har RC-leddet,<br />

dannet <strong>af</strong> transistorens indgangskapacitans og modstand Rgate, ingen indvirkning på frekvenskarak-<br />

teristika for det samlede motordriver trin. Dog begrænses gatestrømmen, hvilket er ønskeligt, for<br />

ikke at overbelaste driveren.<br />

A3


A.1.2 MOSFET driver<br />

Selv om der, i teorien, kun skal en lille tærskelspænding vgs til at åbne en MOSFET transistor, kan<br />

en stor indgangskapacitet trække forholdsvist kr<strong>af</strong>tige ladestrømme. Derfor indsættes en MOSFET<br />

driver, som kan levere en større strøm, end mikrocontrolleren kan levere.<br />

Det vælges at implementere en MOSFET driver <strong>af</strong> typen ICL7667. Denne MOSFET driver er en<br />

dual power MOSFET driver og udmærker sig ved at have en maksimal output strøm på 300 mA.<br />

Herudover har denne komponent lave rise og fall tider, samt et lavt propagation delay på typisk<br />

30 ns. Disse delays, giver dog anledning til en ændring i den maksimale frekvens, der kan tilføres<br />

motordriver kredsløbet. Denne frekvens bliver:<br />

fmax <<br />

1<br />

1<br />

f + td(on)(driver) + tr(driver) + td(off)(driver) + tf(driver) max(MOS)<br />

fmax <<br />

1<br />

40ns + 180ns + 120ns + 150ns + 60ns + 40ns + 40ns + 40ns<br />

fmax < 1, 49MHz<br />

(A.4)<br />

Dette betyder, at indsættelsen <strong>af</strong> denne MOSFET driver, har indflydelse på den maksimale frekvens,<br />

hvortil kredsløbet kan benyttes. Dog kan kredsløbet stadig benyttes til frekvenser på over 1 MHz,<br />

hvilket er mere end tilstrækkeligt.<br />

Da MOSFETdriveren inverterer dennes indgangssignal, implementeres en inverter, hvorpå der im-<br />

plementeres pulldown-modstande i indgangen. Herved sikres det at spændingen over motorerne er 0<br />

V når processoren er slukket eller ikke forbundet. Denne inverter er en HEX inverter med buffer <strong>af</strong><br />

typen 4049. Dennes implementation sikrer et TTL input signal til MOSFET driveren.<br />

På nedenstående figur vises det samlede diagram for driver trinnet.<br />

A4<br />

4049<br />

ICL7667<br />

R gate<br />

Motor<br />

G<br />

M<br />

D<br />

S<br />

SUB85<br />

Figur A.2: Samlet kredsløbsdiagram for motordriverkredsløb


Det følgende appendiks er skrevet på baggrund <strong>af</strong> [Franklin et al., 2006, Kapitel 5].<br />

APPENDIKS B<br />

Root locus<br />

Root locus er en metode til at se, hvordan ændringer i en systemparameter vil have indflydelse på<br />

pol-placeringen i lukketsløjfe overføringsfunktionen for systemet.<br />

B.1 Root locus<br />

Lukketsløjfe overføringsfunktionen for standard opsætningen, vist på Figur B.1, er givet ved:<br />

Y (s)<br />

R(s) =<br />

D(s)G(s)<br />

1 + H(s)D(s)G(s)<br />

(B.1)<br />

Polerne i lukketsløjfe overføringsfunktionen vil således være rødderne i den karakteristiske ligning:<br />

1 + H(s)D(s)G(s) = 0 (B.2)<br />

R D(s) G(s) Y<br />

+ −<br />

H(s)<br />

Figur B.1: Standard tilbagekoblings blokdiagram.<br />

For at simplificere notationen vælges det at definere en overføringsfunktion L(s) = b(s)<br />

a(s) , så den<br />

karakteristiske ligning kan skrives 1 + K · L(s) = 0, hvor K er parametren, hvis indflydelse ønskes<br />

A5


undersøgt. Den vil typisk beskrive gainet i sløjfen. Root locus-plottet vil indeholde alle de værdier<br />

for s, der opfylder den karakteristiske ligning for K gående fra nul til uendelig. Et root locus-plot<br />

kan derved være en hjælp til at vælge værdien for parametren K, da dette viser, hvordan polerne vil<br />

bevæge sig.<br />

Det vælges at angive graden <strong>af</strong> polynomiet a(s) n og graden <strong>af</strong> b(s) m. Hvis n ≥ m og koefficienten<br />

til begge polynomiers højeste led er 1 kan polynomierne faktoriseres, så overføringsfunktionen L(s)<br />

kan skrives som følgende:<br />

L(s) = b(s)<br />

a(s) =<br />

m i=1<br />

n<br />

j=1<br />

(s − zi)<br />

(s − pj)<br />

(B.3)<br />

Hvor zi er nulpunkterne, og pj er polerne i L(s). Overføringsfunktionen L(s) kan også repræsenteres<br />

ved poler og nulpunkters længde og vinkel:<br />

L(s) =<br />

m i=1<br />

n<br />

|s − zi|<br />

j=1 |s − pj| ej(P m<br />

i=1 ψz i −P n<br />

j=1 φp j ) (B.4)<br />

Hvor ψzi og φpj er henholdsvis nulpunkternes og polernes vinkler. Den karakteristiske ligning kan<br />

omskrives til B.5. Her<strong>af</strong> ses det, at root locus-plottet er alle de punkter i s-planet, hvor fasen <strong>af</strong> L(s)<br />

er 180 ◦ .<br />

L(s) = − 1<br />

K<br />

(B.5)<br />

Den karakteristiske ligning kan således løses ved blot at finde de værdier <strong>af</strong> s, hvor fasen <strong>af</strong> L(s) er<br />

180 ◦ . I Formel B.4 er det de to summationer i eksponential funktionen, der bestemmer fasen. Dette<br />

er således tilstrækkeligt til at opstille følgende udtryk:<br />

m<br />

ψzi −<br />

i=1<br />

n<br />

φpj = ±180 ◦ (2k + 1) k = 0, 1, 2, ... (B.6)<br />

j=1<br />

B.2 Retningslinier for root locus-plots<br />

B.2.1 Regel 1<br />

Der vil være n forgreninger startende i polerne for L(s) og m <strong>af</strong> forgreningerne vil ende i et<br />

nulpunkt <strong>af</strong> L(s) L(s).<br />

Den karakteristiske ligning omskrives til a(s) + K · b(s) = 0. Hvis K = 0 ses det, at den karak-<br />

teristiske ligning reduceres til a(s) = 0. Herved vil root locus-plottet starte i rødderne <strong>af</strong> a(s) dvs.<br />

polerne <strong>af</strong> L(s). Når K går mod uendelig skal b(s) = 0 for at opfylde ligningen, og da der er m<br />

nulpunkter i b(s), vil m forgreninger ende her.<br />

A6


B.2.2 Regel 2<br />

Til venstre for et ulige antal poler og nulpunkter vil root locus-plottet altid befinde sig på den<br />

reelle-akse.<br />

Hvis man stiller sig et sted på den reelle-akse vil vinklerne fra et komplekst konjugeret pol-par<br />

ophæve hinanden. Det samme vil ske for komplekst konjugerede nulpunkter. Den eneste måde fasen<br />

kan blive 180 ◦ , når man befinder sig på den reelle-akse, er herved, hvis der er et ulige antal poler og<br />

nulpunkter til højre for, idet placeringen <strong>af</strong> poler og nulpunkter altid vil være symmetrisk omkring<br />

den reelle-akse.<br />

B.2.3 Regel 3<br />

For store værdier <strong>af</strong> K og s vil root locus plottet gå mod n − m asymptoter med hældningen<br />

φl φl φl givet ved:<br />

φl = 180◦ + 360 ◦ (1 − l)<br />

n − m<br />

Asymptoterne vil have udgangspunkt i punktet α:<br />

<br />

pi −<br />

α =<br />

zi<br />

n − m<br />

B.2.4 Regel 6<br />

l = 1, 2, .., n − m (B.7)<br />

De steder på root locus plottet hvor der optræder flere poler kan findes ved Formel B.9<br />

(B.8)<br />

<br />

b(s) · da<br />

<br />

db<br />

− a(s) · = 0 (B.9)<br />

ds ds<br />

A7


APPENDIKS C<br />

Accepttest specifikation<br />

I det følgende <strong>af</strong>snit beskrives en række tests, der skal udføres på systemet for at dokumentere, at<br />

kravene i Kapitel 4 er overholdt. Disse tests skal udføres som “black box”-tests, således at de ikke<br />

kræver forudgående kendskab til systemets indhold. Dette gør, at systemets opbygning ikke kan<br />

få indflydelse på nøjagtigheden <strong>af</strong> resultaterne <strong>af</strong> testen. Dog vælges det at acceptere benyttelse <strong>af</strong><br />

output fra sensorer, der er placeret i opstillingen, da det kan ændre på systemet at implementere nye.<br />

Følgende krav skal derfor testes:<br />

1. System skal kunne holde <strong>helikopter</strong>en i en given vinkel (Krav 1 i Kapitel 4).<br />

2. Systemet skal kunne opretholde et løft svarende til halvdelen <strong>af</strong> tyngdekr<strong>af</strong>tens indvirkning på<br />

<strong>helikopter</strong>en (Krav 3 i Kapitel 4).<br />

3. Systemet skal kunne modstå udefrakommende forstyrrelser iform <strong>af</strong> kr<strong>af</strong>tige nedad i henholds-<br />

vis højre og venstre motor (Krav 2 i Kapitel 4).<br />

4. Systemet skal gøre det muligt at overvåge reguleringsvariable og sensorinputs ved hjælp <strong>af</strong> en<br />

computer forbundet til systemet med en RS232 forbindelse.<br />

C.1 Test <strong>af</strong> stabillitet i given vinkel<br />

Som beskrevet, ved Krav 1 i Kapitel 4, skal systemet kunne holde <strong>helikopter</strong>en i en given vinkel med<br />

gulvet. Dette har denne test til formål at dokumentere.<br />

A8


C.1.1 Fremgangsmåde<br />

At implementere endnu et potentiometer på opstillingen vil påvirke systemet så kr<strong>af</strong>tigt at det er valgt<br />

ikke at gøre dette. I stedet vælges det, at måle output fra potentiometret, i opstillingen, ved hjælp <strong>af</strong><br />

et oscilloskop. Der skal ved hjælp <strong>af</strong> oscilloskopet logges output fra sensoren i 50 sekunder eller 10<br />

sekunder fra systemet har stabilliseret sig, fra hver måling således at efterfølgende databehandling<br />

er mulig. Umiddelbart burde systemet testes for stabillitet i alle vinkler, men da opstillingen sætter<br />

begrænsninger for <strong>helikopter</strong>ens bevægelser, vælges det at teste stabillitet i vinkelintervallet −10 ◦<br />

til 10 ◦ .<br />

Fremgangsmåden for testen skal være som følger:<br />

1. Helikopteren placeres i præcis 0 grader ved hjælp <strong>af</strong> vaterpas og spændingen ud fra potentio-<br />

metret måles ved hjælp <strong>af</strong> et multimeter og oscilloskop.<br />

2. Dernæst placeret <strong>helikopter</strong>en i −45 ◦ og spændingen måles på multimeter og oscilloskop.<br />

3. Helikopteren placeres således at den hælder over imod negative vinkler når systemet ikke<br />

regulerer den.<br />

4. Systemets vinkelreference sættes til −10 ◦ og systemet startes op samtidig med at der logges<br />

data fra potentiometret i kardanleddet i 50 sekunder. Herefter slukkes systemet igen.<br />

5. Systemets reference inkrementeres med 2 ◦ og testen gentages<br />

6. Sådan gentages testen igen til referencen når 10 ◦ .<br />

C.1.2 Databehandling<br />

Ovenstående fremgangsmåde resulterer i 11 datasæt fra målinger over 50 sekunder og målinger <strong>af</strong><br />

spændingen fra potentiometret i to kendte vinkler.<br />

Datasættene fra målingerne kan omregnes til vinkler ved hjælp <strong>af</strong> Formel C.1, og ved hjælp <strong>af</strong> Formel<br />

C.2 bestemmes vinkel<strong>af</strong>vigelserne i datasættet.<br />

Hvor<br />

θ(v(t)) = (v(t)) − V0) ·<br />

45 ◦<br />

V0 − V−45<br />

θ<strong>af</strong>vigelse(v(t)) = θref − (V (t)) − V0) ·<br />

45 ◦<br />

V0 − V−45<br />

θ(v(t)) er vinklen ved en given spænding V(t) fra potentiometret [ ◦ ]<br />

θref er referencevinklen [ ◦ ]<br />

θ<strong>af</strong>vigelse(v(t)) er vinkel<strong>af</strong>vigelsen i forhold til θref ved spændingen v(t) [ ◦ ]<br />

V(t) er spændingen til tiden t [V]<br />

V0 er spændingen målt i vinklen 0 ◦ [V]<br />

V−45 er spændingen målt i vinklen −45 ◦ [V]<br />

(C.1)<br />

(C.2)<br />

A9


Hver <strong>af</strong> de 11 datasæt fra målingerne skal dernæst behandles således at fejlen i forhold til referencen<br />

kan bestemmes. Hvis ingen målinger indeholder fejl på mere end 1 ◦ , efter at systemet har stabilliseret<br />

sig, overholder systemet kravet til stabilitet i de målte vinkler.<br />

C.2 Modstandsdygtighed i forhold til udefrakommende forstyr-<br />

relser<br />

Systemet skal, ifølge krav 2 i Afsnit 4, holde <strong>helikopter</strong>en stabil i referencevinklen. Det betragtes<br />

som værende en meget kr<strong>af</strong>tig forstyrrelse at trække den ene motor så kr<strong>af</strong>tigt ned som opstillingen<br />

tillader. Derfor vælges det at betragte dette krav som overholdt, hvis systemet kan få <strong>helikopter</strong>en til<br />

at blive stabil i referencepositionen efter en sådan forstyrrelse.<br />

C.2.1 Fremgangsmåde<br />

1. Et oscilloskop tilsluttes potentiometret som i testen for stabillitet og systemet startes.<br />

2. Oscilloskopet sættes til at logge outputtet fra potentiometret.<br />

3. Systemet startes op med referencen 0 og der ventes til at stabillitet opnåes i referencepositio-<br />

nen.<br />

4. Helikopteren påvirkes så kr<strong>af</strong>tigt at den ene <strong>rotor</strong> trækkes så kr<strong>af</strong>tigt ned det er muligt<br />

5. Det ventes til <strong>helikopter</strong>en igen er stabil<br />

6. Helikopteren påvirkes nu igen blot i den modsatte side.<br />

7. Når stabillitet igen er opnået slukkes systemet ned og loggen fra oscilloscobet gemmes til<br />

behandling.<br />

C.2.2 Databehandling<br />

Beregningen på oscilloscobmålingerne fra testen for stabillitet udføres og resultatet plottes, således<br />

at det er muligt at se fejlen i forhold til referencen som funktion <strong>af</strong> tiden. På et sådandt plot vil det<br />

være meget tydeligt hvornår <strong>helikopter</strong>en er blevet påvirket, og i hvilken retning.<br />

Hvis systemet får <strong>helikopter</strong>en til at blive stabil i referecen (±1 ◦ ) efter påvirkningen i begge retninger<br />

betragtes dette krav som værende overholdt.<br />

C.3 Opretholdelse <strong>af</strong> konstant løft<br />

Systemet skal, ifølge Krav 3 i Afsnit 4, opretholde et konstant løft der svarer til halvdelen <strong>af</strong> tyngde-<br />

kr<strong>af</strong>tens virkning på <strong>helikopter</strong>en. Dette kan testes ved følgende test.<br />

A10


C.3.1 Fremgangsmåde<br />

Helikopteren kobles fra opstillingen og vægten <strong>af</strong> denne måles for sig. Dernæst kobles <strong>helikopter</strong>en<br />

til en ny opstilling der muliggør at den kan stå på en vægt mens den flyver. Hele denne opstilling<br />

vejes. Dernæst startes systemet op mens det er placeret på vægten, og der ventes til sytemet har fået<br />

<strong>helikopter</strong>en stabil (referencevinkel = 0 ◦ ), hvorefter vægten noteres.<br />

Kan systemet i denne opstilling få vægten til at vise en værdi svarende til opstillingens vægt, plus<br />

halvdelen <strong>af</strong> vægten på <strong>helikopter</strong>en, betragtes kravet som overholdt.<br />

C.4 Overvågning <strong>af</strong> reguleringsvariable<br />

Dette krav verificeres ved, under alle ovenstående målinger, at have en computer tilsluttet systemet,<br />

og lade denne vise den indkommende datastrøm på seriel-porten.<br />

A11


Operatører: Andreas Corneliussen<br />

Sted: UAV-lab, Fredrik Bajers Vej 7, <strong>Aalborg</strong> <strong>Universitet</strong><br />

Dato: 13/12 2007<br />

Måleobjekt: Det udarbejdede system som helhed<br />

D.1 Formål<br />

APPENDIKS D<br />

Målerapport til accepttest<br />

Formålet med dette forsøg er at kunne dokumentere hvor vidt de funktionelle krav overholdes.<br />

D.2 Apparaturliste<br />

A12<br />

Producent Model Apparattype AAU nr. Kommentar<br />

Oltronix C 28 - 20 R Strømforsyning 07390 Maks. 30 V / 30 A<br />

Fluke 189 Multimeter 60768<br />

Agilent DSO6034A Oscilloskop 64572 Venligst udlånt <strong>af</strong> Control-lab<br />

Struers PJ1220 Vægt 08432<br />

Tabel D.1: Apparaturliste.


D.3 Måleopstilling<br />

Der skal, til accepttesten, udføres tre målinger, hvor<strong>af</strong> to benytter samme måleopstilling. Først ønskes<br />

det at verificere om systemet kan placere <strong>helikopter</strong>en i en fastsat vinkel, og holde den der. Dernæst<br />

skal det verificeres om systemet kan gøre dette ved kr<strong>af</strong>tige påvirkninger. Til sidst ønskes det målt<br />

hvor meget løft <strong>helikopter</strong>en skaber når systemet holder den vinkelret med gulvet.<br />

Første og anden måling kan benytte samme måleopstilling hvor et oscilloskop tilsluttes potentio-<br />

metret på samme måde som processorens A/D-converter. Et multimeter tilsluttes desuden også på<br />

samme måde som oscilloskopet, således at oscilloskopmålingerne kan verificeres ved hjælp <strong>af</strong> dette.<br />

Den sidste måling kræver en noget anden måleopstilling. Her skal <strong>helikopter</strong>en fjernes fra den nu-<br />

værende opstilling og fastsættes (stadig ved hjælp <strong>af</strong> kardanleddet) på nogle vægte, således at det<br />

bliver muligt at placere hele opstillingen på en vægt.<br />

Derfor skal måleopstillingerne på Figur D.1 og Figur D.2 benyttes.<br />

Figur D.1: Måleopstilling til de første to målinger i accepttesten<br />

Figur D.2: Måleopstilling til den sidste måling i accepttesten<br />

A13


D.4 Målemetode<br />

Målingerne er lavet i henhold til testbeskrivelsen til accepttesten (Kapitel C).<br />

D.5 Måledata og bearbejdning <strong>af</strong> data<br />

Måledata fra oscilloskopet er tilgængelige på bilags-CD’en i mappen Accepttest. Navnene på filerne<br />

tilhørende de forskellige målinger kan ses i Tabel D.2.<br />

De yderligere måleresultater er som følger:<br />

• Spænding i 0 ◦ = 3,335 V<br />

• Spænding i −45 ◦ = 2,658 V<br />

• Vægt <strong>af</strong> <strong>helikopter</strong> = 2,53 kg<br />

• Vægt <strong>af</strong> <strong>helikopter</strong> + opstilling = 10,712 kg<br />

• Vægt når <strong>helikopter</strong> er stabil i vinkel 0 ◦ = 9,490 kg<br />

En computer har desuden været tilsluttet systemet under alle tests, og har modtaget reguleringsvari-<br />

able og sensorinputs hvert sekund.<br />

Måling Filnavn<br />

Reference: -10 print_02_1.csv<br />

Reference: -8 print_03_1.csv<br />

Reference: -6 print_04_1.csv og print_05_1.csv<br />

Reference: -4 print_06_1.csv<br />

Reference: -2 print_07_1.csv<br />

Reference: 0 print_08_1.csv<br />

Reference: 2 print_09_1.csv<br />

Reference: 4 print_10_1.csv<br />

Reference: 6 print_11_1.csv<br />

Reference: 8 print_12_1.csv<br />

Reference: 10 print_13_1.csv<br />

Måling med forstyrrelser print_14_1.csv<br />

Tabel D.2: Filnavne til måledata fra oscilloscopet<br />

Ved iagtagelse <strong>af</strong> måledataene (se Figur D.3) ses følgende:<br />

A14<br />

• Systemet tager noget tid om at svinge ind. Denne tid er <strong>af</strong>hængig <strong>af</strong> referencevinklen.<br />

• Efter noget tid hvor systemet har kunnet holde <strong>helikopter</strong>en meget stabil begynder der, på<br />

nogle målinger, at komme forstyrrelser som systemet har svært ved at modvirke tilpas hurtigt.


Derfor vælges det at behandle data fra systemet har stabilliseret sig og ti sekunder frem, da testen<br />

ikke har til formål at illustrere systemets sårbarhed overfor støj og lignende.<br />

I Tabel D.3 kan ses resultatet <strong>af</strong> beregning <strong>af</strong> gennemsnitlig og maksimal <strong>af</strong>vigelse for hver <strong>af</strong> må-<br />

lingerne.<br />

Vinkelreference Max-<strong>af</strong>vigelse Gennemsnitlig <strong>af</strong>vigelse Interval [s]<br />

-10 1, 2606 ◦ 0, 6610 ◦ 8,5-18,5<br />

-8 1, 6747 ◦ 0, 6276 ◦ 9,6 - 19,6<br />

-6 1, 9345 ◦ 0, 9030 ◦ 11 - 21<br />

-4 0, 8945 ◦ 0, 3548 ◦ 11 - 21<br />

-2 3, 3866 ◦ 1, 0767 ◦ 12.8 - 22.8<br />

0 0, 5869 ◦ 0, 2104 ◦ 12.8 - 22.8<br />

2 0, 5032 ◦ 0, 1585 ◦ 12.8 - 22.8<br />

4 1, 2810 ◦ 0, 8677 ◦ 17.3 - 27.3<br />

6 2, 3194 ◦ 0, 8156 ◦ 13.7 - 23.7<br />

8 4, 3953 ◦ 1, 1738 ◦ 15 - 25<br />

10 4, 6287 ◦ 0, 9849 ◦ 16 - 26<br />

Tabel D.3: Resultat <strong>af</strong> accepttestmålinger<br />

Resultatet <strong>af</strong> anden måling er illustreret på Figur D.4 hvor systemet er blevet forstyrret ved hver <strong>af</strong><br />

de lodrette, stiplede, linier.<br />

A15


A16<br />

Vinkel [°]<br />

Vinkel [°]<br />

−5<br />

−10<br />

−15<br />

−20<br />

−25<br />

−30<br />

Systemopstart med vinkelreference = −10°<br />

−35<br />

5 10 15<br />

Tid [s]<br />

20 25<br />

30<br />

20<br />

10<br />

0<br />

−10<br />

−20<br />

−30<br />

(a) reference = −10 ◦<br />

Systemopstart med reference = 0°<br />

−40<br />

5 10 15<br />

Tid [s]<br />

20 25<br />

(b) reference = 0 ◦<br />

Figur D.3: Resultat <strong>af</strong> vinkelmåling hvor systemets reference er sat til hen-<br />

holdsvis −10 ◦ og 0 ◦ . Gr<strong>af</strong>erne viser hvordan systemet ændrer vinkel på he-<br />

likopteren ved opstart.


Vinkel [°]<br />

20<br />

10<br />

0<br />

−10<br />

−20<br />

−30<br />

Forstyrrelse <strong>af</strong> <strong>helikopter</strong>en ved reference = 0<br />

−40<br />

10 15 20 25 30<br />

Tid [s]<br />

35 40 45 50 55<br />

Figur D.4: Systemets respons på udefrakommede forstyrrelser i form <strong>af</strong> me-<br />

get kr<strong>af</strong>tigt tryk på den ene <strong>rotor</strong>arm<br />

A17


Operatører: Erik Poulsen og Jesper Bønding<br />

Sted: UAV-lab, Fredrik Bajers Vej 7, <strong>Aalborg</strong> <strong>Universitet</strong><br />

Dato: 9/11 2007<br />

APPENDIKS E<br />

Målerapport til verifikation <strong>af</strong> <strong>rotor</strong>model<br />

Måleobjekt: Én motor, gear og <strong>rotor</strong> siddende på X-Pro <strong>helikopter</strong>. Hall-sensor på X-pro og magnet<br />

i tandhjulet på <strong>rotor</strong>-akslen.<br />

E.1 Formål<br />

Der er udarbejdet en model for <strong>rotor</strong>erne på X-Pro’en og derfra udledt en lineariseret sammenhæng<br />

mellem den givne <strong>rotor</strong>s vinkelfrekvens og løft. Det ønskes at verificere sammenhængen i praksis, og<br />

derfor skal der laves sammenhørende målinger for vinkelfrekvens og løft i et passende måleområde.<br />

E.2 Apparaturliste<br />

A18<br />

Producent Model Apparattype AAU nr. Kommentar<br />

Tektronik TDS 2012B Oscilloskop 64587<br />

Oltronix C 28 - 20 R Strømforsyning 07390 Maks. 30 V / 30 A<br />

Hameg HM-7042-3 Strømforsyning 60772 Til Hall-sensor.<br />

Kern CH 15 K 20 Træk-vægt - Maks. 15 kg, delta 0,02 kg<br />

Tabel E.1: Apparaturliste.


E.3 Måleopstilling<br />

Det ønskes at måle sammenhørende værdier for den opadrettede kr<strong>af</strong>t Fz fra en <strong>rotor</strong> og vinkelfre-<br />

kvensen Ω, som den roterer med. Til måling <strong>af</strong> kr<strong>af</strong>ten vælges en digital træk-vægt, hvor udlæsningen<br />

i kg kan omregnes til N, idet tyngdeaccelerationen kendes. Hall-sensoren monteret på X-Pro’en be-<br />

nyttes til at måle Tandhjul vinkelfrekvensen for <strong>rotor</strong>en. Der er monteret en magnet i tandhjulet, der er koblet<br />

Hall-sensor<br />

Motor<br />

på samme aksel som <strong>rotor</strong>en. Udgangssignalet fra Hall-sensoren er normalt højt, men giver en lav<br />

Osc<br />

puls, når magneten V1 passerer V2<br />

sensoren. Den mekaniske opstilling ses på Figur E.1(a).<br />

F [N]<br />

z<br />

(a) Mekanisk<br />

Omega<br />

[rad/s]<br />

V 1<br />

Figur E.1: Måleopstilling<br />

Tandhjul<br />

Magnet<br />

Motor Hall-sensor<br />

V 2<br />

(b) Elektrisk<br />

Motoren, der driver <strong>rotor</strong>en, kobles til en strømforsyning, der kan give mindst 10 A ved 12 V. Hall-<br />

sensoren kobles til en 10 V forsyning og signalet føres til et oscilloskop med lagringsfunktion. Den<br />

elektriske opstilling ses på Figur E.1(b).<br />

Oscilloskopet tilpasses, så der logges data for mindst 10 pulser. Derved kan hver vinkelfrekvens<br />

udregnes ved at midle over 10 pulser, så målefejl kan minimeres.<br />

E.4 Målemetode<br />

Ifølge databladet for motoren er den normeret til kontinuerligt at blive forsynet med 12 V DC. Dette<br />

giver et løft på omkring 0,7 kg fra én <strong>rotor</strong>, så alle fire <strong>rotor</strong>er ville kunne holde <strong>helikopter</strong>en i<br />

hover ved denne spænding, da <strong>helikopter</strong>en vejer omkring 2,5 kg. Det vælges at lave målinger for<br />

vinkelfrekvenser, der giver et løft fra 0 til 0,72 kg med 0,04 kg interval. For hver måling justeres<br />

jævnspændingen på motoren, så det korrekte løft opnåes, og der optages en tilhørende dataserie fra<br />

Hall-sensoren på oscilloskopet.<br />

E.5 Måledata og bearbejdning <strong>af</strong> data<br />

På Figur E.2 er den lineariserede sammenhæng i Formel 7.56 fra Afsnit 7.3 mellem kr<strong>af</strong>ten Fz og<br />

vinkelfrekvensen Ω plottet som en kurve.<br />

Osc<br />

A19


De optagede dataserier fra oscilloskopet overføres til PC og bearbejdes i MatLAB. Starttidspunkt<br />

for første og 10. puls bestemmes, og derfra udregnes en gennemsnitlig vinkelfrekvens. De noterede<br />

værdier fra træk-vægten omregnes til kr<strong>af</strong>t ved at multiplicere med tyngdeaccelerationen 9,82 N<br />

kg . De<br />

målte data er plottet på Figur E.2.<br />

Kr<strong>af</strong>t fra <strong>rotor</strong> [N]<br />

0<br />

-1<br />

-2<br />

-3<br />

-4<br />

-5<br />

-6<br />

-7<br />

-8<br />

-9<br />

-10<br />

0 20 40 60 80 100 120 140 160 180 200<br />

Vinkelfrekvens [rad/s]<br />

Figur E.2: Plot <strong>af</strong> opadrettet kr<strong>af</strong>t fra <strong>rotor</strong> som funktion <strong>af</strong> vinkelfrekvensen.<br />

Kurver for andengradsligning og linearisering. Cirklen angiver lineariserings-<br />

punktet i hover.<br />

Det ses på Figur E.2 at lineariseringen stemmer godt overens med målingerne fra 130 rad<br />

s til 155 rad<br />

s ,<br />

mens der ved lavere vinkelfrekvenser ses en tydelig fejl men dog stadig en tilsvarende udvikling.<br />

Det nærmeste målepunkt ligger i 145,8 rad<br />

s , og her <strong>af</strong>viger den lineariserede kurve 2,2% fra målepunktet.<br />

A20


APPENDIKS F<br />

Bestemmelse <strong>af</strong> body-parametre<br />

I det følgende bestemmes de fysiske konstanter for bodyparametrene. Det er inertimomentet Jb,<br />

moment armen mcarm og friktionskonstanten Bk.<br />

F.1 Bestemmelse <strong>af</strong> inertimoment<br />

Inertimomentet <strong>af</strong> <strong>helikopter</strong>en omkring omdrejningspunktet i kardanleddet ønskes bestemt. Af For-<br />

mel F.1 kan inertimomentet <strong>af</strong> et vilkårligt legeme findes:<br />

<br />

I = ρr 2 dV (F.1)<br />

[Serway and John W. Jewett, 2004, s.300].<br />

Hvor ρ er massedensiteten, r er den vinkelrette <strong>af</strong>stand til rotationsaksen og dV er volumeændringen.<br />

Da <strong>helikopter</strong>en er en meget kompleks geometrisk form splittes den op i simple geometriske former<br />

som cylindere og stænger. Dette gøres for at simplificere udregningen <strong>af</strong> inertimomentet. For yderli-<br />

gere at simplificere udregningen antages det, at alle dele har en homogen massefordeling, hvorved ρ<br />

i Formel F.1 bliver en konstant og kan flyttes udenfor integralet. Da inertimomentet nu kun <strong>af</strong>hænger<br />

<strong>af</strong> de enkelte legemers geometri kan det findes ud fra standard formler. Standardformlerne beskriver<br />

dog typisk kun inertimomentet igennem massecentrum <strong>af</strong> legemet, og det er derfor nødvendigt at<br />

flytte rotationsaksen. Dette gøres ved at benytte parallel-akse-sætningen, der siger: Hvis inertimo-<br />

menter omkring en akse, der går igennem massecentrum <strong>af</strong> et objekt er Imc og den totale masse <strong>af</strong><br />

objektet er M, er inertimomentet omkring en akse, der er parallel med den første og befinder sig i en<br />

A21


<strong>af</strong>stand på D fra denne givet ved Formel F.2:<br />

I = Imc + M · D 2<br />

(F.2)<br />

[Serway and John W. Jewett, 2004, s.304]<br />

Da det er krævende at bestemme inertimomentet <strong>af</strong> <strong>helikopter</strong>en præcist, er der under bestemmel-<br />

se <strong>af</strong> dette blevet fokuseret på de dele <strong>af</strong> <strong>helikopter</strong>en, der befinder sig længst fra centrum. Som<br />

det ses <strong>af</strong> Formel F.1, har disse dele størst betydning for det samlede inertimomentet. Inertimo-<br />

mentet er fundet til Ix = 0, 17 kg m 2 se evt. udregninger inertia.m på bilags-CD’en under<br />

/matlab/BodyModel.<br />

F.2 Målerapport til bestemmelse <strong>af</strong> massemidtpunkt<br />

Operatører: Brian M. Christensen<br />

Sted: UAV-lab, Fredrik Bajers Vej 7, <strong>Aalborg</strong> <strong>Universitet</strong><br />

Dato: 10/12 2007<br />

Måleobjekt: X-Pro <strong>helikopter</strong> monteret på kardanled.<br />

F.2.1 Formål<br />

At bestemme placeringen <strong>af</strong> <strong>helikopter</strong>ens massemidtpunkt, under antagelse <strong>af</strong> at dets placering<br />

ligger et sted på <strong>helikopter</strong>ens vertikale symmetriakse. Dette gøres ved, at måle momentet tyngde-<br />

kr<strong>af</strong>ten giver anledning til, når <strong>helikopter</strong>en hælder 45 ◦ .<br />

F.2.2 Apparaturliste<br />

F.2.3 Måleopstilling<br />

Producent Model Apparattype AAU nr. Kommentar<br />

Kern CH 15 K 20 Træk-vægt - Maks. 15 kg, ∆min 0,02 kg<br />

Tabel F.1: Apparaturliste.<br />

Et vaterpas, der kan måle 45 ◦ , monteres med tape ovenpå <strong>helikopter</strong>ens flade plast-top, og trækvæg-<br />

ten sættes fast lige under <strong>rotor</strong>navet. Opstillingen er vist på Figur F.1.<br />

F.2.4 Målemetode<br />

Helikopteren vippes til den ene side, mens der holdes igen i trækvægten. Helikopteren vippes indtil<br />

vaterpasset viser 45 ◦ herefter <strong>af</strong>læses vægtens værdi som kg45 samtidig med at <strong>helikopter</strong>en holdes<br />

A22


Vertikal symmertriakse<br />

Vaterpas<br />

l 1<br />

mc arm<br />

45 o<br />

Trækvægt<br />

Omdrejningspunkt<br />

Figur F.1: Måleopstilling til verifikation <strong>af</strong> bodymodellen.<br />

i 45 ◦ . Trækvægten skal holdes parallelt med <strong>helikopter</strong>ens vertikale symmetriakse, da denne ellers<br />

ikke vil måle rigtigt. Herefter <strong>af</strong>monteres <strong>helikopter</strong>en fra kardanleddet, og <strong>helikopter</strong>ens totale vægt<br />

mtotal måles. Slutteligt måles <strong>af</strong>standen l1, der er <strong>af</strong>standen fra symmetriaksen til <strong>rotor</strong>navet.<br />

F.2.5 Måledata<br />

De målte data er vist i Tabel F.2.<br />

F.2.6 Beregning<br />

Parametre Værdi Enhed<br />

m45 0,48 kg<br />

l1 0,455 m<br />

mtotal 2,546 kg<br />

Tabel F.2: Måledata<br />

Placeringen <strong>af</strong> <strong>helikopter</strong>ens massemidtpunkt ønskes bestemt ud fra de målte data. Dette sker under<br />

antagelse <strong>af</strong> at massemidtpunktet befinder sig et sted på den vertikale symmetriakse. Den målte vægt<br />

kg45 kan omregnes til en kr<strong>af</strong>t vha. tyngdeaccelerationen (g), og herefter opstilles momentligevægten<br />

for punktet Mo på Figur F.2:<br />

F45 · l1 = Fg45 · mcarm ⇔ m45 · g · l1 = mtotal · g · cos(45 ◦ ) · mcarm (F.3)<br />

A23


Ved at isolere for mcarm og indsætte de målte data i Formel F.3 bestemmes mcarm til:<br />

mcarm = m45 · g · l1<br />

Fg · cos(45◦ 0, 48 · 9, 82 · 0, 455<br />

=<br />

) 2, 546 · g · cos(45◦ = 0, 121 m (F.4)<br />

)<br />

F g45<br />

l 1<br />

mc<br />

arm<br />

45 o<br />

M o<br />

Figur F.2: Måleopstilling til verifikation <strong>af</strong> bodymodellen.<br />

Massemidtpunktet er således forskudt 0,121 m op <strong>af</strong> den vertikale symetriakse, i forhold til omdrej-<br />

ningspunktet.<br />

F.3 Målerapport for friktion i kardanled<br />

Operatør: Brian M. Christensen<br />

Sted: UAV-lab, Fredrik Bajers Vej 7, <strong>Aalborg</strong> <strong>Universitet</strong><br />

Dato: 5/11 2007<br />

Måleobjekt: Der måles på kardanleddets x-retning med potentiometer som vinkelsensor.<br />

F.3.1 Formål<br />

Formålet med forsøget er, at bestemme friktionen i kardanleddet.<br />

A24<br />

F g<br />

F 45


F.3.2 Apparaturliste<br />

F.3.3 Måleopstilling<br />

Producent Model Apparattype AAU nr. Kommentar<br />

Tektronix TDS 2012 B Ocsilloskop 64587<br />

Oltronix C 28 - 20 R Strømforsyning 07390<br />

Tabel F.3: Apparaturliste.<br />

Figur F.3 viser forsøgsopstillingen. Den øvre del <strong>af</strong> kardanleddet er spændt fast, så den ikke kan<br />

bevæges. På kardanleddets roterende del er monteret en jernstang med længden ls og massen ms.<br />

Jernstangens vinklen θk i forhold til lodret måles <strong>af</strong> potentiometret, der er monteret på den drejelige<br />

akse i kardanleddet således, at det drejes præcist den samme vinkel som jernstangen. Strømforsy-<br />

ningen tilsluttes potentiometrets to yderste tilslutninger og indstilles til 10 V. Oscilloskopet tilsluttes<br />

med en probe mellem strømforsyningens 0 V og det midterste ben på potentiometret, således der<br />

måles en spænding på 0 - 10 V på oscilloskopet, når potentiometret drejes en hel omgang.<br />

Oscilloskop<br />

Strøm−<br />

forsyning<br />

l s<br />

θ κ<br />

Jernstang<br />

potentiometer<br />

Figur F.3: Jernstangens hældning måles i forhold til θk = 0, og kan <strong>af</strong>læses<br />

på oscilloskopet som en spænding på mellem 0 - 10 V, hvor 5V svare til 0 ◦<br />

F.3.4 Målemetode<br />

Først bestemmes længden ls og vægten ms <strong>af</strong> den benyttede jernstang. Herefter benyttes den oven-<br />

stående forsøgsopstilling. Oscilloskopet indstilles til 0.5 V og 2.0 s pr. division, og DC-niveauet<br />

indstilles således at det målte spændingsniveau vil svinge omkring tids-aksen.<br />

Jernstangen løftes ud i en vinkel på 45 grader, spændingen på oscilloskopet noteres som V45. Her-<br />

efter løftes jernstangen ud i en vinkel på højest 28 grader og slippes. Kurveformen, der er målt på<br />

oscilloskopet, gemmes og overføres til en computer til senere behandling.<br />

A25


F.3.5 Forsøgsresultater<br />

De opsamlede data er vist på Figur F.4 og i Tabel F.4.<br />

F.3.6 Teori<br />

Vinkel [rad]<br />

0.5<br />

0<br />

−0.5<br />

0 2 4 6 8<br />

Tid [s]<br />

10 12 14 16<br />

Figur F.4: Viser vinklen som funktion <strong>af</strong> tiden.<br />

Værdi Enhed<br />

V45 1,32 V<br />

ls 0,695 m<br />

ms 0,736 kg<br />

Tabel F.4: Måledata<br />

Det vælges at betragte måleopstillingen som et pendulsystem, hvor pendulet udgøres <strong>af</strong> jernstangen<br />

med massen ms, inertimomentet Js og længden ls. Lejet udgøres <strong>af</strong> kardanleddet, som har en ukendt<br />

viskos friktion Bk. Ifølge [Close et al., 2002] kan sådan et system beskrives ved følgende formel:<br />

¨θk + Bk<br />

Js<br />

Vinkel<br />

· ˙ θk + ls · ms · g<br />

sin(θk) =<br />

Js · 2<br />

1<br />

· τa(t) (F.5)<br />

Js<br />

[Close et al., 2002, s.262]<br />

Hvor τa(t) er input til systemet og g er tyngdeaccelerationen. Formel F.5 er ulineær pga. leddet<br />

sin(θk). Dette led lineariseres ved at antage at sin(θk) ≈ θk, hvilket antages for at være en rime-<br />

lig approksimation i området |θk| < 0.5. Hvorved Formel F.5 omdannes til et lineært homogent<br />

andenordenssystem. Standardformen for et system <strong>af</strong> 2. orden ses i Formel F.6.<br />

0 = s 2 + 2 · ζ · ωn · s + ω 2 n (F.6)<br />

yzi(t) = Ks · e −ζωnt <br />

cos(ωn 1 − ζ2 · t) (F.7)<br />

Hvor ζ er dæmpningsfaktoren og ωn er den udæmpede egenfrekvens. Ifølge Close vil zero input<br />

responset yzi(t) have formen vist i Formel F.7 [Close et al., 2002, s.262]. Det ses <strong>af</strong> Formel F.7 at<br />

A26


esponsen vil være en cosinus svingning med en amplitude på Ks til t = 0, som <strong>af</strong>tager ekspotentielt<br />

med faktoren −ζ · ωn.<br />

Kurveformen, der kan forventes <strong>af</strong> forsøget, kendes nu. For at finde et udtryk for Bk i Formel F.5<br />

Laplace-transformeres denne og ζ og ωn isoleres:<br />

ωn =<br />

s 2 + Bk<br />

Js<br />

<br />

ls · ms · g<br />

2 · Js<br />

ζ =<br />

· s + ls · ms · g<br />

2 · Js<br />

Bk<br />

2 · Js · ωn<br />

= 0 (F.8)<br />

⇔ Bk = 2 · Js · ωn · ζ (F.9)<br />

Det ses <strong>af</strong> de ovenstående ligninger at ωn kun <strong>af</strong>hænger <strong>af</strong> tyngdeaccelerationen, massen <strong>af</strong> stangen<br />

ms og inertimomentet Js. Inertimomentet <strong>af</strong> jernstangen kan findes ud fra Formel F.10 [Serway s.<br />

304] der giver inertimonentet <strong>af</strong> en stang med en homogen fordelt masse, og omdrejningspunkt i den<br />

ene ende.<br />

Js = 1<br />

3 · ms · l 2 s<br />

For at finde Bk mangles altså kun ζ, der findes ud fra forsøgsresultater (se databehandling F.3.7).<br />

F.3.7 Databehandling<br />

(F.10)<br />

I det følgende ønskes Bk bestemt ud fra forsøgsresultaterne. Dette gøres ved at bestemme værdi-<br />

erne for Js og ωn. Herefter beregnes de værdier for Ks og ζ i ligning F.7, der giver den bedste<br />

approksimation til den målte kurve ved mindste kvadraters metoden.<br />

Js = 1<br />

3 · ms · l 2 s = 1<br />

3 · 0, 736 · 0, 6952 = 0, 119 [kg · m 2 ] (F.11)<br />

<br />

ls · ms · g 0, 695 · 0, 736 · 9, 82<br />

ωn =<br />

=<br />

= 4, 604 [Hz] (F.12)<br />

2 · Js<br />

2 · 0, 119<br />

For at simplificere udregningerne vælges det kun, at se på toppunkterne for kurven, hvilket er de<br />

<br />

steder, hvor cos(ωn 1 − ζ2 ·t) = 1, hvorved der kan ses bort fra dette led i Formel F.7. Dette giver:<br />

yzi(t) = Ks · e −ζωnt<br />

(F.13)<br />

Ved at tage den naturlige logaritme på begge sider <strong>af</strong> lighedstegnet kan Formel F.13 omskrives til et<br />

polynomie <strong>af</strong> første orden, hvor faktoren −ζ · ωn er hældningen og ln(Ks) er offsettet (se Formel<br />

F.14).<br />

ln(yzi(t)) = ln(Ks) − ζωnt (F.14)<br />

y(t) = β + α · t (F.15)<br />

A27


Herefter benyttes MatLAB’s indbyggede funktion polyfit til at bestemme den bedste første or-<br />

dens approksimation til toppunkterne i den målte kurve. Dette giver følgende værdier for Ks og<br />

−ζωn.<br />

ln(Ks) = −0, 171 ⇒ Ks = e −0,171 = 0.843 (F.16)<br />

−ζ · ωn = 0, 200 ⇒<br />

0, 200<br />

ζ = = 0, 043<br />

4, 604<br />

(F.17)<br />

Bk = 2 · Js · ωn · ζ = 2 · 0, 119 · 4, 604 · 0, 043 = 0, 047 (F.18)<br />

Figur F.5 viser de målte data sammen med den fundne kurve approksimation.<br />

Vinkel [rad]<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

0<br />

−0.2<br />

−0.4<br />

Vinkel<br />

Toppunkter<br />

Approximation<br />

0 2 4 6 8<br />

Tid [s]<br />

10 12 14 16<br />

Figur F.5: De målte data med indtegnede toppunkter og approksimations-<br />

kurve.<br />

F.3.8 Fejlkilder<br />

Det ses <strong>af</strong> Figur F.5 at den målte og tilnærmede kurve <strong>af</strong>viger fra hinanden, hvilket kan skyldes flere<br />

forhold. For det første, er der set bort fra luftmodstanden. Da luftmodstanden er hastigheds<strong>af</strong>hængig<br />

bremser den pendulet mest i starten, hvor vandringen er størst. Hvilket kan være forklaringen på at<br />

kurven er "trykket" flad i starten i forhold til det forventede.<br />

Det blev antaget at friktionen i kardanleddet var viskos. Den nærmest lineære kurveform på Figur<br />

F.5 modsiger denne antagelse, da den forventede kurveform som beskrevet var en eksponentielt<br />

<strong>af</strong>tagende kurve, hvorved det kan betvivles om friktionen i kardanleddet er linenært proportional<br />

med omdrejningshastigheden.<br />

A28


Operatører: Brian M. Christensen<br />

Sted: UAV-lab, Fredrik Bajers Vej 7, <strong>Aalborg</strong> <strong>Universitet</strong><br />

Dato: 10/12 2007<br />

APPENDIKS G<br />

Målerapport til verifikation <strong>af</strong> bodymodel<br />

Måleobjekt: X-Pro <strong>helikopter</strong> monteret på kardanled med vinkelsensor.<br />

G.1 Formål<br />

Formålet med denne måling er, at verificere den opstillede bodymodel. Da <strong>rotor</strong>modellen verificeres<br />

i en selvstændig måling, vil der i denne måling blive set bort fra <strong>rotor</strong>kræfterne. Det er således kun<br />

de parametre der indgår i bodymodellen, og dennes rigtighed, der verificeres i denne måling. Verifi-<br />

kationen består i at sammenligne vinkeludviklingen for et simuleret og målt fald <strong>af</strong> <strong>helikopter</strong>en.<br />

G.2 Apparaturliste<br />

Producent Model Apparattype AAU nr. Kommentar<br />

Tektronik TDS 2012B Oscilloskop 64587<br />

Hameg HM-7042-3 Strømforsyning 60772<br />

Tabel G.1: Apparaturliste.<br />

A29


G.3 Måleopstilling<br />

Til at måle vinklen benyttes potentiometeret, der er monteret på kardanleddet. Det forsynes med<br />

spænding på 5 V fra en strømforsyning. Oscilloskopet tilsluttes, så det måler spændingsforskellen<br />

mellem jord på strømforsyningen og det midterste ben på potentiometret. Måleopstillingen er vist på<br />

Figur G.1.<br />

G.4 Målemetode<br />

Strøm−<br />

forsyning<br />

potentiometer<br />

Oscilloskop<br />

Figur G.1: Måleopstilling til verifikation <strong>af</strong> bodymodellen.<br />

Oscilloskopet indstilles til 200 mV og 0.5 sek. per division. Herefter løftes <strong>helikopter</strong>en op i en<br />

vinkel på 2 ◦ forskellig fra vandret og slippes til tiden 0, hvilket medfører at <strong>helikopter</strong>en accelererer<br />

og vælter til siden. Oscilloskopet logger spændingskurven som et udtryk for vinklen. Den målte<br />

kurve gemmes og overføres til en PC, hvor den sammenlignes med den simulerede kurve.<br />

G.5 Måledata<br />

På Figur G.2 ses den målte kurve for forsøget, hvor spændingen er omregnet til radianer som beskre-<br />

vet i kapitel 14 om vinkelsensoren.<br />

A30<br />

Vinkel [rad]<br />

0<br />

−0.1<br />

−0.2<br />

−0.3<br />

−0.4<br />

−0.5<br />

Maalt<br />

0 0.1 0.2 0.3 0.4 0.5<br />

Tid [s]<br />

0.6 0.7 0.8 0.9<br />

Figur G.2: Måledata for verifikation <strong>af</strong> bodymodellen.


Operatør: Alex<br />

APPENDIKS H<br />

Målerapport for verifikation <strong>af</strong> samlet motor, gear og<br />

Adresse: Frederiks Bajer Vej 7C, 9220 <strong>Aalborg</strong> Ø<br />

Lokale: UAV-lab<br />

Dato: 16.11.07<br />

<strong>rotor</strong>-model<br />

Måleobjekt: RS-545SH-5018 PM Motor koblet sammen med <strong>rotor</strong>en på DraganFly X-Pro via et<br />

1:10 tandremsgear<br />

H.1 Formål<br />

Den samlede motor, gear og <strong>rotor</strong>-model virker udelukkende på et teoretisk grundlag. Det er således<br />

nødvendigt at verificere i hvilken grad modellen passer overens med virkeligheden. Dette gøres ved<br />

at sammenholde modellens respons til et givet signal med motorens respons. Ligner disse hinanden<br />

antyder det at modellen er korrekt. Endvidere er modellen baseret på motorparametre fundet udfra<br />

målinger foretaget <strong>af</strong> tidligere projektgrupper. Eftersom disse er forbundet med en vis usikkerhed er<br />

formålet endvidere at kunne vurdere hvorvidt disse passer med motoren.<br />

A31


H.2 Apparaturliste<br />

H.3 Måleopstilling<br />

Producent Model Apparattype AAU nr. Kommentar<br />

Tektronix TDS 2012 B Ocsilloskop 64587<br />

Oltronix C 28 - 20 R Strømforsyning 07390<br />

LEM HEME PR 30 DC-Strømprobe 55710 Er lånt <strong>af</strong> I14<br />

Tabel H.1: Apparaturliste<br />

Figur H.1 viser måleopstillingen for verifikationen. Motoren kobles til en strømforsyningen og spæn-<br />

dingen logges vha. et oscilloskop. Strømmen logges vha. en DC-strømprobe koblet til ocsilloskopet.<br />

Den opsamlede data lagres på et flytbart medie til videre analyse.<br />

Strømforsyning<br />

12 V<br />

Osciloskop<br />

Strømprobe<br />

Datalager<br />

Motor<br />

SET FRA OVEN<br />

Rem<br />

Rotor m. Gear<br />

Figur H.1: Forsøgopstillingen til verifikation <strong>af</strong> den samlet motor,gear og ro-<br />

tor model<br />

H.4 Målemetode<br />

For at verificere modellen vælges det at påtrykke et enhedsstep på motoren og sammenligne respon-<br />

set med resultatet fra SIMULINK modellen. I stedet for at måle hastigheden på <strong>rotor</strong>en, vælges det<br />

at måle armaturstrømmmen, vha. en strømprobe. Hvilket kan gøres mere præcist. Dette kan gøres<br />

eftersom der er et lineært sammenhæng mellem omdrejningshastigheden og strømmen.<br />

Enhedssteppet er valgt til at gå fra 0 til 3,5 V. Dette skyldes at strømforsyningen er begrænset til<br />

strømme større end 10A. Et 3,5 V step sikrer at strømmen ikke stiger herover. Desuden mindskes<br />

beslastningen på ledet hvor <strong>rotor</strong>erne fæstner til gearet betydentligt, hvilket har vist sig at være et<br />

problem ved større enhedsstep.<br />

A32


Fremgangsmåden for forsøget er som følger:<br />

1. Måleopstillingen opstilles som illustreret.<br />

2. Oscilloskopet indstilles til at trigge på den stigende spændingsflanke.<br />

3. Motoren påtrykkes et 3,5 V enhedsskridt gående fra 0 til 3,5 V ved at tænde for strømforsy-<br />

ningen.<br />

4. Data fra oscilloskopet gemmes til senere analyse.<br />

H.5 Måledata og bearbejdning <strong>af</strong> data<br />

Måledata kan findes i bilag under /matlab/MotorModel/MotorGearRotorVerifikation/<br />

og er plottet vha. verifikation.m<br />

Current [A]<br />

16<br />

14<br />

12<br />

10<br />

8<br />

6<br />

4<br />

2<br />

0<br />

0 0.2 0.4 0.6<br />

Time [s]<br />

0.8 1<br />

Figur H.2: Resultat <strong>af</strong> måling<br />

Measured<br />

Simulated<br />

Som det fremgår <strong>af</strong> Figur H.2 passer hændelsesforløbet i to gr<strong>af</strong>er godt sammen; først stiger strøm-<br />

men, med en stejl flanke, for derefter at falde ned på en fast DC-værdi. Modellen beskriver således<br />

den dynamiske udvikling <strong>af</strong> strømmen fint. Men som det også fremgår tydeligt <strong>af</strong> Figur H.2 så er<br />

den simulerede peakstrøm cirka en faktor 2 større end den målte. Endvidere er indsvingningstiden<br />

for modellen også meget hurtigere og DC-værdien er højere end den målte. Benyttes parametre-<br />

ne fra den forrige projektgruppes rapport passer resultatet <strong>af</strong> modellen således dårligt overens med<br />

responset fra motoren.<br />

A33


Operatør: Alex B og Brian M<br />

Adresse: Fredriks Bajers Vej 7C<br />

Lokale: AUV lab<br />

Dato: 19.11.07<br />

Måleobjekt: Frontmotor på DraganFly X-Pro<br />

I.1 Formål<br />

APPENDIKS I<br />

Målerapport for måling <strong>af</strong> armaturmodestand<br />

Verificeringen <strong>af</strong> Simulink motormodellen viste en peak-strøm omkring 2 gange højere end forven-<br />

tet. Ses der på den elektriske motormodel fremgår det at peakstrømmen hovedsageligt <strong>af</strong>hænger <strong>af</strong><br />

armaturmodstanden. Armaturmodstanden brugt i modellen er taget fra en tidligere projektgruppes<br />

arbejde og da målingen her<strong>af</strong> kun er sparsomt beskrevet, er det ikke til at vurdere om overshootet<br />

skyldes deres måling. Det ses således nødvendigt at gentage målingen <strong>af</strong> armaturmodstanden.<br />

I.2 Apparaturliste<br />

A34<br />

Producent Model Apparattype AAU nr. Kommentar<br />

Oltronix C 28 - 20 R Strømforsyning 07390<br />

Fluke 189 True RMS Multimeter 60763 Strøm-mode<br />

Fluke 189 True RMS Multimeter 60768 Spænding-mode<br />

Tabel I.1: Apparaturliste.


I.3 Måleopstilling<br />

Strømforsyningen tilkobles motoren og strømmen og spændingen måles vha. multimetrene. For at<br />

eliminere back-emf fra motoren fikseres motoraksen således der kan ses bort fra denne.<br />

Figur I.1: Forsøgopstillingen til verifikation <strong>af</strong> armaturmodstanden i motoren<br />

I.4 Målemetode<br />

Motoren fikseres (ω = 0) for at undgå back-emf. Herefter steppes spændingen i skridt <strong>af</strong> 0,5 V<br />

og strømmen noteres. Plottet strømmen i forhold til spændingen vil hældningen mellem punkterne i<br />

følge Ohm’s lov være et udtryk for armaturmodstanden.<br />

I.5 Teori<br />

Figur I.2 viser kredsløbsækvivalentet for måleopstillingen. Fluke-modstanden R FLUKE er ifølge data-<br />

bladet for multimetret 40 mΩ. Da armaturmodstanden Ra tidligere er blevet fundet til omkring 208<br />

mΩ, vil der ske en spændingdelingen mellem de to modstande. Armaturspændingen kan dermed<br />

ikke antages at være lig forsyningsspændingen Vs.<br />

A35


Vs<br />

+ −<br />

Fluke 189<br />

V_fluke<br />

V<br />

R_fluke<br />

Figur I.2: Kredsløbsdiagram for opstillingen, med ækvivalentdiagrammet for<br />

Fluke multimeteret.<br />

Armaturspændingen kan findes ved at trække spændingsfaldet over Fluke-modstanden fra forsy-<br />

ningsspændingen, hvilket kan udtrykkes som følger:<br />

Va = Vs − V FLUKE = Vs − R FLUKE I FLUKE<br />

For at tage højde for modstanden i multimetret skal ovenstående formel derfor benyttes, når arma-<br />

turspændingen skal udregnes. Armaturmodstanden kan nu findes vha. Ohm’s lov:<br />

A36<br />

Ra = Va<br />

I FLUKE<br />

Ra<br />

+<br />

−<br />

Va<br />

(I.1)<br />

(I.2)


I.5.1 Måledata<br />

Måledataen for forsøget er givet i Tabel I.2.<br />

Forsyningsspænding [V] Strøm [A] Armaturspænding [V]<br />

0,50 0,589 0,48<br />

1,02 2,06 0,9376<br />

1,52 2,6 1,4160<br />

2,05 4,17 1,8932<br />

2,53 4,68 2,3428<br />

3,01 6,00 2,7700<br />

3,6 7,71 3,2916<br />

4,13 8,63 3,7848<br />

Tabel I.2: Forsøgsdata inkl. armaturspændingen beregnet med Formel I.1<br />

Figur I.3 viser strømmen som funktion <strong>af</strong> spændingen. Den stiblede linje angiver 1.ordens approksi-<br />

mationen til målepunkterne. Hældningen her<strong>af</strong>, og dermed armaturmodstanden, er som det fremgår<br />

410 mΩ<br />

Offset’et skyldes de to spændingfald i kullene i motoren.<br />

Armature voltage [V]<br />

4.5<br />

4<br />

3.5<br />

3<br />

2.5<br />

2<br />

1.5<br />

1<br />

0.5<br />

V a (I a ) = 0.4097 I a + 0.2485<br />

0<br />

0 1 2 3 4 5 6 7 8 9 10<br />

Armature current [A]<br />

Figur I.3: Viser måleresultaterne og en 1.ordens approksimation fundet i<br />

MATLAB.<br />

De samlede beregninger kan findes som bilag på cd’en under /matlab/MotorModel/<br />

ArmatureResistans.m<br />

A37


APPENDIKS J<br />

AvrX<br />

I det følgende vil brugen <strong>af</strong> AvrX kernen blive beskrevet. Kernen er skrevet <strong>af</strong> Larry Barrello der<br />

også har den liggende frit tilgængeligt på hans hjemmeside [Barello, 2007]. Kernen er skrevet i as-<br />

sembler og der er lavet et interface til programmeringssproget C ved hjælp <strong>af</strong> en header-fil. Det er en<br />

realtidskerne der er preemptiv, hvilket vil sige at den skifter opgave med et fast interval, uden hen-<br />

syntagen til den kørende opgaves status. Kernen kører desuden med 16 faste prioriteter, hvormed det<br />

er muligt at sikre at nogle opgaver får processortid hurtigere end andre. Hvis kernen har flere opgaver<br />

med samme prioritet køres der round-robin imellem disse, således at disse skiftes om processortiden<br />

til rådighed.<br />

AvrX indeholder funktioner til synkronisering og blokering <strong>af</strong> tråde. Dette er implementeret ved<br />

hjælp <strong>af</strong> sem<strong>af</strong>orer og beskedkøer. Således kan en opgave sætte en sem<strong>af</strong>or til at beskytte en variabel<br />

mens opgaven arbejder på denne, hvorved alle andre opgaver der forsøger at tilgå denne variabel<br />

bliver blokeret i dette, såfremt de er programmeret til også at benytte denne sem<strong>af</strong>or. Beskedkøer er<br />

køer hvor tråde kan placere beskeder, hvorefter andre tråde kan hente dem. Hvis en tråd forsøger at<br />

hente en besked, uden at der er nogen til rådighed, vil tråden blive fjernet fra aktiv-køen, og først<br />

blive placeret der igen når der er en opgave der placerer en besked i besked-køen.<br />

AvrX kan benytte sig <strong>af</strong> en timer i avr-kredsene til at skabe interrupts med et fast interval eller<br />

implementeres ved hjælp <strong>af</strong> eksterne interrupts. Ved hvert trådskift skal alle registre og lignende<br />

(kaldes trådens kontekst) gemmes på trådens stak, således at de senere kan genetableres og tråden<br />

kan køre videre. Derefter skal bestemmes hvilken tråd der skal køre og denne tråds kontekst skal<br />

hentes fra den tilhørende stak, hvorefter tråden kan begynde at køre. Da processoren har 32 registre<br />

og yderligere registre også skal gemmes fylder kontekster til sådanne tråde minimum 35 bytes, og<br />

der skal derfor gøres plads til dette i hukommelsen.<br />

A38


J.1 Opsætning <strong>af</strong> kernen<br />

AvrX kan hentes på programmørernes hjemmeside som en samling kildekode. Denne samling kil-<br />

dekode er modulært opbygget, således at funktioner i kernen der ikke bliver benyttet i systemet ikke<br />

bliver kompileret med, og derfor ikke optager plads på processoren.<br />

For at benytte AvrX skal header-filen til kernen (avrx.h) først og fremmest inkluderes i den kode der<br />

ønskes kørt på processoren.<br />

Dernæst skal kernestakken placeres et sted i hukommelsen, således at kernen, har noget hukommelse<br />

til sin disposition. Det er desuden også denne stak der benyttes ved interrupts hvor funktionerne<br />

IntProlog() og Epilog() benyttes. Opsætning <strong>af</strong> kernestakken gøres ved hjælp <strong>af</strong> følgende<br />

kommando:<br />

1 AvrXSetKernelStack ( char ∗ newstack ) ;<br />

Hvis funktionen kaldes med 0 istedet for en pointer til et sted i adresserummet vil kernen blot benytte<br />

samme stak som benyttes når funktionen bliver kaldt (dette vil oftest være i main()).<br />

Det skal desuden vælges hvordan scheduleren i kernen skal implementeres. Som sagt kan kernen<br />

sættes op til at benytte en intern timer i processoren, eller sættes op til at benytte et eksternt interrupt.<br />

Her antages at det vælges at koble kernen op imod timer0, således at denne skal sættes op til at give<br />

interrupts med et givent interval, og der skal defineres en interrupt-service-rutine til denne. Ønskes<br />

det i stedet at koble kernen op imod en anden timer kan dette gøres ved at sætte denne timer op på<br />

samme måde, og bare definere samme indhold i dennes interrupt-service-rutine. Ønskes det i stedet<br />

at benytte eksterne interrupts til at styre scheduleren kan dette gøres ved at placere kernens indhold<br />

i det eksterne interrupts service-rutine.<br />

En interrupt-funktion skal defineres, således at den bliver kørt hver gang timer0 giver et overflow-<br />

interrupt. I denne interrupt-funktion skal timer0-counteren sættes tilbage til den oprindelige værdi,<br />

således at næste interrupt kommer med samme interval. En sådan interrupt-funktion kan defineres<br />

således:<br />

1 AVRX_SIGINT (SIG_OVERFLOW0) / / I n t e r r u p t −s e r v i c e −r u t i n e t i l t i m e r 0<br />

2 {<br />

3 I n t P r o l o g ( ) ; / / Afbryd den kørende t r å d<br />

4 TCNT0 = TCNT0_INIT ; / / g e n i n i t i a l i s e r t i m e r 0 t æ l l e r e n<br />

5 AvrXTimerHandler ( ) ; / / Kør t i m e r −h a n d l e r e n , s å l e d e s a t<br />

t i m e r −k ø e r n e b l i v e r t a l t ned<br />

6 E p i l o g ( ) ; / / Bestem h v i l k e n t r å d d e r nu s k a l køre ud f r a<br />

7 }<br />

p r i o r i t e t og round−r o b i n<br />

Første linie i ovenstående kode benytter en AvrX-makro til at definere en funktion og fortælle pro-<br />

cessoren at det er denne funktion der skal køres ved timer0-overflow interrupts. Dernæst defineres<br />

indholdet <strong>af</strong> interrupt-funktionen, hvor konteksten til kørende tråd har gang i gemmes på dennes stak<br />

(sker i IntProlog). Herefter geninitialiseres timer0-tælleren således at næste interrupt kommer<br />

efter det rigtige stykke tid. Til sidst kaldes funktionen Epilog der vurderer hvilken tråd der skal<br />

køre herefter, og henter dennes kontekst frem fra den tilhørende stak, hvorefter denne tråd for lov at<br />

A39


eksekvere kode.<br />

Til sidst skal timer0 sættes op til at skabe interrupts med et fast interval. Dette gøres ved hjælp <strong>af</strong><br />

følgende linier kode der skal placeres i main-rutinen således at de bliver kørt når processoren starter:<br />

1 MCUCR = _BV( SE ) ; / / m u l i g g ø r p r o c e s s o r e n s sleepmode<br />

2 TCNT0 = TCNT0_INIT ; / / I n i t i a l i s e r t i m e r 0 t æ l l e r e n<br />

3 TCCR0 = TMC8_CK256 ; / / Sæt t i m e r 0 t i l a t b l i v e t a l t op hver 2 5 6 .<br />

p r o c e s s o r c l o c k<br />

4 TIMSK = _BV( TOIE0 ) ; / / T i l l a d i n t e r r u p t s f r a t i m e r 0<br />

Første linje i denne kode sætter bit SE i control registret på processoren hvilket gør at processoren<br />

bliver i stand til at gå i standby, hvis den bliver bedt om det (kernen benytter dette hvis der ikke er<br />

flere tråde tilbage i aktiv-køen). Anden linje har den funktion at den initialiserer timer0-tælleren til<br />

værdien TCNT0_INIT. Denne værdi kan beregnes således såfremt divideren på timer0 er sat til 256<br />

som med ovenstående kode:<br />

Hvor<br />

TCNT0_INIT = 255 −<br />

TCNT0_INIT er konstanten der skal lægges ind i TCNT0<br />

CPUCLK<br />

256 · TICKRATE<br />

for at opnå den rigtige opgaveskiftfrekvens [-]<br />

CPUCLK er clockfrekvensen på processoren [Hz]<br />

TICKRATE er frekvensen hvormed der skal ske opgaveskift [Hz]<br />

Dog skal det nævnes til formel J.1 kun kan benyttes såfremt resultatet bliver positivt, da en negativ<br />

værdi i tælleren ikke har den ønskede funktion. Desuden skal TCNT0_INIT defineres som en makro<br />

således at den både kan benyttes i rutinen til timer0-overflow interrupts og i main-rutinen, uden at<br />

beregningen skal udføres på processoren.<br />

Tredje linje sætter to bits i kontrol registret til timer0 på processoren. Disse bits sørger for en divider<br />

på 256 på clockfrekvensen på processoren, således at timer-counteren kun bliver talt op en gang per<br />

256 clockpulser. Fjerde linje tillader overflow-interrupts fra timer0 mens andre typer interrupts fra<br />

timer0 bliver blokeret.<br />

Når dette er gjort er størstedelen <strong>af</strong> kernen sat op, og tilbage er derfor kun at starte de rigtige tråde.<br />

Dette gøres ved hjælp <strong>af</strong> følgende funktionskald:<br />

1 AvrXRunTask (TCB( t a s k _ n a v n ) ) ;<br />

Hvor TCB() er en prekompiler macro der finder den rigtige TaskControlBlock (datastruktur der<br />

indeholder information om en tråd). AvrXRunTask() placerer blot information om tråden i aktiv-<br />

køen, således at den kommer i betragtning når der skiftes tråd.<br />

Til sidst er blot tilbage at køre funktionen Epilog() der sørger for at starte kernen op og starte<br />

med at udføre kode til første tråd.<br />

A40<br />

(J.1)


J.1.1 Opsætning <strong>af</strong> tråde<br />

En tråd oprettes ved at gøre brug <strong>af</strong> prekompilermakroen AVRX_GCC_TASKDEF(tråd_navn,<br />

stak_str, prioritet). Denne makro skal benyttes i stedet for et funktionshovede til tråden.<br />

Stak_str. i dette makrokald skal ikke inkludere de 35 bytes til at gemme konteksten på stakken<br />

ved tråd-skift, da dette bliver lagt oveni i makroen.<br />

Andre metoder til oprettelse <strong>af</strong> tråde er også tilgængelige, men da de er meget specifikke i deres brug<br />

vil de ikke blive beskrevet yderligere her. Det skal dog gøres at en tråd ikke er startet før funktionen<br />

AvrXRunTask(TCB(tråd_navn)) er kørt.<br />

J.2 Benyttelse <strong>af</strong> kernen<br />

I det følgende vil yderligere funktioner i kernen blive beskrevet. Disse funktioner er ikke nødvendige<br />

for at kernen fungerer, og for at flere opgaver bliver udført sideløbende, men er i stedet tilgængelige<br />

for at sikre en smertefri tilgang til fælles variable og lignende. Desuden kan de benyttes til at syn-<br />

kronisere to tråde med hinanden, således at en tråd vil vente på at en anden er nået et bestemt punkt<br />

i sin kodeeksekvering<br />

J.2.1 Sem<strong>af</strong>orer<br />

Sem<strong>af</strong>orer er objekter der kun kan ejes <strong>af</strong> en tråd <strong>af</strong> gangen. Hvis andre tråde forsøger at opnå<br />

ejerskab <strong>af</strong> en sem<strong>af</strong>or mens den er ejet <strong>af</strong> en anden tråd vil den blive placeret i en kø tilknyttet<br />

sem<strong>af</strong>oren og først komme tilbage i aktiv-køen når sem<strong>af</strong>oren igen er fri, og den derfor kan opnå<br />

ejerskab. Op til flere tråde kan på denne måde blive sat i kø til at opnå ejerskab <strong>af</strong> en enkelt sem<strong>af</strong>or.<br />

En sem<strong>af</strong>or har datatypen Mutex og skal oprettes i et scope hvor alle trådene kan tilgå denne (dvs.<br />

som global variabel).<br />

Funktionskaldende der kan benyttes til sem<strong>af</strong>orer er som følger:<br />

void AvrXWaitSemaphore(pMutex) forsøger at opnå ejerskab <strong>af</strong> sem<strong>af</strong>oren adressen pMu-<br />

tex henviser til. Hvis ikke dette er muligt (en anden tråd ejer den i forvejen) vil tråden der<br />

kalder funktionen blive fjernet fra aktiv-køen og indsat i sem<strong>af</strong>or-køen. Først når det er muligt<br />

at opnå ejerskab <strong>af</strong> sem<strong>af</strong>oren vil tråden blive genindsat i aktiv-køen og vil derved komme i<br />

betragtning næste gang der skiftes tråd.<br />

void AvrXSetSemaphore(pMutex) skal benyttes til at frigive en sem<strong>af</strong>or, dvs. give ejerska-<br />

bet <strong>af</strong> sem<strong>af</strong>oren til den næste i køen. En sem<strong>af</strong>or kan godt frigives <strong>af</strong> andre tråde end den der<br />

har ejerskabet, og således kan de også benyttes til at blokere en tråd indtil en anden har nået et<br />

vist punkt i sin eksekvering.<br />

Mutex AvrXTestSemaphore(pMutex) Denne funktion kan benyttes til at teste status på<br />

en sem<strong>af</strong>or. Funktionen sender en Mutex tilbage til kalderen. Hvis denne Mutex er lig<br />

SEM_WAIT er der tråde der står i kø ved sem<strong>af</strong>oren.<br />

A41


void AvrXResetSemaphore(pMutex fjerner alle tråde fra sem<strong>af</strong>or-køen og fjerner alle ejer-<br />

skaber, således at sem<strong>af</strong>oren opnår samme tilstand som da den lige var oprettet.<br />

J.2.2 Timer-køer<br />

Den sidste nævneværdige kø-type der er implementeret i AvrX er timer-køer der giver mulighed for<br />

at sætte opgaver i kø i et vist antal trådskift. En timer-kø oprettes ved først at oprette en datastruktur<br />

<strong>af</strong> datatypen TimerControlBlock og dernæst lade denne tælle ned fra en given værdi, hvilket<br />

gøres således:<br />

1 AvrXStartTimer (& t i m e r −kø , n _ t r å d _ s k i f t )<br />

Denne vil dernæst tælle ned hver gang interrupt-rutinen bliver kørt, og tråde kan vente på at timeren<br />

bliver talt ned til nul, ved at benytte denne som en sem<strong>af</strong>or med følgende funktionskald:<br />

1 AvrXWaitTimer(& t i m e r −kø ) ;<br />

Dette funktionskald fungerer fuldstændig som en sem<strong>af</strong>or, således at trådene der benytter funktions-<br />

kaldet bliver placeret i timer-køen og bliver først ført tilbage til aktiv-køen når timeren har talt ned<br />

til 0.<br />

Hvis det kun ønskes at parkere en enkelt tråd i en timer-kø kan dette gøres ved hjælp <strong>af</strong> funktions-<br />

kaldet:<br />

1 AvrXDelay(& t i m e r −kø , n _ t r å d _ s k i f t ) ;<br />

Det skal dog nævnes at timer-køer kun kan benyttes til en nedtælling <strong>af</strong> gangen, hvorfor det er<br />

nødvendigt at lave flere datastrukturer <strong>af</strong> typen TimerControlBlock hvis der ønskes forskelligt<br />

delay på forskellige tråde.<br />

A42


K.1 Main.c<br />

1 a / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗<br />

∗ /<br />

2 / ∗ ∗ ∗ ∗ /<br />

3 / ∗ ∗ Main . c− f i l t i l gruppe 505 ’ s p r o j e k t 2007 ∗ ∗ /<br />

4 / ∗ ∗ Ved <strong>Aalborg</strong> U n i v e r s i t e t ∗ ∗ /<br />

5 / ∗ ∗ ∗ ∗ /<br />

6 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

7<br />

10<br />

11<br />

12<br />

8 # i n c l u d e " Main . h "<br />

9 # i n c l u d e " i n c l u d e . h "<br />

13 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

14 / ∗ ∗∗∗∗∗∗∗∗∗ D e f i n a t i o n a f Timer0 i n t e r r u p t −r u t i n e n ∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

15 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

16<br />

17 AVRX_SIGINT (SIG_OVERFLOW0)<br />

18 {<br />

19 I n t P r o l o g ( ) ; / / S k i f t t i l kerne−s t a k k e n<br />

20 TCNT0 = TCNT0_INIT ; / / G e n i n i t i a l i s a t i o n a f timer0−<br />

t æ l l e r e n ( lægges t i l r e g i s t r e t f o r a t t a g e t i l h ø j d e<br />

f o r t i d e n b r u g t på I n t P r o l o g ( )<br />

21 AvrXTimerHandler ( ) ; / / S t a r t t i m e r −kø k o n t r o l l e r e n<br />

22 E p i l o g ( ) ; / / Undersøg h v i l k e n t r å d d e r nu<br />

s k a l køre , og s t a r t denne<br />

APPENDIKS K<br />

Kode til processor<br />

A43


23 }<br />

24<br />

25<br />

26 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

27 / ∗ ∗∗∗∗∗∗∗∗∗ D e f i n a t i o n a f Main ∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

28 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

29<br />

30 i n t main ( void )<br />

31 {<br />

32 AvrXSetKernelStack ( 0 ) ;<br />

33 MCUCR = 1


14 # i n c l u d e < a v r / i n t e r r u p t . h><br />

15 # i n c l u d e " avrx . h "<br />

16 # i n c l u d e " s e r i a l i o . h "<br />

17 # i n c l u d e " Hardware . h "<br />

18 # i n c l u d e < s t d i n t . h><br />

19 # i n c l u d e < c t y p e . h><br />

20 # i n c l u d e < s t d i o . h><br />

21 # i n c l u d e <br />

22 # i n c l u d e " A v r X S e r i a l I o . h "<br />

23<br />

24 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

25 / ∗ ∗∗∗∗∗∗∗∗∗ Opsætning a f CPU−s p e c i f i k k e k o n s t a n t e r ∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

26 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

27<br />

28 # d e f i n e CPUCLK 16000000L / / CPU ’ en k ø r e r 16 MHz<br />

29 # d e f i n e TICKRATE 2000 / / Der s k a l ske t r å d s k i f t med 2 kHz<br />

30<br />

31 # d e f i n e TCNT0_INIT (0 xFF−CPUCLK/ 2 5 6 / TICKRATE) / / Beregning a f<br />

32<br />

timer0−c o u n t e r i n i t i a l i s e r i n g s værdi<br />

33 # d e f i n e TMC8_CK256 ((1 <


60<br />

61<br />

62 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

63 / ∗ ∗∗∗∗∗∗∗∗∗ Globale v a r i a b l e ∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

64 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

65<br />

66 / / G l o b a l e v a r i a b l e t i l r o t a t i o n s s e n s o r e n e s o u t p u t<br />

67 T i m e r C o n t r o l B l o c k t i m e r 1 ;<br />

68<br />

69 double m o t o r _ s e n s o r _ h ;<br />

70 double m o t o r _ s e n s o r _ v ;<br />

71<br />

72 double m o t o r _ r e f _ h ;<br />

73 double m o t o r _ r e f _ v ;<br />

74<br />

75 Mutex motor_sem<strong>af</strong>or_v ;<br />

76 Mutex motor_sem<strong>af</strong>or_h ;<br />

77<br />

78 double v i n k e l _ r e f _ x ;<br />

79<br />

80 double s p e e d _ r e f ;<br />

81<br />

82 double v i n k e l s e n s o r _ x ;<br />

83 double maaling ;<br />

84<br />

85 double t e s t ;<br />

86<br />

87 Mutex Rx1Ready , Tx1Ready ; / / T i l UART1<br />

88 Mutex sem<strong>af</strong>or1 ;<br />

89 FILE ∗u1 ;<br />

K.3 rotationssensor.c<br />

1 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

2 / ∗ ∗ ∗ ∗ /<br />

3 / ∗ ∗ Kode t i l b e r e g n i n g a f h a s t i g h e d e n ∗ ∗ /<br />

4 / ∗ ∗ på de f i r e motorer ved h j æ l p a f ouput ∗ ∗ /<br />

5 / ∗ ∗ f r a de f i r e r o t a t i o n s s e n s o r e ∗ ∗ /<br />

6 / ∗ ∗ ∗ ∗ /<br />

7 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

8<br />

9 # i n c l u d e " Main . h "<br />

10<br />

11 / / o v e r f l o w c o u n t e r e t i l h ver a f de f i r e r o t a t i o n s s e n s o r e<br />

12 u i n t 8 _ t v e n s t r e _ c o u n t e r = 0 , h o j r e _ c o u n t e r = 0 ;<br />

13<br />

14 / / V a r i a b l e t i l a t huske de gamle t i m e r v æ r d i e r i<br />

15<br />

16 u i n t 8 _ t h o j r e _ t i m e r _ c o u n t e r _ o l d = 0 ;<br />

17 u i n t 8 _ t v e n s t r e _ t i m e r _ c o u n t e r _ o l d = 0 ;<br />

18<br />

A46


19 u i n t 8 _ t t i m e r _ c o u n t e r _ h ;<br />

20 u i n t 8 _ t o v e r f l o w s _ h ;<br />

21 Mutex sem<strong>af</strong>or_h ;<br />

22<br />

23 u i n t 8 _ t t i m e r _ c o u n t e r _ v ;<br />

24 u i n t 8 _ t o v e r f l o w s _ v ;<br />

25 Mutex sem<strong>af</strong>or_v ;<br />

26<br />

27 AVRX_SIGINT ( TIMER2_OVF_vect ) / / Kør d e t t e ved timer2−o v e r f l o w<br />

28 {<br />

29 I n t P r o l o g ( ) ; / / S k i f t t i l k e r n e s t a k k e n , og gem t r å d e n s<br />

30<br />

31<br />

r e g i s t r e<br />

32 / / Tæl a l l e c o u n t e r e en op , f o r s å l e d e s a t<br />

s i g n a l e r e a t endnu e t t i m e r 2 _ o v e r f l o w e r s k e t<br />

33 i f ( h o j r e _ c o u n t e r != OVERFLOW_LIMIT) { / / Hvis<br />

h ø j r e motor i k k e s t å r s t i l l e<br />

34 h o j r e _ c o u n t e r ++; / / t æ l da e t o v e r f l o w op<br />

35 }<br />

36 e l s e { / / Hvis motoren s t å r s t i l l e<br />

37 m o t o r _ s e n s o r _ h = 0 ; / / Da sæt h a s t i g h e d e n<br />

38 }<br />

t i l 0<br />

39 i f ( v e n s t r e _ c o u n t e r != OVERFLOW_LIMIT) { / / Hvis<br />

v e n s t r e motor i k k e s t å r s t i l l e<br />

40 v e n s t r e _ c o u n t e r ++; / / t æ l da e t o v e r f l o w op<br />

41 }<br />

42 e l s e { / / Hvis motoren s t å r s t i l l e<br />

43 m o t o r _ s e n s o r _ v = 0 ; / / Da sæt h a s t i g h e d e n<br />

44 }<br />

45<br />

t i l 0<br />

46 E p i l o g ( ) ; / / S k i f t t i l ny t r å d<br />

47 }<br />

48<br />

49 AVRX_SIGINT ( INT6_vect ) / / Kør d e t t e ved i n t e r r u p t f r a h ø j r e<br />

50 {<br />

r o t a t i o n s s e n s o r<br />

51 I n t P r o l o g ( ) ; / / S k i f t t i l k e r n e s t a k k e n , og gem t r å d e n s<br />

52<br />

r e g i s t r e<br />

53 t i m e r _ c o u n t e r _ h = TIMER2_COUNTER ; / / Gem t i m e r 2 t æ l l e r e n<br />

54 o v e r f l o w s _ h = h o j r e _ c o u n t e r −1; / / d e r s k a l r e g n e s med e t<br />

o v e r f l o w mindre end t a l t<br />

55 h o j r e _ c o u n t e r = 0 ; / / h ø j r e c o u n t e r s k a l n u l s t i l l e s , så d e r<br />

56<br />

i g e n b e r e g n e s o v e r f l o w s<br />

57 EIMSK &= ~( 1


61 E p i l o g ( ) ; / / S k i f t t i l ny t r å d<br />

62 }<br />

63<br />

64 AVRX_GCC_TASKDEF( r o t a t i o n _ h , 80 , 1) / / Tråd t i l h ø j r e<br />

65 {<br />

r o t a t i o n s s e n s o r<br />

66 while ( 1 )<br />

67 {<br />

68 AvrXWaitSemaphore(& sem<strong>af</strong>or_h ) ; / / Vent på a t d e r<br />

h a r v æ r e t i n t e r r u p t<br />

69 i f ( o v e r f l o w s _ v != 254) {<br />

70 i n t t i m e r _ c o u n t e r s = t i m e r _ c o u n t e r _ h +<br />

71<br />

72 double t i d ;<br />

(256 − h o j r e _ t i m e r _ c o u n t e r _ o l d ) ;<br />

73 t i d = o v e r f l o w s _ h ∗ OVERFLOW_TIME_TIMER2 ;<br />

/ / d e r g å r 0.2048∗10 m i l l i s e k u n d e r<br />

mellem h v e r t o v e r f l o w<br />

74 t i d += t i m e r _ c o u n t e r s ∗<br />

TIMER_STEP_TIME_TIMER2 ; / / d e r<br />

g å r 0.008∗10 m i l l i s e k u n d e r på h v e r t<br />

t i m e r s t e p ( n å r d i v i d e r e t med 32)<br />

75 double h a s t i g h e d = M_PI / t i d ; / / (2∗ p i )<br />

/ ( 2 ∗ t i d )<br />

76 i f ( h a s t i g h e d < MAX_HASTIGHED) { / / Hvis<br />

h a s t i g h e d e n e r mindre end den<br />

maksimalt t i l l a d t e<br />

77 m o t o r _ s e n s o r _ h = h a s t i g h e d ;<br />

78 }<br />

79 }<br />

80 / / Denne værdi gemmes t i l s e n e r e brug<br />

81 h o j r e _ t i m e r _ c o u n t e r _ o l d = t i m e r _ c o u n t e r _ h ;<br />

82<br />

83 T i m e r C o n t r o l B l o c k t i m e r ;<br />

84 AvrXDelay(& t i m e r , INTERRUPT_WAIT) ; / / Vent l i d t<br />

med a t e n a b l e n y t i n t e r r u p t<br />

85 EIMSK | = ( 1


97 EIMSK &= ~( 1


5 # d e f i n e START_DELAY 30<br />

6<br />

7 # d e f i n e E0 0.09223 / / k o n s t a n t g a n g e t med e [ n ] ;<br />

8 # d e f i n e E1 −0.07175 / / k o n s t a n t g a n g e t med e [ n −1];<br />

9 # d e f i n e VA1 1 / / k o n s t a n t g a n g e t med Va [ n −1];<br />

10<br />

11 # d e f i n e MOTOR_REGULATOR_TID 72 / / 36 m i l l i s e k u n d e r ∗ 2<br />

12<br />

13 AVRX_GCC_TASKDEF( motor_h , 80 , 3) / / Højre m o t o r r e g u l a t o r<br />

14 {<br />

15 T i m e r C o n t r o l B l o c k m o t o r _ t i m e r ;<br />

16 / / S t a r t s t i l l e og r o l i g t op t i l h a l v duty−c y c l e<br />

17 i n t i =0;<br />

18 double o l d _ i n p u t =0;<br />

19 double o u t p u t = 5 ;<br />

20 while ( i 10 da max<br />

speed uden windup<br />

38 PWM_H = PWM_TOP;<br />

39 o u t p u t = 1 0 ;<br />

40 }<br />

41 e l s e { / / E l l e r s sæt b l o t pwm t i l ø n s k e t værdi<br />

42 PWM_H = o u t p u t ∗ VA_konst ;<br />

43 }<br />

44 o l d _ i n p u t = i n p u t ;<br />

45 }<br />

46<br />

47 }<br />

48<br />

49 AVRX_GCC_TASKDEF( motor_v , 80 , 3)<br />

50 {<br />

A50


51 T i m e r C o n t r o l B l o c k m o t o r _ t i m e r ;<br />

52 / / S t a r t s t i l l e og r o l i g t op t i l h a l v duty−c y c l e<br />

53 i n t i =0;<br />

54 double o l d _ i n p u t =0;<br />

55 double o u t p u t = 5 ;<br />

56 while ( i 10 da max<br />

speed uden windup<br />

74 PWM_V = PWM_TOP;<br />

75 o u t p u t = 1 0 ;<br />

76 }<br />

77 e l s e { / / E l l e r s sæt b l o t pwm t i l ø n s k e t værdi<br />

78 PWM_V = o u t p u t ∗ VA_konst ;<br />

79 }<br />

80 o l d _ i n p u t = i n p u t ;<br />

81 }<br />

82<br />

83 }<br />

K.5 vinkel_regulator.c<br />

1 # i n c l u d e " Hardware . h "<br />

2 # d e f i n e X0 2 4 6 . 5 / / k o n s t a n t g a n g e t med x [ n ] ;<br />

3 # d e f i n e X1 −190.5 / / k o n s t a n t g a n g e t med x [ n −1];<br />

4 # d e f i n e T_VINKELREGULATOR 2∗60 / / Kør h v e r t 6 7 . m i l l i s e k u n d<br />

5 # d e f i n e ADC_REF 5 . 0 0<br />

6 # d e f i n e VINKELSENSOR_X_PORT 1 / / Brug ADC<br />

7 # d e f i n e VINKELSENSOR_VOLT_PR_RAD 0.89108<br />

8 # d e f i n e VINKELSENSOR_VOLT_OFFSET 3.376564<br />

9 # d e f i n e VINKELSENSOR_VOLT_MAX 5 . 0 0<br />

A51


10 # d e f i n e VINKELSENSOR_VOLT_MIN 2 . 0 0<br />

11<br />

12 # d e f i n e K_PI 0.01005 / / K o n s t a n t i PI−r e g u l a t o r<br />

13<br />

14 i n t adc_maaling ( ) { / / D e f i n e r f u n k t i o n t i l måling f r a ADC<br />

15<br />

16 ADCSR = ADCSR | ( 1


53 i n t i i ;<br />

54 AvrXWaitSemaphore(& motor_sem<strong>af</strong>or_h ) ; / / Vent på a t<br />

m o t o r c o n t r o l l e r e s t a r t e r<br />

55 AvrXWaitSemaphore(& motor_sem<strong>af</strong>or_v ) ;<br />

56 i n t k = 0 ;<br />

57 while ( 1 ) {<br />

58 AvrXDelay(& v i n k e l _ r e g u l a t o r _ x , T_VINKELREGULATOR) ;<br />

59<br />

60 k = 0 ;<br />

61 maaling = 0 ;<br />

62 double ny_maaling ;<br />

/ / K ¯ r e s med en p e r i o d e på T _ v i n k e l r e g u l a t o r<br />

63 while ( k < 50) { / / midl o ver 50 ADC m å l i n g e r<br />

64 ny_maaling = ( adc_maaling ( ) ∗ ADC_REF) /<br />

65<br />

1024;<br />

66 maaling += ( ny_maaling / 5 0 ) ;<br />

67 k ++;<br />

68 }<br />

69 v i n k e l s e n s o r _ x = ( maaling −<br />

70<br />

VINKELSENSOR_VOLT_OFFSET) /<br />

VINKELSENSOR_VOLT_PR_RAD ; / / Beregn v i n k e l i<br />

r a d i a n e r<br />

71 / / Her begynder v i n k e l r e g u l a t o r e n<br />

72<br />

73 i n p u t _ P I = v i n k e l _ r e f _ x − v i n k e l s e n s o r _ x ;<br />

74 o u t p u t _ P I = K_PI ∗ ( i n p u t _ P I + o l d _ i n p u t _ P I ) +<br />

75<br />

o u t p u t _ P I ;<br />

76 o l d _ i n p u t _ P I = i n p u t _ P I ;<br />

77<br />

78 i n p u t = o u t p u t _ P I − v i n k e l s e n s o r _ x ;<br />

79 o u t p u t = X0∗ i n p u t + X1∗ o l d _ i n p u t ; / / X0 ∗ e [ n ] +<br />

X1 ∗ e [ n−1]<br />

80 i f ( ( s p e e d _ r e f + o u t p u t ) < SATURATION_POINT) { / /<br />

Hvis r e g u l a t o r e n ø n s k e r en m o t o r h a s t i g h e d<br />

under 40 r a d / s<br />

81 o u t p u t = SATURATION_POINT − s p e e d _ r e f ;<br />

82 }<br />

83 i f ( ( s p e e d _ r e f − o u t p u t ) < SATURATION_POINT) {<br />

84 o u t p u t = s p e e d _ r e f −SATURATION_POINT ;<br />

85 }<br />

86<br />

87 m o t o r _ r e f _ h = o u t p u t + s p e e d _ r e f ;<br />

88 m o t o r _ r e f _ v = s p e e d _ r e f − o u t p u t ;<br />

89<br />

90 o l d _ i n p u t = i n p u t ;<br />

91 }<br />

92 }<br />

A53


K.6 rs232.c<br />

1 # i n c l u d e " Main . h "<br />

2<br />

3 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

4 / ∗ ∗∗∗∗∗∗∗∗∗ D e f i n a t i o n a f Kommunikationstråden ∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

5 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /<br />

6 T i m e r C o n t r o l B l o c k r s 2 3 2 _ t i m e r ;<br />

7 AVRX_GCC_TASKDEF( rs232 , 200 , 16)<br />

8 {<br />

9 while ( 1 )<br />

10 {<br />

11 AvrXDelay(& r s 2 3 2 _ t i m e r , 2 0 0 0 ) ; / / Vent e t sekund<br />

12<br />

13 f p r i n t f ( u1 , " h : %f \ n " , m o t o r _ s e n s o r _ h ) ;<br />

14 f p r i n t f ( u1 , "Mh %f \ n " , m o t o r _ r e f _ h ) ;<br />

15 f p r i n t f ( u1 , " v : %f \ n " , m o t o r _ s e n s o r _ v ) ;<br />

16 f p r i n t f ( u1 , "Mv %f \ n " , m o t o r _ r e f _ v ) ;<br />

17 f p r i n t f ( u1 , "V %f \ n " , v i n k e l s e n s o r _ x ∗ ( 1 8 0 / 3 . 1 4 1 6 ) ) ;<br />

18 p u t _ c h a r 1 ( ’ \ n ’ ) ;<br />

19<br />

20 }<br />

21 }<br />

A54

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!