Kandidatarbete, Measurement technique for high speed ywheel

43

Transcript of Kandidatarbete, Measurement technique for high speed ywheel

Kandidatarbete,

Measurement technique for high speed ywheel

Jacob Mattsson / 880523 - 0219, Erik Forslid / 890207 - 4113

12 juni 2014

1

Innehåll

1 Introduktion 41.1 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.1 Del ett: elektromagnetisk kompatibilitet (EMC) och konstruktion avlterlåda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.2 Del två: Mikrokontrollerkortet MultiWii . . . . . . . . . . . . . . . . . 5

2 Teori 72.1 Del ett - Filterlåda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.1.1 Lågpasslter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1.2 Resistans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1.3 Impedans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1.4 Reaktans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.1.5 RC-ltret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.1.6 Överföringsfunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.1.7 Förstärkning i decibel . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.1.8 Amplitudsvar och brytfrekvens . . . . . . . . . . . . . . . . . . . . . . 92.1.9 Fassvar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.1.10 Q-faktor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.1.11 Sallen-Key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.1.12 Val av kondensatorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.1.13 Val av operationsförstärkare . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2 Del två - Mikrokontrollerkortet MultiWii . . . . . . . . . . . . . . . . . . . . . 142.2.1 Arduino, historia och allmänt vetande . . . . . . . . . . . . . . . . . . 142.2.2 MultiWii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.3 Accelerometern - Bosch BMA180 . . . . . . . . . . . . . . . . . . . . . 152.2.4 Gyroskop ITG3205 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.2.5 Magnetometern, Honeywell HMC5883l . . . . . . . . . . . . . . . . . . 162.2.6 Hyperterminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3 Metod 183.1 Del ett - lterlåda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.1.1 Komponentvärden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.1.2 Kopplingsplatta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.1.3 Kretskort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.2 Del två - Mikrokontrollerkortet MultiWii . . . . . . . . . . . . . . . . . . . . . 203.2.1 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2.2 Wire-biblioteket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.2.3 MultiWiins axlar och dataöverföring . . . . . . . . . . . . . . . . . . . 223.2.4 Hisstest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4 Resultat 234.1 Del ett - lterlåda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.1.1 Komponentvärden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.1.2 Kopplingsplatta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.1.3 Kretskortsdesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.1.4 Mätningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2

4.2 Del två - Mikrokontrollerkortet MultiWii . . . . . . . . . . . . . . . . . . . . . 324.2.1 MultiWiins axlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.2.2 Hisstest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

5 Diskussion och slutsats 345.1 Del ett - lterlåda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.2 Del två - Mikrokontrollerkortet MultiWii . . . . . . . . . . . . . . . . . . . . . 34

6 Referenser 35

7 Appendix 367.1 Filterlåda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367.2 Mikrokontrollerkortet MultiWii . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3

1 Introduktion

1.1 Bakgrund

Ett sätt att lagra energi är via s.k. Kinetic energy storage systems (KESS) [1], som utnyttjarett föremåls förmåga att lagra energi genom dess rörelse. Exempel på detta är ett snabbtroterande svänghjul. Svänghjulet omvandlar elektrisk energi till rörelseenergi som sedan, vidbehov, snabbt kan utvinnas genom att kopplas till en generator.

Svänghjulsprojektet vid Uppsala universitet har varit igång i 10 år. Tanken är att det endag ska komma att användas för energieektivisering i framförallt bussar. Olika modeller harframställts så att simuleringar kunnat utföras, för svänghjulsprototyp se Figur 1.

För att minimera hjulets energiförluster roterar det frittmed hjälp av permanentmagneter.Magneterna är monterade så svänghjulet är xerat axiellt. Ett fordons rörelser ger upphovtill att hjulet hela tiden utsätts för olika krafter i olika riktningar vilket kommer att rucka pådess läge. För att kompensera för detta drivs strömmar i permanentmagneterna för att helatiden hålla hjulet vertikalt. Avståndsgivare är därför monterade i botten och på toppen avsvänghjulet som mäter dess position tjugotusen gånger per sekund. Denna information skickassedan till en dator vilken beräknar vilka strömmar till magneterna som ska ökas respektiveminskas och drar därför svänghjulet till eller från sig. Det här projektet behandlar mätningav hjulet positionering och dess rörelser.

Figur 1: Prototyp på ett svänghjul [2].

4

1.2 Syfte

1.2.1 Del ett: elektromagnetisk kompatibilitet (EMC) och konstruktion av l-terlåda

EMC behandlar uppkomsten av oavsiktlig elektromagnetisk energi. Denna påverkan, somuppstår i alla elektriska system, måste tas hänsyn till och behandlas för att minimera riskenför oväntade och oönskade händelser i form av t ex modierade signaler i systemet.

Positionsgivarnas signaler till datorn kan störas och manipuleras av övrig elektronik i syste-met. Dessa störningar är av framförallt högfrekvent natur (>20kHz) och bör därför ltrerasbort. Del ett är därför att konstruera ett lågpasslter för att skala av dessa frekvenser frånsignalerna.

1.2.2 Del två: Mikrokontrollerkortet MultiWii

Då svänghjulet, med hjälp av permanentmagneterna, hänger ”fritt” och kommer sitta i ettrörligt fordon behövs kännedom om vilka krafter hjulet kan komma att utsättas för. Dessakrafter, framförallt i form av accelerationer och vinkelhastigheter/accelerationer, kommer tiltahjulet åt motsvarande håll som rörelsen sker i. Som exempel kan tas om fordonet benner sigi en plan högersväng kommer hjulet i sin tur att tiltas åt vänster. Hjulet ska i alla lägen hängai fordonets plan och därför måste denna rörelse kompenseras för. Det görs genom att beräknadet gyroskopiska momentet på hjulet enligt ekvation (1), där storheterna erhålles genommätning med sensorer. Sensorerna består av färdig hårdvara i form av ett mikrokontrollerkort,kallat MultiWii, som placeras på hjulet. Mätbara storheter är acceleration och det magnetiskafältet i alla tre riktningar, vinkelhastigheter åt alla håll (roll, pitch, yaw), temperatur, samtomgivande tryck, se Figur 2.

Data från sensorerna kommer inte i rådata direkt utan kan enbart visas genom medföljandemjukvara genom grafer. För att kunna beräkna krafterna på hjulet behövs just rådata ochuppgiften är då att översiktligt se över kortets egenskaper och prestanda samt programmeraom det så att rådata skickas till en dator och skriver ner det i en textl för efterprocesse-ring. Momentet på hjulet kan beräknas med ekvation (1) nedan och kommer användas vidregleringen av hjulets position.

M = Jω × Ω (1)

där M är det gyroskopiska momentet på hjulet, J är tröghetsmomentet runt svänghjuletsprincipalaxel (rotationsaxeln), ω är hjulets rotationshastighet och Ω är fordonets rotations-hastighet.

5

Figur 2: Kraftriktningar som svänghjulet kan utsättas för [3].

6

2 Teori

2.1 Del ett - Filterlåda

2.1.1 Lågpasslter

Enkelt sagt är ett elektriskt lter en uppsättning komponenter designade att på något sättmodiera frekvenserna hos en elektrisk signal. Beroende på design och konstruktion kan manlåta spann av frekvenser passera ltret (och förstärkas om det önskas) medan övriga avvi-sas. Det nns olika typer av lter; lågpass, högpass, bandpass, bandstopp, passiva (innehållerendast passiva komponenter), aktiva (innehåller även aktiva komponenter, t ex operations-förstärkare), m.. och den typ vi behandlar i detta dokument är ett lågpass i form av etts.k. Sallen-Key-lter. Dock för att bättre förstå detta inleder vi med att studera det enklareRC-ltret (uppbyggt av en resistor i serie med en kondensator) samt de egenskaper hos deingående komponenterna i form av resistans, impedans och reaktans.

2.1.2 Resistans

Resistans i en elektrisk krets är kretsens förmåga till att begränsa en ström genom den. Juhögre resistans i en krets desto högre spänning krävs för att driva en lika stor ström. En vanligliknelse är mängden vatten som kan transporteras genom en tratt. Desto mindre hål i tratten,desto större tryck krävs på vattnet för att pressa igenom samma mängd vatten. Resistansmäts vanligen i ohm (Ω) och kan i en likströmskrets beräknas med Ohms lag:

R =U

I(2)

2.1.3 Impedans

Impedans är motsvarigheten till resistans fast för en växelströmskrets och mäts därför också iohm (Ω). Impedans består av två komponenter, en resistiv och en reaktiv, vilka mot varandraär ortogonala. Den resistiva uppstår ifall det nns en resistor i kretsen och den reaktiva uppstårifall det nns antingen en kondensator (kapacitiv reaktans) eller en spole (induktiv reaktans)och är frevensberoende. Reaktansen orsakar en fasvridning mellan spänningen och strömmeni kretsen. Impedansen, som vanligtvis betecknas Z, beräknas genom:

Z = R+ jX (3)

där R är kretsens resistans och X är kretsen reaktans. Impedans är således ett komplext taldär resistansen är dess realdel och reaktans är dess imaginärdel. Storleken på impedansen ärbeloppet av den:

|Z| =√R2 +X2 (4)

och kommer användas senare vid beräkning av förstärkningen, överföringsfunktionen och bryt-frekvensen. Fasvridningen beräknas genom (se Figur 4a):

θ = arg(Z) = atan(X

R) (5)

7

2.1.4 Reaktans

Reaktansen är den frekvensberoende, imaginära delen av impedansen och är av kapacitiv ellerinduktiv karaktär (dvs. uppstår för att kretsen innehåller antingen en kondensator och/ellerinduktor). Då en växelström passerar genom en krets fasförskjuts spänningen relativt ström-men i intervallet +90 till -90. Kapacitiv reaktans som vi behandlar i det här dokumentetberäknas genom:

XC =1

2πfC=

1

ωC

där ω = 2πf är vinkelfrekvensen och frekvensen i sig kommer från frekvensen på signalen(dvs. hur många gånger/sekund växelströmmen byter håll).

2.1.5 RC-ltret

För att visa ett lters egenskaper använder vi oss av ett vanligt RC-lågpasslter som exempel,se Figur 3. I kretsen har vi Ztot = R−jXC = R+ 1

jωC , ZC = 1jωC , XC = 1

ωC är reaktansen ochω = 2πf är vinkelfrekvensen. Genom spänningsdelning kan vi beräkna utgångsspänningen ikretsen:

Vut = VinZC

Ztot= Vin

1jωC

R+ 1jωC

(6)

Om vi också denierar förstärkningen som ration mellan utgångsspänningen och ingångsspän-ningen, Vut/Vin, får vi:

VutVin

=

1jωC

R+ 1jωC

=1

1 + jωCR(7)

Med belopp (ekvation (4) för hela kretsen):

∣∣∣VutVin

∣∣∣ =1√

1 + (ωRC)2=

1√1 + (2πfCR)2

(8)

vilket går mot 0 för höga frekvenser och mot 1 för låga frekvenser.

8

Figur 3: Ett RC-lter.

2.1.6 Överföringsfunktion

Överföringsfunktionen är denierad som förhållandet mellan amplituden av utspänning ochinspänning i det elektriska systemet. Detta förhållande är alltså förstärkningen i kretsen ochkan tas fram genom lämplig kretsanalys (nodanalys, potentialvandring, mm.) med beaktningpå kretsens impedanser. Genom impedanserna hos de passiva komponenterna erhålles ett fre-kvensberoende och kretsen kan därmed analyseras. Överföringsfunktionen kan alltså jämförasmed ekvation (7) på föregående sida och betecknas:

VutVin

= H(s) (9)

där s = jω kommer från kretsens impedans.

2.1.7 Förstärkning i decibel

Inom elektroniken är förstärkningen, G, ett mått på en krets förmåga att öka en viss storhet.Här vill vi mäta vår krets förmåga till att dämpa (dvs. detsamma som förstärkningen fastmindre än 1) utgångsspänningen på kretsen. Detta görs oftast i decibel och beräknas genom:

G = 20log10(Vut/Vin) (10)

eller genom överföringsfunktionen:

G = 20log10|H(s)| (11)

2.1.8 Amplitudsvar och brytfrekvens

Eftersom spänningen på utgången ändras beroende på vilken frekvens man skickar in, kanman plotta utgångsspänningen mot frekvensen och då erhålla det s.k. amplitudsvaret. Dennakurva visar helt enkelt hur utgångsspänningen (eller förstärkningen) reagerar med ökande

9

frekvens. Om man också plottar fasförskjutningen mot ökande frekvens erhåller man det s.k.fassvaret. Samlingsnamn för en plot innhållande både amplitud- som fassvar kallas Bode-plot.

Brytfrekvensen, ofta betecknad fc (cut-o frequency på engelska), kan beskrivas på olika sätt.Det är den frekvens där amplitudssvaret (förstärkningen) är en faktor 1√

2(≈ 70%) av ingång-

en. Det vill säga, om man skickar in en 1-volts sinussignal genom ett lter är brytfrekvensenden frekvens där utgången visar ca 0,7 volt, eller ca 70% av ingången. Denna nivå är dennivå där amplituden är -3 dB mot ingången vilket motsvarar halva eekten mot ingången.Brytfrekvensen denieras som den frekvens där den kapacitiva reaktansen är lika stor somden resistiva i en vanlig RC-krets/lter. Att det inte är en halvering vid denna frekvens berorpå att det är vektorsumman av resistansen och reaktansen.

För att räkna ut brytfrekvensen krävs överföringsfunktionen, H(s). För ett lågpasslter gäller,och kan jämföras med ekvation (6) på föregående sida, följande:

|H(sc)| = |H(s = 0)| 1√2

(12)

där sc = jωc, 1√2är -3dB nivån multiplicerad med överföringsfunktionen då den går mot noll.

Denna ska lösas för frekvensen ωc = 2πfc

För ett lågpasslter denieras passbandet (eller bandbredden) som frekvensen mellan noll upptill brytfrekvensen, dvs. de frekvenser som får gå igenom kretsen helt eller delvis orörda. Allaövriga frekvensa, dvs. den del av amplitudsvaret som ltreras bort kallas stoppband.

2.1.9 Fassvar

Hos en signal utan störningar följer strömmen och spänning varandra åt, dvs. det nns ingenrelativ fasskillnad mellan de båda vid lika frekvens. Detta kallas att de är i fas med varandra.Detta inbördes förhållande ändras dock vid användning av reaktiva (frekvensberoende) kom-ponenter som kondensatorer och för en viss frekvens kan fasskillnaden beräknas med ekvation(5), se Figur 4a.

10

(a) Impedansen i en vanlig RC-krets. Fasskill-naden som uppstår beräknas genom vinkelnmellan den reella resistansen och den imagi-nära reaktansen.

(b) Fasskillnad mellan in- och utspänning.

Figur 4

2.1.10 Q-faktor

Q-faktorn är ett mått på hur snabbt ett oscillerande system dör ut. Den är denierad somförhållandet mellan energin lagrad i det oscillerande systemet till energiförlusten per radianav en oscillationscykel:

Q = 2π · El

Ef

(13)

där El och Ef är den lagrade energin respektive förlorade energi per cykel.

Som exempel kan vi ta en pendel som släpps från vila i luft jämfört med en vätska medhög viskositet som olja. I luft kommer pendeln att fortsätta pendla relativt lång tid, vilketmotsvarar en låg förlorad energi per cykel och således en hög Q-faktor. I olja kommer pendelnatt hamna i sitt jämviktsläge ganska omgående pga oljans mottryck och motsvarar en högenergiförlust per cykel och således en låg Q-faktor.

För ett Sallen-Key-lter beräknas Q-faktorn med:

Q =

√C1C2R1R2

C2(R1 +R2). (14)

2.1.11 Sallen-Key

Ett Sallen-Key lter är ett sorts lter med en speciell uppsättning komponenter och utseende.Det är ett andra ordningens lter, dvs. 2-poligt där operationsförstärkaren tillåter höga Q-tal.Uppsättningen för ltret kan ses i Figur 5. Fördelen med Sallen-Key ltret är att man inteanvänder sig av spolar vilka oftast är stora, klumpiga och dyra, den enkla sammansättningenav komponenterna samt möjligheten till höga Q-värden.

11

Figur 5: Utseende på ett Sallen-Key lter [4]

I Figur 5 är Z komponenternas impedanser. Beroende på hur man väljer komponenterna kanman skapa högpass, lågpass eller bandpasslter. Med Z1, Z2 resistiva och Z3, Z4 kapacitivaerhålles ett lågpasslter. Därefter bestämmer komponentvärdena ltrets egenskaper i form avbrytfrekvens, Q-värde, etc.

Överföringsfunktionen till ltret erhålles enklast genom nodanalys. För att få fram det börjarmed att konstatera att V+ = V− = Vy = Vut i operationsförstärkarens in- och utgångar.

Nod X:

0 =Vin − VxZ1

+Vy − VxZ3

+Vy − VxZ2

(15)

Nod Y:

0 =Vx − VyZ2

+0− VyZ4

(16)

Vilka löses för Vut och efter lite algebra (se Appendix 7.1 för fullständig härledning) erhållesöverföringsfunktionen:

→ H(sc) =ω20

s2c + 2αsc + ω20

(17)

Med överföringsfunktionen (ekvation 17) och formeln för att räkna ut brytfrekvensen (ekvation12) kan vi erhålla vilka komponentvärden som är lämpliga för vilka frekvenser. Som beskriveti [5] visar amplitudsvaret kretsens beteende över alla frekvenser. Därför, för en given frekvens,lämpliga värden på kondensatorerna och godtyckligt värde på en av resistorerna kan vi räknaut ett lämpligt värde på den sista resistorn.

|H(sc)| = |H(s = 0)| 1√2→ (18)

→ ω20√

(2αωc)2 + (ω20 − ω2

c )2=

1√2→ 2ω4

0 = (2α)2ω2c + (ω2

0 − ω2c )2 (19)

12

Med återinsättning av komponentvärden istället för 2α och ω20 samt lite algebra erhålles en

ekvation som bestämmer hur värden R1, R2, C1 och C2 måste väljas för att få den önskadecut-o frekvensen:

R21(1 +R2

2C21ω

2c ) +R1(2R2 −

2R2C1

C2) +R2

2 −1

C22ω

2c

= 0 (20)

där ωc = 2πfc.

2.1.12 Val av kondensatorer

Kondensatorerna kan väljas godtyckligt men bör väljas ”lagom” stora. Med lagom menas ejför små då de blir för snabbt fullt upp-/urladdade och således slutar leda ström men ej hellerför stora då de då blir onödigt stora (rent fysiskt) eller väldigt dyra och oekonomiska.

2.1.13 Val av operationsförstärkare

Det är egentligen endast två egenskaper man måste överväga vid val av operationsförstärkare:bandbredd (closed-loop bandwidth) och slew rate. För detta lter räcker kravet att bandbred-den minst ska vara 100 gånger brytfrekvensen, fc100. Detta är dock lterberoende: säg attman har en förstärkning i signalen också (i vårt fall är förstärkningen 1), då måste bandbred-den minst vara 100fcG, om förstärkningen är G.

Slew rate är denierad som den maximala förändringshastigheten av utgångsspänningen (ut-tryckt som V/mikrosekund). För att undvika att ltret inte går in i ett slew-rate-conditionmåste operationsförstärkaren väljas så att: slew rate ≥ 2πVout−peak−peak, där Vout−peak−peakär den förväntade peak-to-peak output voltage swing below fc of your lter.

13

2.2 Del två - Mikrokontrollerkortet MultiWii

2.2.1 Arduino, historia och allmänt vetande

MultiWii:n grundar sig på ett mikrokontrollerkort kallat Arduino. Arduino är öppen hård-vara och är ett projekt utvecklat av italienarna Massimo Banzi och David Cuartielles medmålet att göra elektronikutvecklingsprojekt mer tillgängliga och billigare för studenter [6].Hårdvaran består av en enkel öppen kretsdesign med en Atmel AVR (grupp av integrerademikroprocessorer, dvs. dator) samt stöd för in- och utgångar att skicka information till ochfrån en dator. Mjukvarustödet består av ett egenutvecklat programmeringsspråk (vilket byg-ger på C++) och kompilator. Till detta hör också en IDE (integrerad utvecklingsmiljö, därsjälva programmeringen och kompilationen utförs) och tillhörande bibliotek med färdigbyggdafunktioner.

Enkelt sagt är Arduinon en minidator till vilken man kan koppla till t.ex. sensorer för mätningav temperatur, hastigheter, accelerationer, ljus, etc. och sedan programmera den att skickadenna information med önskad frekvens till önskad enhet (handdator t.ex.).

2.2.2 MultiWii

I grunden byggd av ett par eldsjälar för hemmabygge av radioygplan eller radiohelikoptraroch grundar sig på en Arduino [7] (dvs. det är en Arduino anpassad för kontroll av t.ex. enhelikopter). Den består av följande hårdvara/funktioner:

Atmega 328P chip/mikrokontroller

Accelerometer - BMA180

ITG3205 Triple Axis Gyro (gyroskop)

BMP085 Barometer

HMC5883L Magnetometer

Utgång för kamera och styrningsfunktion för denna

Separat 3.3V strömförsörjning

Logikomvandlare

Till detta kommer också ett open-source-program för visualisering av samtliga mätpunkter.Alla dessa är dock inte intressanta för denna applikation utan vi kan begränsa oss till gyrosko-pet, accelerometern samt magnetometern. Sensorerna är kopplade via en s.k. I2C-buss vilketär en synkron seriell masterbuss från Philips. Via I2C-bussen kan man koppla era enheter(upp till 127 för en standard buss) via endast två ledare per enhet (en för data, SDA, ochen för klockning, SCL). Detta minskar antalet ledare kraftigt samt förenklar programmering,kretsdesign och dylikt (annars skulle varje sensor behöva kopplas direkt till kontrollern). Kom-munikationen sker alltså från kontrollern till I2C-bussen som i sin tur pratar med sensorernaså man måste därför även programmera bussen vilket egentligen görs via ett protokoll menlyckligvis har Arduino ett eget bibliotek för denna kommunikation, kallat Wire. Vi går därförinte djupare in på ämnet I2C utan begränsar arbetet till Arduinon och sensorerna.

14

(a) MultiWii:en. (b) Kopplingsschema hur två olika enheter kopplas till I2C-bussen.

2.2.3 Accelerometern - Bosch BMA180

Accelerometrar mäter accelerationen i termer av m/s2 eller antalet G-krafter g. Eftersom enaccelerometer i ett gravitationsfält ständigt utsätts för en acceleration (1 g = 9.82 m/s2)kommer den ständigt att visa att den har en acceleration i en riktning beroende på åt vilkethåll den står åt. Därför skulle en annan applikation kunna vara att bestämma dess orientering(porträtt eller landskap t.ex.) eller mätning av vibrationer.

Det nns framförallt två olika typer av accelerometrar. Den första består av piezoelektrisktmaterial som avger ström när det utsätts för mekanisk spänning som beroende på hur stor denblir bestämmer accelerationen. Den andra typen består av kondensatorer vilka är koppladetill olika fjädrar som rör sig när enheten utsätts för accelerationskrafter. När kondensatorernarör sig i förhållande till varandra ändras kapacitansen mellan dem vilket används för attbestämma accelerationen.

BMA180 är en högkvalitativ accelerometer. Den mäter i alla tre riktningar, har hög precisions-nivå och drar lite ström vilket gör att den lämpar sig väl för små enheter som t ex telefoner,gyrokoptrar (som i det här fallet), eller annan mindre produkt med begränsad strömförsörj-ning. Den är dessutom högfunktionell där era programmeringsfunktioner är möjliga:

den ska ”vakna” vid vissa tillfällen (t ex vid stöt)

sju olika mätningsintervall (± 1g, 1.5g, 2g, 3g, 4g, 8g, 16g), där olika lämpar sig olikaväl beroende på noggranhet och förväntad storlek

hög/låg g-detektion

lutningsdetektion

fyra operationella lägen; sovläge, vakna-upp-läge, låglter eller lågström låg- eller hög-passlter (8 lågpass, 1 högpass och 1 bandpass) vilket gör att den kan ta bort t ex spikarur mätningen vilket jämnar ut ens resultat.

Sensorer i allmänhet mäter analogt (elektriska signaler) vilket betyder att för att få ut av-läsningsbar data måste dessa analoga signaler omvandlas till digitala. Det görs genom s.k.ADC-konverterare (analog to digital converter) som sedan, beroende på typ, kastar ut värdenmed någon form av ”storlek” i form av antal bits. ADCn på denna sensor är en 16-bit-konverterare vilket betyder att data som skickas kan bestå av 216 = 65536 olika värden. Det

15

ger ett plus-minus-intervall på [−32768, 32767] (0 tar ett värde också). Se datablad för vidareinformation [8].

2.2.4 Gyroskop ITG3205

Gyroskop mäter rotationshastigheter i termer av vinkelhastigheter (grader/sekund eller var-v/sekund). Applikationer till gyroskop är många och nns i framförallt autonoma naviga-tionssystem vilka används för att kontrollera robotar, ygmaskiner, båtar etc. Gyroskop mätergenerellt rotationshastigheten för alla tre axlar, x, y, z, men det nns en- och tvåaxelsgyroskop.

ITG3205 är en högkvalitativ sensor och är fullt rekommenderbar för konsumentmarknadentill t ex telefoner, gyrokoptrar eller som i det här fallet ett svänghjul. Den mäter i alla treriktningar på upp till 2000 grader/sekund, drar lite ström, och har hög precisionsnivå (16 bitADC). Möjliga programmerbara funktioner är lågpasslter och ställbar precision (intervall).Se datablad för vidare information [9].

2.2.5 Magnetometern, Honeywell HMC5883l

En magnetometer mäter styrkan på det magnetiska fältet på platsen den benner sig i ochfungerar därför precis som en kompass. HMC5883l är en s.k. vektormagnetometer (nns ävenskalära vilka enbart mäter den totala styrkan) vilket betyder att den mäter styrkan hos fälteti alla tre riktiningar från vilka man kan beräkna styrkan hos det totala fältet om så öns-kas. Magnetometrar används främst inom geologin och av t ex gruvföretag för att upptäckaojämnheter i det jordiska magnetfältet i hopp om att nna olika metallarter eller liknande. Förkonsumentmarknaden nns den främst hos smarta telefoner. Magnetometern tillsammans medaccelerometern kan nämligen bestämma åt vilket håll telefonen pekar (tänk Google Maps).

Hur magnetometrar fungerar är inte helt enkelt. En enkel förklaring vi har funnit bygger påatt mäta frekvensen hos protonerna i en spole. Magnetometern tillför ström till en liten spolevilket skapar ett ”internt” känt magnetiskt fält runt spolen. Protonerna i spolen kommerdå att rikta in sig efter detta fält. Därefter bryts strömmen till spolen så det interna fältetförsvinner. Protonerna riktar då in sig efter det jordiska (det utomstående) magnetfältet meden viss frekvens som mäts och magnetfältet kan då beräknas. Eftersom magnetometrar jämförsitt interna magnetfält med ett yttre kan de också vara missvisande ifall du mäter nära en platsmed ett stort magnetfält i fel riktning (t.ex. om du står direkt under en högströmsledning)vilket måste i så fall beaktas vid mätning.

HMC5883l är även den en högkvalitativ sensor med en felmarginal på 1-2 grader (förutsatträtt inställd och utan externa fält förutom det jordiska), 160 Hz maximal utsignal, och en12-bit ADC. Se datablad för vidare information [10].

2.2.6 Hyperterminal

Hyperterminal är ett program använt främst tidigare för att koppla ihop datorer, till Telnet,värddatorer, etc. genom ett modem, nullmodemkabel (kabel att koppla ihop två datorer medvarandra utan att använda ett modem eller nätverkshub), eller via en ethernetuppkoppling.

16

I och med internets framgångar är det dock mindre användbart nu för tiden men kan varabra för testning av modem eller undersöka uppkoppling till andra platser. Hyperterminaldokumenterar meddelandena som skickas fram och tillbaka över uppkopplingen mellan dindator och enheten på andra sidan. Därför fungerar den perfekt för att läsa av den seriellakopplingen mellan MultiWii:n och datorn för att läsa av och spara ner den data den skickari en textl.

17

3 Metod

3.1 Del ett - lterlåda

3.1.1 Komponentvärden

De kravspecikationer på ltret som angavs var att brytfrekvensen skulle kunna reglerasmellan 5-20 kHz samt att Q-värdet inte ck överstiga värdet tre vilket beräknas från ekvation(9) eftersom det är ett resultat av de olika resistorvärdena. Q-värdet får ej överstiga värdet3 p.g.a. dess relation med fassvaret. Ett Q-värde på 3 innebär en förstärkning på 10. Utifråndenna information skulle kondensatorernas och resistorernas värden fastställas. För att räknaut Q-värdet används formeln

Q =

√m · nm+ 1

(21)

därm och n står för kvoten mellan resistorerna respektive kondensatorerna. Genom inspektionav ekvation (17) kan man utläsa att det behöver vara ett större värde på n jämfört med m

för att åstadkomma ett Q-värde större än ett.

Då det används justerbara resistorer och värdet på dessa är okänt ställs ekvationer upp där vilöser ut kvoten mellan dessa med hjälp av Matlab. I ekvationen är värden på brytfrekvensen,kondensatorerna samt att inte Q-värdet får överstiga tre givet. Kvoten mellan resistorernavilka vi kallar R1 och R2 fås från ekvationen

|H(sc)| = |H(0)| 1√2

(22)

Från denna löses R1 ut som en funktion av R2. Med olika startgissningar på R2 hittar manefter ett tag fram till ett värde på R1 som uppfyller de kravspeciaktioner som angivits.

Matlabskriptet (se appendix 7.1) innehåller en andragradsekavtion där man som räknar utvärdet på R1. Ekvationen fås fram då man löser ut R1 från ekvationen ovan. Detta negativavärdet bortses ifrån då det inte har någon fysisk betydelse.

3.1.2 Kopplingsplatta

För att testa att ltret fungerar i praktiken används en kopplingsplatt. På plattan ansluts dekomponenter som ingår i kretesen samt kopplar in de spännings- och signalkällor man önskar.Hålen på plattan som följer samma sira och kolum har samma potential. Insignalen kopplastill kolumnerna med plus-tecken och dras sedan vidare till önskat hål. Jord på kopplingsplattanhittar man i kolumnerna markerade med minus.

3.1.3 Kretskort

CAD-programmet Eagle användes för att utföra designen av kreteskorten. Designen består avtvå steg där man börjar med att rita upp schemat för önskad krets för att senare själv göra

18

cadningen av kretskortet. När schemat ritas upp använder man sig av de komponentbibliotekEagle har, där man tar fram de komponenter man önskar. Då enskilda komponenter inte nnsatt tillgå kan dessa konstruerars på egen hand och adderas till ett bibliotek. När kretskortetutformas ska man bland annat tänka på att inte ha några räta vinklar på ledningsbanornadå man vill minimera risken att onödiga störningar uppkommer. Det är viktigt att i bästamån försöka ha sina ledningsbanor så korta som möjligt då man vill minska kapaciatans ochresistans. Något som också är bra att tänka på är att ledare och återledare ska gå parallelt imesta mån då de tar ut varandras fält.

När kortet är färdigställt skickas eagle-schemat till företag som Cogra AB [11] som framställerkretskortet. Komponenterna inhandlas från företaget Farnell [12].

19

3.2 Del två - Mikrokontrollerkortet MultiWii

Metoden för denna del går ut på att på internet läsa om framförallt programmering av Ar-duino, MultiWii, I2C, de olika sensorerna och hur man läser av dess datablad och däreftergenom trial-and-error komma fram till ett resultat.

3.2.1 Hello World

För att demonstrera programmeringen av kontrollern skriver vi ner ett program för att få enLED-lampa att blinka och förklarar innebörden av de ingående funktionerna.

int led = 9;void setup()pinMode(led,OUTPUT);

void loop()digitalWrite(led,HIGH);delay(1000);digitalWrite(led,LOW);delay(1000);

setup() - kallas på vid start av en sketch (sketch är namnet Arduino använder på den bitav kod, .ino-l, som laddas upp och körs på en Arduino, jämförande Javas .java-ler). Härinitierar man variabler, konstanter, bibliotek etc, eller som ovan där vi sätter en vald pins läge(här OUTPUT, vilket gör att den kan driva den pinens komponent, dvs. kör en ström ellerpålagd spänning över denna pin). Om satt som INPUT tar den istället in information från tex. en sensor. Måste alltid kallas på.

pinMode() - sätter vald pins läge.

loop() - själva hjärtat hos de esta sketcher. Inom denna säger man åt Arduinon att göradet man vill att den ska göra. Loopen går, som namnet säger, om och om igen.

digitalWrite() - tar två inparametrar, pinen som ska användas samt vilket värde den skasättas till. Här är vald pin nr 9, som sätts till HIGH eller LOW beroende på om man vill attpinen ska grundas (dvs. ingen spänning läggs över, 0 Volt, LOW) eller om man vill att maxspänning ska läggas över (5 eller 3.3 Volt beroende på kort). Notera att det enbart gäller ifallman satt dess pinMode() till OUTPUT i setup-funktionen.

delay() - väntetid i millisekunder.

Om man följer programmet ovan som körs rad för rad förstår man att om man kopplar påen LED-lampa på pin 9 kommer denna att tändas (digitalWrite med inparameter HIGH) ochsläckas (digitalWrite med inparameter LOW) med en sekunds mellanrum om och om igen vialoop()-funktionen.

20

3.2.2 Wire-biblioteket

För att demonstrera hur kopplingen sker mellan kontrollern, I2C-bussen och sensorerna visarvi nedan ett kort program som initierar en sensor (dvs. sätter dess default-läge) och hämtaroch skriver ut data genom en seriell koppling. Förklaringar skrivs som kommentarer i koden.

#include <Wire.h>// inkludera Wire-biblioteket

#define MAG 0x1E // Definiera sensorns registerplats; hämtas från datablad,// vanligen under $I^2C$-kapitlet

void setup()Serial.begin(1200); // Öppnar seriell port och sätter överföringshastighet till// 1200 bits per sekundWire.begin(); // Initiera Wire-bibliotek och sätter buss till master i ett

// master/slave-förhållandetdelay(100);MagInit(); // Initierar magnetometer (se nedan)

void MagInit() // HMC5883l - Magnetometern// Kontinuerlig avläsninWire.beginTransmission(MAG); // Startar överföring till sensornWire.write(0x02); // Lägesregisterplats, säger åt att vi vill skriva något// på registerplats 2Wire.write(0x00); // Skriver 0 binärt till denna plats, betyder att den// kommer att skicka data kontinuerligtWire.endTransmission(); // Avslutar överföring, dvs. genomför ovanstående

void MagRead()int x,y,z; // initierar datavariabler

Wire.beginTransmission(MAG);Wire.write(0x03); // Vill hämta data från registerplats 3Wire.endTransmission();

// Data kommer i knippen om bytes, här 6 stycken vilka alla består av 8 bitsWire.requestFrom(MAG, 6); // Begär data från register 3 och 6 bytes framåt,

// när data väl överförts slängs// detta vilket möjliggör nedanstående funktionif(6<=Wire.available()) // ta data så länge det finns

x = Wire.read()<<8; // läs av data, shifta 8 bits åt vänsterx |= Wire.read();z = Wire.read()<<8;

21

z |= Wire.read();y = Wire.read()<<8;y |= Wire.read();

Serial.print("M,"); // Skriv ut dataSerial.print(x);Serial.print(",");Serial.print(y);Serial.print(",");Serial.println(z);

void loop()Serial.print("Time,");Serial.println(millis()); // Starta klockaMagRead(); // Loopa läsfunktionen så den ständigt körs och skickar datadelay(10);

3.2.3 MultiWiins axlar och dataöverföring

Genom att undersöka hur utslagen förändras hos sensorerna kan vi ta reda på hur axlarnaär satta på MultiWiin. Det görs enklast genom att följa utslagen genom hyperterminaleneller den seriella monitorn som följer med IDEn. Även om detta endast är en denitionsfråga(är inte mer än ett −1 ifrån att vända en axel 180 grader) kan det vara bra att veta dessautgångsläge. Därefter kan man deniera och anpassa bäst man vill efter sin applikation.

3.2.4 Hisstest

För att testa accelerometern ställde vi oss i en hiss för att mäta dess acceleration. Vi startafrån bottplanet, åkte högst upp och därefter tillbaka ned igen.

22

4 Resultat

4.1 Del ett - lterlåda

4.1.1 Komponentvärden

Lämpliga värden på kondensatorerna blev C1 = 47nF och C2 = 1nF. Kvoten av n blir då47. Fortsatt framtagande av komponentvärdena gjorde genom att sätta in brytfrekvensenpå 20kHz och ett värde på en av resistorerna gjorde att värdet på den andra resistorn kundeberäknas. För att väga in så att värden var bra kontrollerades också att Q-värdet inte översteg3. Samma sak gjordes för att få fram bra värden för brytfrekvensen 5kHz.

Vid brytfrekvensen 20kHz med de givna värdena på kondensatorerna blir resistorvärdenaR1 = 3120Ω och R2 = 1000Ω. Q-värdet ligger då på 2.94 vilket är precis i linje med kravspe-cikationen. Värden vid brytfrekvensen 5kHz blir R1 = 12300Ω och R2 = 4000Ω.

4.1.2 Kopplingsplatta

Figur 7: Färdig modell av ltret. Genom att kolla på in- och utgångsspänningar med oscillo-skop bekräftas att det fungerar. De röda strecken visar hur ledningarna är ihopkopplade.

23

4.1.3 Kretskortsdesign

Figur 8: Kretskortsschema.

24

Figur 9: CAD-designen av kretskortet.

Kretskortet är designat så att ledningarna, Fig 8, är dragna så korta som möjligt. Ledare ochåterledare är dragna parallellt i största mån. Det jordade planet (blåa området) som sittervid operationsförstärkaren hjälper till att jord kommer till rätt ställe och behöver på så visbehövs inga extra ledningar till jord dras, se Figur 9. Avlastningskondensatorer används påden positiva och negativa utgången av operationsförstärkarna. Dessa kondensatorer jämnarut eventuella ”spikar” i spänningen. Det färdigställda kretskortet kan ses i Figur 10.

Nedan följer en tabell med de komponeter som användes:

Komponent AntalPotentiometer 8stOperationsförstärkare 4stD-sub 2stElektrolytkondensatorer 8stKeramiskakondensatorer 16st

25

Figur 10: Färdigställt kretskort med fyra parallella lågpasslter.

26

4.1.4 Mätningar

Det färdigställda kretskortet testades för att se att det fungerar i praktiken. Nedan visasett antal plottar på in- och utsignal för olika frekvenser där den gula är insignal och turkosautsignal. Under mätningen användes en insignal på drygt 6 volt. Kan se att för låga frekvenser,under brytfrekvensen som är satt till 20 kHz, släpps signalen helt eller mestadels igenomopåverkad. För brytfrekvensen och högre ltreras signalen till ungefär 70% eller mer vilketär önskvärt. Plottarna visar även fasförskjutningen för de olika frekenserna och kan se attutsignalen kommer efter insignalen vilket är väntat för ett lter av denna typ.

Figur 11: Ovan visas en signal med f = 100Hz vilken helt och hållet släpps igenom. Fasför-skjutningen kan ses är mindre än en grad.

27

Figur 12: Signal med f = 1kHz släpps igenom fullständigt. Fasförskjutningen går nu upp tillstrax över tre grader.

Figur 13: Signal med f = 10kHz dämpas med ca 17%. Fasförskjutningen går nu upp till straxöver 33 grader.

28

Figur 14: Signal med f = 20kHz, brytfrekvensen, dämpas med ungefär 35% vilket är i linjemed förväntningarna. Fasförskjutningen går nu upp till ca 54 grader.

Figur 15: Signal med f = 40kHz dämpas med knappt 65%. Fasförskjutningen går nu upp tillca 64 grader.

29

Figur 16: Signal med f = 100kHz dämpas med ca 85%. Fasförskjutningen går nu upp till ca80 grader.

Figur 17 nedan visar en Bodeplot för det verkliga ltret vilket. De röda cirklarna motsva-ras av den faktiska uppmätta förstärkningen, ekvation (10), till ltret medan den blå kurvanär en teoretisk uppskattning av hur ltret beter sig. Det är alltså ekvation (11) plottad ifrekvensintervallet [102, 107], dvs. absolutbeloppet av överföringsfunktion (magnituden) över-förd till decibel. Som ses överensstämmer de uppmätta värdena till ltret ganska bra medde teoretiska även om viss skillnad nns. Dessa skillnader beror främst på mätfelet hos po-tentiometrarna vilka vid mätningen uppskattades till ungefär R1 = 1.7kΩ och R2 = 0.4Ω.Mätningen genomfördes direkt på kretskortet och dessa värden kan inte helt litas på eftersompotentiometrarna löddes på innan de hade ställts in rätt. Att mäta direkt på kretskortet ärosäkert då man inte kan vara helt säker på vilken väg strömmen tar. Efter mätning av lik-nande (men inte samma) potentiometrar kunde vi konstatera att dessa inte heller är linjäraoch det då är svårt att exakt uppskatta vilken resistans de ger genom metoden att vridapotentiometrarna ett visst antal varv.

30

102

103

104

105

106

107

−60

−40

−20

0

För

stär

knin

g, d

B

TeoretiskUppmätt

102

103

104

105

106

107

−150

−100

−50

0

Frekvens, Hz

Fas

förs

kjut

ning

, gra

der

TeoretiskUppmätt

Figur 17: Bodeplot för vårt lter med komponentvärden R1 = 1.7kΩ, R2 = 0.4Ω, C1 = 47nFoch C2 = 1nF . De röda cirklarna motsvarar de experimentellt uppmätta värdena och denblå kurvan är den teoretiska uppskattningen. Kan se att ltret stämmer ganska bra medteoretiska värden. En ytterligare konrmation för detta vore att ha uppmätta värden för ännuhögre frekvenser och även lagt till dessa till plotten.

31

4.2 Del två - Mikrokontrollerkortet MultiWii

4.2.1 MultiWiins axlar

Visar sig att axlarna går enligt nedanstående Figur 18, dvs. positiva z går nedåt genomplattan, positiva y bakåt från pilen, och positiva x vänster från pilen. Pilen på plattan visarframåtriktningen och är utsatt på MultiWii:n. Rörelsemönstret och hur sensorerna mäter ärdärför som följer:

Stillastående:

ax,y = 0, az > 0, i antal g

gx = 0, gy = 0, gz = 0, ingen rotation ger inget utslag hos gyroskopet

Tilt framåt, pitch (rotation framåt med pilen runt x-axeln):

ax = 0, ay < 0, az = 0

gx minskar (negativ vinkelhastighet), gy oförändrad, gz oförändrad.

Tilt höger, roll (rotation runt y-axeln):

ax = −1, ay = 0, az = 0

gx oförändrad, gy ökar, gz oförändrad

Rotation kring z mot klockan, yaw:

a oförändrat i alla led.

gx oförändrad, gy oförändrad, gz ökar

Även om detta mest är en denitionsfråga (ett minustecken framför byter man riktning) kandet vara bra att veta grundinställningen.

y x

zFigur 18: MultiWii:ns axlar.

32

4.2.2 Hisstest

Resultatet från hisstestet visar att accelerometern gör det den ska. I Figur 19, vilket är enplot över accelerometerns utslag under hissfärden, kan ses hur accelerationen nedåt ökar närhissen accelererar uppåt (accelerometern trycks nedåt när hissen drar uppåt) för att däreftergå över till konstant 1 g då hissen rör sig konstant mellan våningarna och till slut minskarnär hissen retarderar till stillastående (accelerometern trycks då lite uppåt pga dess tröghet).Därefter upprepas mönstret på nedvägen igen.

Figur 19: Plot över accelerometerns utslag under hissfärden.

33

5 Diskussion och slutsats

5.1 Del ett - lterlåda

Att välja rätt lterstruktur är inte självklart, vi har inte gjort några simuleringar eller beräk-ningar på något annat än Sallen-Key-alternativet. En idé för framtiden om man inte är nöjdmed den lågpasslterade signalen från avståndsgivaren kan vara att sänka brytfrekvensen från20 kHz eller att bara prova sig fram med samma brytfrekvens men tillåta ett högre Q-värde.

Vid simuleringar var det enkelt att byta resistorvärde hela tiden och testa sig fram. Närkretsen löddes ihop var potentiometrana inställda på sina default-värden. Detta gjorde attnär väl kretsen var på plats gick det inte att mäta det exakta motståndet över dessa. Vi ckfram rätt beteende för kretsen vid 20 kHz genom att vrida potentiometrarna i botten ochsedan vrida upp de tills utgångsspänningen visade ungefär 0.7 av ingångsspänningen. I ochmed detta har vi inga exakta värden på potentiometrarna. För 5 kHz blev resultatet dock ejlika lyckat (hittade ingen vettig kombination av värden då ltret uppvisade rätt beteende)så vi valde att ställa in alla fyra lter så de har en brytfrekvens på 20 kHz. Detta kunde haundvikits genom att ha ställt in potentiometrarna på önskade värden innan de löddes fast.

För framtiden av svänghjulsprojektet kommer förhoppningsvis denna lågpassltering leda tillbättre precision för avståndssensorerna vilket leder till bättre resultat längre fram.

5.2 Del två - Mikrokontrollerkortet MultiWii

MultiWii:n läser av önskade värden och fungerar som den ska. Ett utmärkt verktyg för attförbättra stabiliteten hos svänghjulet och garanterat ett säkrare alternativ än att försökabygga egna sensorer även om sensorernas utgivna data kan tyckas ryckigt. Det kan åtgärdasmed er lter (vilket de esta sensorer erbjuder) och utjämning av den data den ger ut (närden väl processas direkt vid mätning) så inga förhastade korrektioner av svänghjulet sker.Ytterligare förbättring vore att programmera MultiWii så den endast arbetar vid tillfällendå den behövs. Med det menas att den ”väcks” vid stötar och data inte nödvändigvis måsteprocessas under en hel bussfärd. Det kan nöta onödigt mycket på komponenterna i fråga.

34

6 Referenser

[1] Abrahamsson, Johan, et al. High-Speed Kinetic Energy Buer: Optimization of Com-posite Shell and Magnetic Bearings, IEEE Transactions on industrial electronics, VOL.60, NO. 6, p1-3, Juni 2013

[2] Abrahamsson, Johan, Kinetic Energy Storage and Magnetic Bearings: for Vehicular Ap-plications, Uppsala: Institutet för högspänningsforskning, Uppsala universitet, UURIE327-11L, 2011

[3] Flight dynamics (xed-wing aircraft), Wikipedia, The Free Encyclopedia. Wikime-dia Foundation, Inc. 6/4 2014. Web. // http://en.wikipedia.org/wiki/Flight_dynamics_(fixed-wing_aircraft)

[4] Sallen-Key topology, Wikipedia, The Free Encyclopedia. Wikimedia Foundation, Inc.3/5 2014 // http://en.wikipedia.org/wiki/Sallen%E2%80%93Key_topology

[5] Storey, Neil, Electronics: A Systems Approach, 4th edition, Pearson Education, 2009

[6] Arduinos hemsida, www.arduino.cc

[7] MultiWii hemsida, www.multiwii.com

[8] Bosch, Digital, triaxial acceleration sensor, BMA180 datasheet, document num-ber: BST-BMA180-DS000-03, 10/12 2009 https://www.sparkfun.com/datasheets/Sensors/Accelerometer/BST-BMA180-DS000-03.pdf https://www.bosch-sensortec.com

[9] Invensense, ITG-3200 Product specication Rev. 1.4, ITG-3200 datasheet, documentnumber: PS-ITG-3200A-00-01.4, 30/3 2010 https://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-01.4.pdf http://www.invensense.com/

[10] Honeywell, 3-axis Digital Compass IC HMC5883L, HMC5882L datasheet, Februa-ri 2013 http://www.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf http://sensing.honeywell.com/

[11] Cogras hemsida, Cogra AB www.cogra.se

[12] Farnells hemsida, Farnell element14 www.farnell.se

35

7 Appendix

7.1 Filterlåda

Beräkning av överföringsfunktion samt ekvationer för resistorerna.

Nod X:

0 =Vin − VxZ1

+Vy − VxZ3

+Vy − VxZ2

(noterar att Vy = Vut)

⇒ Vin − Vx(

1

Z1+

1

Z2+

1

Z3

)Z1 + Vut

(1

Z3+

1

Z2

)Z1

= Vin − Vx(

1 +Z1

Z2+Z1

Z3

)+ Vut

(Z1

Z3+Z1

Z2

)(23)

Nod Y:

0 =Vx − VyZ2

+0− VyZ4

(noterar att Vy = Vut)

→ Vx = Z2

(VutZ2

+VutZ4

)= Vut

(1 +

Z2

Z4

)(24)

(20) insatt i (19) ger:

0 = Vin − Vut(

1 +Z2

Z4

)(1 +

Z1

Z2+Z1

Z3

)+ Vut

(Z1

Z3+Z1

Z2

)

⇒ VinVut−(

1 +Z2

Z4

)(1 +

Z1

Z2+Z1

Z3

)+Z1

Z3+Z1

Z2

=VinVut− 1− Z1

Z2− Z1

Z3− Z2

Z4− Z1Z2

Z2Z4− Z1Z2

Z3Z4+Z1

Z3+Z1

Z2

=VinVut− 1− Z2

Z4− Z1

Z4− Z1Z2

Z3Z4

→ VinVut

= 1 +Z2

Z4+Z1

Z4+Z1Z2

Z3Z4

=Z3Z4

Z3Z4+Z2Z3

Z3Z4+Z1Z3

Z3Z4+Z1Z2

Z3Z4

Z3Z4 + Z2Z3 + Z1Z3 + Z1Z2

Z3Z4

→ VutVin

=Z3Z4

Z1Z2 + Z3(Z1 + Z2) + Z3Z4

36

Med insatta impedanser (ZR = R, ZC = 1sC ) för alla Z blir överföringsfunktionen:

H(s) =

1s2C1C2

R1R2 + 1sC1

(R1 +R2) + 1s2C1C2

=1

R1R2C1C2s2 + C2(R1 +R2)s+ 1(25)

Och bryter vi ut ω20 = 1

R1R2C1C2, 2α = R1+R2

R1R2C1erhålls:

H(s) =1

R1R2C1C2

(1

s2 + R1+R2R1R2C1

s+ 1R1R2C1C2

)

→ H(s) =ω20

s2 + 2αs+ ω20

(26)

|H(s)| = |H(s = 0)| 1√2→

Vänster led:

|H(s)| =∣∣∣ ω2

0

s2 + 2αs+ ω20

∣∣∣ =|ω2

0||(jω)2 + 2αjω + ω2

0|=

|ω20|

|2αjω + ω20 − ω2|

=ω20√

(2αω)2 + (ω20 − ω2)2

Höger led:

|H(s = 0)| 1√2

=|ω2

0||0 + 2α× 0 + ω2

0|1√2

= 1× 1√2

ω20√

(2αω)2 + (ω20 − ω2)2

=1√2→ 2ω4

0 = (2α)2ω2 + (ω20 − ω2)2

Med återinsättning av komponentvärden istället för 2α och ω20 samt lite algebra erhålles en

ekvation vilken kan lösas för antingen R1 eller R2:

R21(1 +R2

2C21ω

2) +R1(2R2 −2R2C1

C2) +R2

2 −1

C22ω

2= 0 (27)

där ω = 2πfc.

Nedan följer Matlabkoden för härledningen av överföringsfunktionen.

C1 = 47e-9;C2 = 1e-9;

fc = 20000;W = fc*2*pi;

37

R2 = 10000;

K1 = (2*R2*(C2-C1))/(C2*(W^2*R2^2*C1^2+1));K2 = (W^2*R2^2*C2^2-1)/(W^2*C2^2*(W^2*R2^2*C1^2+1));

syms x[R1] = solve(x^2 + K1*x + K2, x);

R1 = double(R1(1)) % Negativt värde har ingen fysisk betydelseR2

W0 = 1/sqrt(R1*R2*C1*C2);alfa = (1/C1)*((R1+R2)/(R1*R2));Qvarde = W0/alfa

sys = tf( W0^2 , [1 alfa W0^2]);bode(sys);fbryt = (bandwidth(sys))/(2*pi)

Matlab-kod för teoretisk Bode-plot för ltret tillsammans de 6 experimentellt uppmätta vär-dena för förstärkningen samt fasförskjutningen

clear all; close all;%% Bode-plot för filter

%% Uppmätta värdenF = [100 1000 10^4 2*10^4 4*10^4 10^5]; % Använda frekvenserG = [0.10657 0.10790 -1.5144 -4.232 -8.69 -16.39]; % Beräknad förstärkning=20log(V_ut/V_in)phi = [-0.7 -3.6 -33.2 -54 -63.6 -73.7]; % Uppmätt fasförskjutning

%% Överföringsfunktion HC1 = 47*10^(-9); C2=10^(-9); R1=1.7741*10^3; R2=0.4;alfa = (R1+R2)/(R1*R2*C1);w0 = 1/(R1*R2*C1*C2*2*pi);f = logspace(2,8,1000);omega=2*pi*f;s=1i*omega;H=w0./(s.^2+alfa*s+w0);

%% Förstärkning beräknad från HabsH=abs(H);absH=20*log10(absH); % Decibels

%% Fasförskjutning beräknad från H

38

theta = angle(H); % Radiansdeg = (theta*180)./pi; % Degrees

%% Plotsubplot(2,1,1)semilogx(f,absH,'b',F,G,'or')axis([0 10^7 -60 10])legend('Teoretisk','Uppmätt')ylabel('Förstärkning, dB')subplot(2,1,2)semilogx(f,deg,'b',F,phi,'or')axis([0 10^7 -180 10])legend('Teoretisk','Uppmätt')xlabel('Frekvens, Hz');ylabel('Fasförskjutning, grader')

7.2 Mikrokontrollerkortet MultiWii

#include <Wire.h>#define GYRO 0x68#define ACC 0x40#define MAG 0x1E

float GyroX,GyroY,GyroZ,GyroTemp;

int g_offx = 0;int g_offy = 0;int g_offz = 0;

void setup()Serial.begin(1200);Wire.begin();delay(100);GyroInit();delay(100);GyroCalibrate();delay(100);AccInit();delay(100);MagInit();

void AccInit() // BMA180Wire.beginTransmission(ACC); // Startar överföring till I2C-slaven med dess (BMA180)

39

// address som param.Wire.write(0x10); // Från databladWire.write(0xB6);Wire.endTransmission();delay(10); // ms, rekommenderat

//// Lågpassfilter 10 HzWire.beginTransmission(ACC);Wire.write(0x0D);Wire.write(0x10);Wire.endTransmission();

Wire.beginTransmission(ACC); // address of the accelerometerWire.write(0x20); // read from hereWire.endTransmission();Wire.requestFrom(ACC, 1);byte data = Wire.read();Wire.beginTransmission(ACC);Wire.write(0x20);Wire.write(data & 0x0F); // low pass filter to 10 HzWire.endTransmission();

Wire.beginTransmission(ACC);Wire.write(0x35);Wire.endTransmission();Wire.requestFrom(ACC, 1);data = Wire.read();Wire.beginTransmission(ACC);Wire.write(0x35);Wire.write((data & 0xF1) | 0x04); // range +/- 2gWire.endTransmission();

void AccRead()Wire.beginTransmission(ACC); // address of the accelerometerWire.write(0x02); // set read pointer to dataWire.endTransmission();Wire.requestFrom(ACC, 6);

// read in the 3 axis data, each one is 16 bits// print the data to terminalSerial.print(" ");float data = Wire.read();data += Wire.read() << 8;Serial.print(data/16767,4);Serial.print(" ");data = Wire.read();

40

data += Wire.read() << 8;Serial.print(data/16767,4);Serial.print(" ");data = Wire.read();data += Wire.read() << 8;Serial.print((data/16767),4);Serial.println();

void GyroInit() // ITG3205

Wire.beginTransmission(GYRO);Wire.write(0x3E); // Power managementWire.write(0x00);Wire.endTransmission();

Wire.beginTransmission(GYRO);Wire.write(0x15); //Bestäm sample rate,Wire.write(0x07); //125 HzWire.endTransmission();

Wire.beginTransmission(GYRO);Wire.write(0x16);Wire.write(0x1E); // +/- 2000 dgrs/sec, 5Hz lågpass, Internal sample rate=1KHzWire.endTransmission();

Wire.beginTransmission(GYRO);Wire.write(0x17); // Interrupt config.Wire.write(0x00); // Set to zero, load zeros into Bits 1 & 3Wire.endTransmission();

void GyroCalibrate()

int tmpx = 0;int tmpy = 0;int tmpz = 0;

g_offx = 0;g_offy = 0;g_offz = 0;

for (char i = 0;i<10;i++)delay(10);GyroRead();tmpx += GyroX;tmpy += GyroY;tmpz += GyroZ;

41

g_offx = tmpx/10;g_offy = tmpy/10;g_offz = tmpz/10;

void GyroRead() Wire.beginTransmission(GYRO);Wire.write(0x1B); // Börjar avläsning på reg. 27Wire.endTransmission(); // Första avläsning är temperatur

Wire.beginTransmission(GYRO);Wire.requestFrom(GYRO, 8); // Vill ha 8 bytes från sensor, fram till reg. 34

// Temperatur = buff[0] & buff[1]int i = 0; // X = buff[2] & buff[3]byte buff[8]; // Y = buff[4] & buff[5]while(Wire.available()) // Z = buff[6] & buff[7]

buff[i] = Wire.read();i++;

Wire.endTransmission();

GyroX = ((buff[2] << 8) | buff[3]) - g_offx;GyroY = ((buff[4] << 8) | buff[5]) - g_offy;GyroZ = ((buff[6] << 8) | buff[7]) - g_offz;GyroTemp = (buff[0] << 8) | buff[1];

Serial.print(" ");Serial.print(GyroX / 14.375); // Data till grader, Tilt framåt, X minskarSerial.print(" "); // Sensitivity of 14.375 LSBs per grad/sekSerial.print(GyroY / 14.375); // Tilt höger Y ökarSerial.print(" ");Serial.println(GyroZ / 14.375);Serial.print("Temperature");Serial.println(35+((GyroTemp+13200) / 280));

void MagInit() // HMC5883l// Kontinuerlig avläsninWire.beginTransmission(MAG);Wire.write(0x02);Wire.write(0x00);Wire.endTransmission();

void MagRead()

42

int x,y,z;

Wire.beginTransmission(MAG);Wire.write(0x03);Wire.endTransmission();

// Ta 6 bytes, start från reg 3 och 6 framåtWire.requestFrom(MAG, 6);if(6<=Wire.available())

x = Wire.read()<<8;x |= Wire.read();z = Wire.read()<<8;z |= Wire.read();y = Wire.read()<<8;y |= Wire.read();

Serial.print(" ");Serial.print(x);Serial.print(" ");Serial.print(y);Serial.print(" ");Serial.println(z);

void loop()

Serial.print("Time,");Serial.println(millis());AccRead();delay(10); // Delay för att den ska hinna printaGyroRead();delay(10);MagRead();delay(10);Serial.println(" ");

43