Inertial  Measurement  Unit Av  miniatyrformat  med  CAN-­‐interface CARL-­‐JOHAN  HÄLL JOEL  OLOFSSON Examensarbete Högskoleingenjörsprogrammen  för  data-­‐  och  elektroteknik CHALMERS  TEKNISKA  HÖGSKOLA Institutionen  för  data-­‐  och  informationsteknik Göteborg,  Sverige,  2013 Innehållet i detta häfte är skyddat enligt Lagen om upphovsrätt, 1960:729, och får inte reproduceras eller spridas i någon form utan medgivande av författaren. Förbudet gäller hela verket såväl som delar av verket och inkluderar lagring i elektroniska och magnetiska media, visning på bildskärm samt bandupptagning. © Carl-Johan Häll, Joel Olofsson, Göteborg 2013 Abstract CPAC Systems develops systems and equipment for heavy equipment ve- chicles. CPAC Systems aims to develop equipment for measuring the position and orientation of a body. Units with this characteristics are often referred to as an Inertial Measurement Unit or simply IMU. The IMU developed in this thesis work should be able to acquire the orientation and movement of heavy construction equipment. This will be accomplished by fusing informa- tion from three di�erent types of sensors: an accelerometer, a gyroscope and a magnetometer. The IMU should provide a CAN bus interface for exter- nal communication, including re-programming of the unit. This will require sophisticated hardware and software design. The unit should also be able to cancel disturbance from surrounding materials and movement. The unit is developed for construction equipment, but could be placed on any object where determination of orientation is desired. Sammanfattning CPAC Systems utvecklar system och apparatur för entreprenadmaskiner. CPAC Systems önskar att utveckla ett mätdon för att kunna positionera en kropp. Målet med examensarbetet är att skapa ett sådant mätdon, komplett med utveckling av kretskort och mjukvara. Mätdon med de här egenskaperna brukar benämnas Inertial Measurement Unit, eller förkortat IMU. IMUn som har utvecklats under det här examensarbetet skall kunna presentera mätdata som kan visualisera rörelse och rotation. Detta möjliggörs genom att sam- manställa värden från tre olika sensorer: en accelerometer, ett gyroskop och en magnetometer. IMUn skall även kunna möjliggöra programmering av IMUn via en CAN-buss, detta kräver i sin tur so�stikerad hårdvara och mjukvara. Enheten skall även kunna �ltrera bort störningar från material och rörelse. IMUn är konstruerad för entreprenadmaskiner, men kan egentligen placeras på ett godtyckligt objekt för att kunna mäta kroppens rörelse och rotation. Förord Den här rapporten är en del av vårt examensarbete för högskoleingenjörs- programmet för Elektro- och Datateknik vid Chalmers Tekniska Högskola, Göteborg. Examensarbetet är om 15HP. Arbetet har pågått under tio veckor under våren 2013 hos uppdragsgivaren CPAC Systems. Handledare hos CPAC Systems har varit Peter Forsberg. Handledare på Chalmers Tekniska Högskola via Institutionen för data- och informations- teknik har varit Sakib Sistek. Vi skulle först vilja tacka Peter Forsberg, vår handledare på CPAC Systems för all hjälp, samt CPAC Systems för att ha erbjudit oss chansen att genom- föra detta examensarbete. Vi skulle även vilja tacka Magnus Johansson, Bo Eriksson och Fredrik Karlemon som har tagit sig tid att besvara våra frågor och väglett oss vid vår hårdvarukonstruktion. Även ett stort tack till Martin Jangeberg som har givit oss nyttiga tips om fallgropar vid uppstart av ett mjukvaruprojekt. Sist vill vi tacka Sakib Sistek för all den energi och motivation han givit oss under examensarbetets gång. Carl-Johan Häll Joel Olofsson Innehåll 1 Inledning 1 1.1 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 Mål . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Teknisk bakgrund 3 2.1 Inertial Measurement Unit (IMU) . . . . . . . . . . . . . . . . 3 2.1.1 Accelerometer . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.2 Gyroskop . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.3 Magnetometer . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Mikrokontroller . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Sensorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3.1 Val av sensorer . . . . . . . . . . . . . . . . . . . . . . 4 2.3.2 MPU-6050 . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.3 HMC5883L . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4 Standarder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4.1 CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4.2 I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3 Genomförande 15 3.1 Hårdvarukonstruktion . . . . . . . . . . . . . . . . . . . . . . 15 3.1.1 Strömförsörjning . . . . . . . . . . . . . . . . . . . . . 15 3.1.2 CAN-hantering . . . . . . . . . . . . . . . . . . . . . . 17 3.1.3 I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.4 Sensorer . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1.5 Mikrokontroller . . . . . . . . . . . . . . . . . . . . . . 20 3.1.6 Kretskortslayout . . . . . . . . . . . . . . . . . . . . . 21 3.2 Mjukvaruutveckling . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.1 Huvudprogram . . . . . . . . . . . . . . . . . . . . . . 23 3.2.2 CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.3 I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.3.1 MPU-6050 . . . . . . . . . . . . . . . . . . . 25 3.2.3.2 HMC5883L . . . . . . . . . . . . . . . . . . . 26 3.2.4 Läsning av data . . . . . . . . . . . . . . . . . . . . . . 26 3.2.5 Beräkning av data . . . . . . . . . . . . . . . . . . . . 27 3.2.5.1 Kalman �lter . . . . . . . . . . . . . . . . . . 27 3.2.5.2 Vinkelberäkning . . . . . . . . . . . . . . . . 29 4 Resultat 31 4.1 Hårdvara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.2 Mjukvara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.3 Veri�ering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5 Slutsats 33 5.1 Resumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.2 Generaliseringar . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.3 Kritisk diskussion . . . . . . . . . . . . . . . . . . . . . . . . . 34 Beteckningar ACK Acknowledgement AD Analog to Digital ASIC Application Speci�c Integrated Circuit CAN Controller Area Network GPS Global Positioning System I2C Inter-Integrated Circuit IMU Inertial Measurement Unit LSB Least Signi�cant Bit PCB Printed Circuit Board RISC Reduced Instruction Set Computer RMS Root Mean Square (e�ektivvärde) SCL Serial CLock SDA Serial DAta line SPI Serial Peripheral Interface TVS Transient Voltage Suppression TWI Two Wired Interface Kapitel 1 Inledning 1.1 Bakgrund CPAC Systems är ett fristående företag inom Volvogruppen. De arbetar bland annat med systemintegration av säkerhetskritiska system för fordonsin- dustrin. CPAC Systems önskar att utvärdera möjligheten att utveckla ett mätdon för att kunna presentera en kropps positionering och orientation. På entreprenadmaskiner kan denna positionering t.ex. ske med hjälp av GPS samt beräkning över den egna geometrin till önskad del. Tillsammand med detta förfaringssätt kan information från en position ges i önskad del i ar- betsmekaniken, vilket kan göras med hjälp av ett antal so�stikerade Inertial Measurement Units, hädanefter benämnt IMU. Det är då viktigt att kunna motverka de dynamiska e�ekterna, det vill säga att kunna indikera en sann inklination under alla förhållanden. 1.2 Syfte Syftet med det här examensarbetet är att konstruera en liten IMU med full kompensering av drift. Drift är en felvisande e�ekt i sensorer, som är en kon- sekvens av den grundläggande tekniken i sensorerna. Enheten skall ge en korrekt vinkelanvisning gentemot horisontalplanet. En- heten skall sköta all kommunikation via CAN. 1 1.3 Mål � Designa kretskort för IMU � Utvärdera komponenter för konstruktion av hårdvara � Använda tillgänglig design av hårdvara och mjukvara i så stor utsträck- ning som möjligt, men förbättra där det behövs � Bygga in i tåligt chassi för montering på entrepenadmaskin � Testa färdig konstruktion av IMU på en entreprenadmaskin 1.4 Avgränsningar Avgränsningar som är uppsatta av uppdragsgivaren är följande: � All kommunikation skall ske via CAN � Programmering av styrenhet via CAN � Utdata skall presenteras som rådata från sensorer såväl som behandlad data 2 Kapitel 2 Teknisk bakgrund 2.1 Inertial Measurement Unit (IMU) En IMU är en elektronisk enhet som kan bestå av accelerometrar, gyroskop och magnetometrar. Med hjälp av dessa sensorer kan hastighet, positione- ring och gravitation beräknas. Vanliga tillämpningar är allt från sensorer i mobiltelefoner till �ygindustrin [19, 5]. 2.1.1 Accelerometer En accelerometer mäter accelerationen den utsätts för. Inuti accelerometern �nns en massa som �yttar sin tyngdpunkt och massa då den accelerar, den skapar då ett tryck på det hölje som omsluter massan. Genom att mäta trycket på höljet kan accelerationen från sensorn utläsas [19]. 2.1.2 Gyroskop Ett gyroskop mäter rotationen på var axel. Detta gör den genom att mäta rörelsemängdsmomentet hos en kropp. Genom att kombinera alla dessa axlar kan kroppens alla vinklar urskiljas [19]. 2.1.3 Magnetometer En magnetometer mäter ett magnetiskt fälts styrka på var axel i ett tredi- mensionellt rum. Fältstyrkan på alla axlar beräknas sedan till en resultant för att visa magnetisk riktning och styrka [11, 25]. 3 2.2 Mikrokontroller För kommunikation och beräkning av rådata behövs en styrenhet. Styrenhe- ten skall ta emot rådata från sensorerna samt utföra beräkningar på dessa för att kunna presentera användbar data till en huvudstyrenhet. Styrenheten kommunicerar med andra enheter på hjullastaren med hjälp av en CAN-buss. Styrenheten behöver möta kraven för kommunikation med digitala sensorer, CAN-kommunikation samt att vara lämplig för tillämpningar inom fordonsin- dustrin. Som styrenhet har STM32F107RC från STMicroelectronics önskats av upp- dragsgivaren, detta på grund av att utvecklingsverktyg har funnits tillgängli- ga. STM32-serien har en 32-bitars processorer med ARM-arkitektur. Krets- familjen STM32 kännetecknas av ett gediget utbud av möjligheter till kring- utrustning och mjukvarubibliotek. STM32-serien kännetecknas av: � Låg kostnad ur ett pris/prestanda perspektiv � Stort utbud av hårdvarufunktioner med ARM Cortex-M3 Core � Låg energiförbrukning � Snabb minneshantering � Hög prestanda STM32F107RC är lämpad för den här applikationen då den har stöd för två av varandra oberoende CAN-bussar. Den stödjer även gränsnitten för I2C och SPI som används digital kommunikation på kretsnivå [22]. 2.3 Sensorer 2.3.1 Val av sensorer Vid val av sensorer undersöktes marknaden efter liknande funktion, kostnad samt tillgänglighet. Efter det att ett begränsat urval av sensorer tagits fram, ställdes dessa mot varandra där egenskaper som mätnoggrannhet, inställ- ningsmöjlighet samt tillgänglig dokumentation och information om enheten från tillverkaren prioriterades. 4 Accelerometer De tre accelerometrarna som sållades ut var från tillverka- ren InvenSense (MPU-90x0 och MPU-60x0) och STMicroelectronics (LSM303d). De tre sensorerna hade likvärdiga egenskaper gällande mätområde och stöttå- lighet, dock erbjöd InvenSense lättillgänglig och mer grundlig dokumentation om sina produkter. Accelerometer MPU (-60x0 & -90x0) [5, 6] LSM303d [23] Enhet Mätområde ±2, ±4, ±6, ±8, ±16 ±2, ±4, ±6, ±8, ±16 g Känslighet 0.061, 0.122, 0.244, 0.488 0.061, 0.122, 0.183, 0.244, 0.732 mg/LSB Störningsdensitet 400@1kHz 150@100Hz µg√ Hz Stöttålighet 10k 10k g Tabell 2.1: Jämförelse av accelerometrar Gyroskop Då val av gyroskop utvärderades återfanns även här tillverkarna InvenSense (MPU-90x0 och MPU-60x0) och STMicroelectronics (L3GD20). I detta fall visade sig större olikheter mellan de olika tillverkarnas produkter. InvenSense produkter utmärkte sig med större mätnoggrannhet och lägre störningskänslighet. Gyroskop MPU (-60x0 & -90x0) [5, 6] L3GD20 [24] Enhet Mätområde ±250, ±500, ±1000, ±2000 ±250, ±500, ±2000 º/s Känslighet 7.6, 15, 30.7, 61 8.75, 17.5, 70 mº/s LSB Störningsdensitet 0.005 0.03 º/s√ Hz Stöttålighet 10k 10k g Tabell 2.2: Jämförelse av gyroskop 5 Magnetometer Vid val av magnetometer återfanns tre enheter. Honeywell (HMC5883L), STMicroelectronics (LSM303D) och AsahiKASEI (AK8975). AK8975 är implementerad av InvenSense i deras MPU-9xx0 serie. Efter kon- takt med tillverkaren av denna krets kunde begränsad dokumentation utrö- nas. Tillverkaren av krestsen avrådde även från implementering av sensorn AK8975 för fordonsapplikationer [16]. Då Honeywell enligt produktblad för HMC5883L erbjuder mjukvaru�lter för motverkan av störningar från hårt och mjukt järn sågs här en möjlighet för noggrannare mätvärden. Magnetometer HMC5883L [2] LSM303D [23] AK8975 [1] Enhet Mätområde ±1, ±2, ±4, ±8 ±2, ±4,±8,±12 ±12 gauss Känslighet 0.73(MIN) 4.36(MAX) 0.080, 0.160, 0.320, 0.479 3 (MAX) mgauss/LSB Störningsdensitet 2 5 - mgauss/RMS Känslighet vid korsade axlar ±0.2 ±1 - %FS/gauss Maximal fältstyrka - 10000 - gauss Maximalt magnetiskt störfält - 20 - gauss Chocktolerans - 10k - gauss Tabell 2.3: Jämförelse av magnetometrar Slutsats Slutligen återfanns tre alternativ: � MPU-60x0 (accelerometer och gyroskop) med HMC5883L � MPU-90x0 (accelerometer, gyroskop samt magnetometer) � LSM303D (accelerometer och magnetometer) med L3GD20 (Gyroskop) 6 Enligt avrådande från tillverkaren InvenSense lämpade sig MPU-90x0 ej för vår implementation på grund av en för stor störningskänslighet i den inte- grerade magnetometern (AK8975) [16]. Eftersom dokumentationen kring MPU-6xx0 var god och ett mer noggrant gyroskop gentemot andra tillverkare valdes MPU-60x0. MPU-60x0 erbjuder även enkel implementation av en extern magnetometer i form av en extern I2C-buss och en intern ASIC med beräkningsfunktioner. 2.3.2 MPU-6050 MPU-6050 är en ytmonterad mikroelektromekanisk krets som består av en treaxlig gyrometer samt en treaxlig accelerometer tillsammans med en ASIC som tillverkas av InvenSense. Dessa två sensorers data ges som indata till den inbyggda ASICen för att kunna ge en mer precis utdata än vad en en- kel accelerometer eller gyrometer kan ge. Gyroskopet stödjer mätning från ±250°/s till ± 2000°/s och accelerometern har ett mätområde från ±2g till ±16g beroende på krav på upplösning vid samplingen. Med hjälp av MPU- 6050 kan rådata hämtas och beräkningar utföras på ovan nämnda styrenhet. MPU-6050 kan kommunicera med andra enheter i ett datorsystem via en I²C-buss. MPU-6050 har även en extra extern I²C-buss. Den externa I2C- bussen är enligt tillverkaren till för att ge möjligheten att kommunicera med en 3-axlig magnetometer. MPU-6050 kan då ställas till ett I²C-master läge och på så sätt ta emot data kontinuerligt från den externa magnetometern och placera den i ett eget lokalt register. På så sätt kan hämtning och be- räkning underlättas då kommunikationen mellan styrenhet och MPU-6050 endast består av två noder [5]. 2.3.3 HMC5883L HMC5883L är en ytmonterad digital treaxlig magnetometer som består av magnetoresistiva sensorer som tillverkas av Honeywell. Med hjälp av HMC5883L kan den magnetiska riktningen av koordinatsystem beräknas. Tillsammans med den beräknande rådatan från MPU-6050 kan en riktning i förhållan- de till jordens magnetfält bestämmas av det erhållna koordinatsystemet. HMC5883L kommunicerar med andra enheter via en I²C-buss [2]. 7 2.4 Standarder 2.4.1 CAN CAN-bussen (Controller Area Network) är en buss där kommunikationen sker seriellt. Data skickas ut på bussen vid behov och möjlighet �nns. En nod på CAN-bussen kan även begära data av andra noder. Bussen togs fram av Bosch och Intel under 80-talet då man såg ett behov av en buss för att kommunicera med all elektronik och mikroprocessorer som börjat ta plats i fordon. Som utgångspunkt för utvecklingen siktade man på att all elektronik i ett fordon skulle kunna styras via den nya bussen [18]. CAN-bussen kännetecknas av dess, i förhållande, höga hastighet, samt dess �exibilitet. Då det i ett system existerar en CAN-buss är det möjligt att an- sluta en ny nod, utan att på andra sätt ändra kon�guration hos andra redan anslutna noder [18]. CAN-bussen är en så kallad �multi-master� buss, vilket innebär att det inte �nns någon hierarkisk arkitektur utan alla noder anslutna till bussen kan sända och begära data [18]. För att undvika kollisioner på bussen använder sig CAN-bussen av prioritering i form av arbitrering [18]. Var nod ansluten till bussen erhåller en unik adress. Då en nod vill sända ett meddelande på bussen skickas först en Start of Frame, detta följt av en adress. Om �era noder vill sända meddelande på bussen samtidigt tilldelas bussen till en av noderna. Detta sker genom så kallad arbitrering. Båda nodernas adresser kommer då att jämföras bit för bit, till dess att noden med lägst adress er- hållits. Noden med lägst adress kommer då att tilldelas bussen för att få sända sitt meddelande. Noden med den högre adressen slutar då att sända sitt meddelande och väntar tills bussen blivit ledig för att då återigen försöka sända sitt meddelande [18]. 8 Figur 2.1: Exempel på en CAN-buss CAN-bussen speci�erades i en ny version, 2.0, av Bosch 1991. Version 2.0 �nns i två format, standard (2.0a) och extended format(2.0b). Standardfor- matet använder sig av adresser på 11-bitars längd, medan extended format använder sig av 29-bitars adresser, således erbjuder CAN 2.0b möjlighet att adressera �er noder [10]. På CAN-bussen kan fyra olika typer av meddelanderamar tillämpas [18, 10]: � Data Frame � Remote Frame � Overload Frame � Error Frame Data Frame är det vanligaste meddelandet. I detta meddelande skickar en nod ett meddelande innehållande information till andra noder, det är alltså data frame som används för dataöverföring. Remote frame används för att av en mottagarnod efterfråga information av en sändarnod. Error frame skickas av noder som upptäcker ett protokollfel på bussen. Overload frame skickas av 9 en nod som av någon anledning inte klarar av att ta emot alla meddelande som skickas. Ett meddelande av data frame-typ är uppdelad i sju delar SOF � Start of frame 1-bit lång, skall alltid vara en logisk 0. Används för att synkronisera noder på bussen [18, 10]. ARB � Arbitration Arbitreringsfältet skiljer mellan standardforma- tet samt det utökade formatet. Standardformatet innehåller identi�erare om 11-bitar samt en bit, remote transmission request (RTR). RTR-biten talar om huruvida meddelandet är av typen data frame eller remote frame. Om ett meddelande är av det utökade formatet ersätts RTR-biten av en SRR- bit. SRR, substitute remote request. Detta används för att göra meddelandet kompatibelt med noder som endast använder sig av standard-meddelanden. För det utökade formatet läggs även IDE-biten (se CTRL) i arbitreringsfäl- tet, detta för att meddela noder att meddelandet är av det utökade formatet. Sist tillkommer de sista 18 adresser [18, 10]. CTRL � Control I kontrollfältet skiljs det utökade och standardformat för data frames åt. För standardformat åter�nns här IDE-biten (Se arbitre- ring för utökat format), samt en reserverad bit r0. För det utökade formatet �nns ytterligare en reserverad bit, detta för att ersätta IDE-biten som �yttats till arbitreringsfältet. I båda formaten kommer fyra bitar DLC, data length code. Dessa bitar anger hur många byte datafältet kommer att innehålla [18, 10]. CRC � Cyclic redundancy Check CRC är en kontrollsumma för fälten som redan sänts. Summan används av mottagaren för att säkerställa att alla bitar nått fram. Summan består av 15-bitar samt en avgränsningsbit [18, 10]. ACK � Acknowledge Acknowledgefältet används av mottagare för att meddela sändare att meddelandet är mottaget [18, 10]. 10 EoF � End of Frame I slutet av ett meddelande skickar sändaren sju bitar för att indikera att sändning är slutförd [18, 10]. Figur 2.2: �Standard� format för en data frame Figur 2.3: �Extended� format för en data frame 2.4.2 I2C I²C (inter-integrated circuit) är en multimaster-buss för kommunikation mel- lan integrerade kretsar. Standarden utvecklades av Philips under 1980-talet [4, 17]. I²C bussen är ett TWI (two wired interface), där data skickas synkront seriellt på två ledare, SDA och SCL. SDA är ledaren där data skickas på och SCL är den klockbärande signalen för att göra kommunikationen synkron [4]. Bussen består förutom av de två ledarna minst en master-nod och minst en slav-nod samt två så kallade pull-up resistorer. Antalet slavnoder begrän- sas av adressutrymmet som antar adresser om 7- eller 10-bitar samt av att bussens kapacitans ej får överstiga 400pF [3, 13, 17]. Fler noder medför ökad kapacitans på bussen då varje nod på bussen bidrar till den totala kapacitan- sen. Varje nod ansluten på bussen har av tillverkaren en förprogrammerad adress, dock så erbjuder vissa tillverkare möjligheten att manipulera en eller �era adressbitar för att möjliggöra �era noder av samma typ på samma buss. Pull-up resistorerna används för att säkerställa att rätt nivå för logisk hög nivå erhålls. Logisk hög nivå speci�ceras enligt I2C-protokollet till 0.7× Vdd och logisk låg nivå till 0.3× Vdd. 11 Figur 2.4: Exempel på en I2C-buss Värdet på pull-up resistorerna bestäms av matningsspänningen, den to- tala kapacitansen samt inströmmen vid logisk hög nivå och beräknas enligt algoritm 1: I2C-protokollet kan tillämpas med en master/slave hierarki samt även med en multi-master hierarki. De olika hierarkierna beskrivs nedan. Master-Slave Hierarki Master-slave hierarkin struktureras genom att en Master-nod sänder en klocksignal samt initierar kommunikationen med slav- noderna. Slav-noderna i sin tur mottar klocksignalen och besvarar den initi- erade kommunikationen från Master-noden [17]. För att en slav-nod skall få sända data börjar master-noden med att sän- da ett start-meddelande och sedan adressen till den nod master-noden vill kommunicera med. Vill master-noden skriva till en slav-nod sätter den biten följd av adressen till "noll" och lägger sedan ut datan som skall skrivas till noden. Slav-noden svara sedan med ett ACK-meddelande, i form av en "et- ta" på bussen, därefter sänds eventuellt �er meddelanden. Vill en master-nod istället läsa från en slav-nod skriver mastern en "etta" på biten som följer efter adressen. Master-noden svarar sedan med ett ACK-meddelande efter 12 Algoritm 2.1 Formler för dimensionering av pull-up resistorer [26, 13] Rp ≥ Vdd − Vol iol Vol = { 0.4V då Vdd > 2V 0.2V då Vdd ≤ 2V Rp ≤ Tr (T2 − T1)× Cbus Tr = Maximala stigtiden Cbus = Bussens totala kapacitans T1 = Stigtiden för att nå logisk låg nivå T2 = Stigtiden för att nå logisk hög nivå T1 och T2 beräknas enligt: T2 = −RC × ln1− 0.7× Vdd Vdd → T2 = RC × 1.20397 T1 = −RC × ln1− 0.3× Vdd Vdd → T1 = RC × 0.356675 varje meddelande. En sändning termineras av att en master-nod sänder en stoppbit [17]. Multi-Master Hierarki I²C är en multi-master buss vilket innebär att �era noder anslutna till bussen kan agera master, alltså bestämma vilken eller vilka anslutna slav-noder som får sända och när de/den skall sända [13]. Då en buss har �era master-noder är det av stor vikt att kollisioner ej upp- står. För att undvika detta använder sig I²C av två metoder, Synkronisering av klocka och arbitrering av bussen [13]. I²C-bussen kan implementeras i fem olika hastigheter: � Standard-mode upp till 100 kbit/s � Fast-mode upp till 400 kbit/s 13 � Fast-mode plus upp till 1 Mbit/s � High-speed mode upp till 3.4 Mbit/s � Ultra fast-mode upp till 5Mbit/s (Unidirectional) [13] Samtliga lägen är bakåtkompatibla utom Ultra fast-mode, detta då denna endast stöder enkelriktad kommunikation medan de övriga stödjer dubbel- riktad kommunikation [13]. Enheter och kretsar med stöd för kommunikation via I²C-bussen har av tillverkaren ofta en förutbestämd maxhastighet. 14 Kapitel 3 Genomförande 3.1 Hårdvarukonstruktion Enligt uppdragsgivarens krav skall kretsen kunna hantera en extern mat- ningsspänning i intervallet 6V till 36V. Första steget i hårdvarukonstruktionen var att skapa en schemaritning av kretsen, detta gjordes med hjälp av mjukvaran OrCAD Capture från Ca- dence. Efter en undersökning vilken komponenter som behövdes för att möj- liggöra konstruktionen placerades komponenterna ut. Det resulterade i en uppdelning av kretskortet i fyra block. 3.1.1 Strömförsörjning Kretsen får sin matningsspänning via kontaktdonet för CAN som är en M12- kontakt. Kontaktdonet för även med sig kommunikationsportar för Hög och Låg CAN-signal.. De integrerade kretsar på kortet kräver likriktade spänningsnivåer på både 5V och 3.3V vilket medför att den externa matningsspänningen från CAN- bussen måste regleras då den externa matningsspänningen ligger inom inter- vallet 6V till 36V. 15 Figur 3.1: M12-kontakt Kretsen är även tvungen att klara av spänningspikar och transienter [27]. Det hanteras genom att placera en varistor samt en transientdiod parallellt vid inloppet av den externa matningsspänningen. Kondensatorer och en se- riekopplad Schottkydiod har även placerats för att möjliggöra en jämn och likriktad spänning som är skyddad mot eventuella överslag i spänning och ström. En regulator är placerad efter spänningsskyddssteget som tar den externa matningsspänningen och regulerar den ner till en nivå på 5V. 5V spänningen passerar sedan ytterligare kondensatorer för att eliminera eventuellt rippel från spänningsomvandligen. Därefter kan en referensspän- ning på 5V erhållas. 5V spänningen matar i sin tur en ytterligare regulator för att få ner den till en nivå på 3.3V. Även denna regulator �ltreras med hjälp av kondensatorer för att erhålla en rippelfri referensspänning på 3.3V. Kondensatorerna är placerade enligt tillverkarnas datablad och givna vär- den från uppdragsgivaren. 16 Figur 3.2: Schemaritning av spänningssteg 3.1.2 CAN-hantering Hanteringen av CAN �nns för att regulera CAN-tra�ken så att den kan be- handlas av kretskortets mikrokontroller. Det är även nödvändigt att placera ut skydd för att begränsa transienter och elektrostatiska laddningar då hårdvarukonstruktioner inom fordonsindustrin utsätts för störningar och transienter [27]. För att skydda mikrokontroller från störningar �nns �era förhållningssätt att ta ställning till. Twisted Pair (TP) Twisted pair är vanligt förekommande vad gäller de �esta hårdvarugränssnitt och åter�nns ibland annat i Ethernet-standarderna. TP motverkar magnetfält från en ledare genom att tvinna två stycken ledare vilket medför att de två ledarnas magnetfält motverkar varandra [8, 9, 12]. Filter För att eliminera ytterligare störningar på CAN-bussen används låg-pass �lter. Filtret släpper alltså igenom signaler, medan högfrekvent brus som kan misstolkas och störa andra signaler elimineras. Filter används i fördel tillsammans med TP [8, 9, 12]. CAN Choke Med en CAN Choke kan Common Mode Rejection Ratio (CMRR) höjas för signalerna till CAN-transcievern. CAN-choken kommer att höja impedansen för spänningskillnaden vid ett recessivt (logisk etta) tillstånd, samt sänka densamma vid ett dominant (logisk nolla) tillstånd [8, 9, 12]. TVS-diod För att skydda CAN-transciever samt mikrokontroller från höga transienter i samband med anslutning till CAN-bussen kan en tran- sientskyddsdiod placeras i anslutning till CAN-transcievern. Dioden har en 17 reaktionstid på en nanosekund och motverkar då snabbt transienter [8, 9, 12]. Då en kontrollenhet för CAN-gränssnittet �nns inbyggt på mikrokontrollern behöver hårdvarukonstruktionen endast en CAN-transciever för att kunna sända/mottaga på entrepenadmaskinens CAN-buss. CAN-hanteringen är konstruerad sådan att de direkta signalerna från CAN- bussen först får passera ett transientskydd i form av en integrerad krets med två stycken transientdioder samt kondensatorer. Därefter går signalerna till en drossel för att strypa höga frekvenser och vidare via parallellkopplade kondensatorer. Signalerna går därefter vidare till CAN-transceivern för att kunna bearbetas av mikrokontrollern. Figur 3.3: Implementation av CAN-skydd 3.1.3 I2C Då MPU-6050 har stöd för Standard-mode och Fast-mode dimensioneras Rp enligt följande. I fallet då matningsspännigen är 3.3V medför det Vol = 0.4V får båda fallen. 18 Algoritm 3.1 Beräkning av pull-up resistor Standard-mode: Tr = 1000ns [13] Rp = { Rp ≥ 3.3−0.4 3mA = 966.7Ω Rp ≤ 1000ns (1.203970−0.35667)×10×10−11 = 118kΩ → 966.7Ω ≤ Rp ≤ 118kΩ Fast-mode: Tr = 300ns [13] Rp = { Rp ≥ 3.3−0.4 3mA = 966.7Ω Rp ≤ 1000ns (1.203970−0.35667)×10×10−11 = 35.4kΩ → 966.7Ω ≤ Rp ≤ 35.4kΩ Eftersom intervallet för pull-up resistorn i fallet för standard-mode är en del av intervallet för fast mode innebär det att ett värde inom intervallet 966.7Ω ≤ Rp ≤ 35.4kΩ möjliggör kommunikation i båda hastigheterna. I enlighet med gällande implementationer av I²C-bussen med STM32F107RC, datablad för STM32F107RC samt beräkningar har kretskortet bestyckats med två pull-up resistorer om 4.7kΩ [22, 26]. 19 Figur 3.4: I2C-implementation 3.1.4 Sensorer Sensorblockets funktion är att skicka rå mätdata från sensorer till mikro- kontrollen för ytterligare beräkning. Kommunikation mellan MPU-6050 och mikrokontroller sker via en I²C-buss. MPU-6050 kommunicerar sedan i sin tur med HMC5883L via den externa I²C-bussen som �nns tillgänglig på MPU-6050. MPU-6050 agerar då Master och läser data från HMC5883L och lagrar detta i ett register. 3.1.5 Mikrokontroller Hårdvarukonstruktionen för mikrokontrollen består av komponenter för han- tering av referensspänningar för logiska nivåer och AD-omvandlingar samt en extern oscillator. Eftersom projektets implementation inte använder sig utav några referens- spänningar förutom matningsspänningen till kretsen kopplas de oanvända re- 20 ferensspänningportarna enligt tillverkarens datablad. Referensdatabladet för mikrokontrollen anger att de oanvända portarna skall kopplas med parallellt med avkopplingskondensatorer som går från +3.3V till jord enligt angivna värden beroende på antalet oanvända portar [21]. Figur 3.5: Exempel för hantering av matningsspänning och referensspänning från datablad [21] En kristall används för att skapa en stabil och tillförlitlig klocka till mikro- kontrollen och de angivna belastningskapacitanserna är utsatta enligt produ- centens datablad. 3.1.6 Kretskortslayout Kretskortets layout, eller PCB (Printed Circuit Board), för IMUn designa- des i CAD-verktyget Cadence Allegro PCB Editor. För att erhålla en så liten storlek som möjligt är kortet dubbelsidigt det är alltså komponenter place- rade på båda sidor om kortet på ovan-och undersida. Kortet är kvadratiskt med sidor om 32 millimeter, med 6 lager, varav ett för matningsspänning, jord och fyra stycken signalbärande lager. Mellan varje lager �nns ett tunt isolerande skikt av laminerat glasförstärkt epoxy av typen FR-4. Lager 1 - Top Top-lagret är ett signalbärande lager där komponenter är placerade med tillhörande komponenter. Lagret är designat för att klara högra spänningar och innefattar komponenter för strömförsörjning och CAN- hantering. 21 Lager 2 - Ground Helplanslager för jordnivå. De andra lagerna kom- mer åt detta lager med hjälp utav viahål. Detta lager fungerar även som avskärmning för andra mer känsliga signalbärande lager. Lager 3 - IS1 IS1 är ett signalbärande som underlättar signaldragning- en och platsbritsen på kortet. IS2 sköter kommunikation mellan komponenter som är placerade på top och bottom lagren. Lager 4 - IS2 IS2 är likvärdigt IS1 och har samma funktion. Lager 5 - 3.3VC 3.3VC är ett helplanslager för matningsspänning. Då de �esta komponenter på kretsen använder en likriktad matningsspänning på just 3.3V är det praktiskt att använda ett helplanslager för implementationen. De resterande lagren kommer åt planet med hjälp av viahål. Lager 6 - Bottom Bottom-lagret är ett signalbärande lager där käns- liga komponenter såsom sensorer och mikrokontroller är placerade. Lagret är designat så att vår magnetometer inte har några strömförande ledare under sig då detta skapar mätfel på grund alstrade magnetfält från ledare. 22 3.2 Mjukvaruutveckling Mjukvaran skall uppfylla följande uppgifter: � Omprogrammering av styrenhet via CAN � Hämtning och beräkning av sensordata � Sänding av beräknad data via CAN Utveckling av mjukvara har skett i utvecklingsmiljön IAR Embedded Work- bench for ARM från IAR. Programvaran har ett brett stöd för kretsar från STMicroelectronics, möjlighet till dissasemblering i realtid samt stöd för �er- talet kända debuggers och programmerare. Möjlighet �nns att skriva vår ap- plikation i C89, C99 och C++, och i fallet för denna applikation valdes C99 då detta är standard hos uppdragsgivaren, samt att �ertalet av standard- biblioteken tillhandahållna från STMicroelectronics är utvecklade i denna version av C. 3.2.1 Huvudprogram Huvudprogrammets syfte i mjukvarukaruutvecklingen är huvudsakligen att initeria av hårdvara och avbrottshantering. Övriga funktioner hanteras av subrutiner som aktiveras av tidsbaserade avbrott, dessa avbrott genereras med hjälp av en realtidsklocka. Vid vissa tider så hoppar alltså huvud- programmet till subrutiner som utför operation så som mätningar, CAN- kommunikation och CAN-programmering. 3.2.2 CAN CAN-kommunikationen är uppbyggd kring STMicroelectronics standardbib- liotek för CAN-kommunikation tillsammans med uppdragsgivarens egen stan- dard för CAN-meddelanden. När ny data från sensorer behandlats kommer mikrokontrollern att skicka tre CAN-meddelanden innehållandes Yaw, Pitch och Roll. 3.2.3 I2C För att möjliggöra kommunikation via I2C-bussen har STMicroelectronics standardbibliotek för gränssnittet använts som mall. Utöver detta har �er- 23 talet metoder utvärderats för att möjliggöra ett stabilt och konsekvent till- vägagångssätt för att läsa och skriva till och från noder anslutna till bussen. STMicroelectronics beskriver �ertalet av dess i styrdokumentet �AN2824�, och metoden �polling� har använts som utgångspunkt [20]. Metoden byggs upp runt �era kontroller för att testa att: � I2C-bussen inte är upptagen � Testa ifall �era master-noder är anslutna till bussen � Begära master-läge � Begära master-mottagning/sändningsläge Metoden används för läsning till både MPU-6050 och HMC5883L 24 Figur 3.6: Flödesdiagram över läsning av 1-2 bytes från en nod [20] 3.2.3.1 MPU-6050 Innan kommunikation med MPU-6050 är möjlig måste ett av mikrokontrol- lerns två I2C-gränsnitt initieras. Vilken av dessa som skall initieras de�nie- ras av användare, vilket ger möjlighet till en mer �exibel kon�guration och tillämpning av uppbyggda bibliotek. När ett gränssnitt kopplats mot noden testas anslutningen genom att läsa från ett �Who Am I�-register, registret skickar ett ID från noden och på så sätt bekräftas anslutningen. När an- slutningen bekräftats skrivs data till �ertalet kon�gurationsregister, dessa 25 skrivningar kan lätt manipuleras genom metodanrop för att ge en önskad karakteristisk. Exempel på kon�gureringar är: � Klockkälla � Mätområde för accelerometer � Mätområde för gyroskop � Samplingsfrekvens för mätning � Hantering av extern I2C-buss 3.2.3.2 HMC5883L Likt MPU-6050 måste ett gränssnitt för HMC5883L väljas. I fallet för denna krets kommer samma gränssnitt som MPU-6050 användas för HMC5883L, men även här �nns möjlighet att välja ett annat gränssnitt. När en anslutning upprättats mot HMC5883L ställs även utvecklaren här för en del valmöjlig- heter gällande kon�gurering: � Brusreducering � I2C-kon�guration � Samplingsfrekvens � Mätområde 3.2.4 Läsning av data Obehandlad data läses från sensorer av mikrokontroller då nya värden �nns tillgängliga, samt då I2C-bussen är ledig. Genom en läsning av MPU-6050 erhålls samtliga vektorer från gyroskop och accelerometer. Var vektor är re- presenterad i 2 byte, alltså läses totalt 12 byte från MPU-6050. Datan läses sedan in i en C-struct bestående av sex 16-bitars heltal med tecken, ett heltal för var riktning och sensor, för vinkelberäkning samt korrigering. På liknan- de sätt läses HMC5883Ls värden in i en C-struct, bestående av tre 16-bitar långa heltal med tecken. Även i fallet för HMC5883L läses vektorerna om två bytes vardera i en läsning av sensorn. 26 I �gur 11 visas en läsning från MPU-6050-sensorn. I detta fall matas de två byten innehållande accelerometerns X-axel ut på bussen. Figur 3.7: Läsning av data via I2C 3.2.5 Beräkning av data För beräkning av obehandlad data har två tillvägagångssätt valts, Kalman�l- ter för att estimera ett så korrekt mätvärde som möjligt samt Eulervinklar för att sammanfoga och ge en sann bild av kretsens orientering. Eulervinklarna representeras av yaw, pitch och roll. 3.2.5.1 Kalman �lter Bakgrund Kalman�ltret är ett rekursivt �lter som tillämpas för att skapa ett så korrekt estimerat mätvärde ur en brusig miljö. Eftersom �ltret är rekursivt betyder det att det använder sig av föregående värden för reella mätningar. Filtret tillämpas inom allt från signalbehandling till reglerteknik. Filtret grundar sig på publikationer av Rudolf E. Kálmán tillsammans med Richard S. Busy [7]. Algoritm 3.2 Konceptet av Kalman�ltret [15] X̂k = Kk × Zk + (1−Kk)× X̂k−1 X̂k = Nuvarande estimation Kk = Kalman ökning Zk = Mätvärdet X̂k−1 = Tidigare estimation k = Tillståndsnotering Koncept 27 Visualisering Alla parametrar i ekvationen är kända förutom Kk, det är Kk som grunden till varför vi applicerar Kalman�ltret. Kk kallas kalmanök- ningen och varierar beroende på brusförhållanden i mätningen. Kk är baserat på kovariansen i mätdatan, alltså samvariationen av två stycken mätvärden. Viktigt att nämna är att ovannämnda ekvation inte är ekvationen för �ltret utan endast ett sätt att visualisera tankesättet runt Kalman �ltret. Dessa komplicerade ekvationer kommer beröras i enkelhet, ytterligare fördjupning hänvisas till refererad litteratur. Ekvationer Kalmanekvationerna kan delas upp i två steg, prediktionsste- get och korrektionssteget. Algoritm 3.3 De fundamentala ekvationerna av Kalman�ltret [15, 14] xk = Axk−1 + Buk + wk−1 zk = Hxk + vk xk är signalvärdet. xk är resultatet av en linjär stokastik ekvation där föregående mätning tillämpas som parametern xk−1, kontrollsignalen uk samt processens brus som wk−1. Kontrollsignalen uk tillämpas dock sällan. Den andra ekvationen avser att ta signalvärdet xk och mätbruset vk och kombinera dessa, och statistiskt fördela dessa eftersom mätvärdena anses vara inexakta. Där A,B och H generellt är matriser. Algoritm 3.4 Kalman�ltrets ekvationer [14] Prediktion Korrektion x̂−k = Ak−1 + Buk Kk = P−k H T (HP−k H T + R)−1 P−k = APk−1A T + Q x̂k = x̂−k + Kk(zk −Hx̂−k ) Pk = (I −KkH)P−k x̂−k = Predikterade estimationer av signalvärdet P−k = Predikterade kovariansen av felet Kk = Kalmanökningen Ekvationerna itererar sedan från prediktionssteget till korrektionssteget för att estimerat ge ett korrekt estimerat mätvärde. 28 3.2.5.2 Vinkelberäkning Enligt Figur 3.8 ses hämtning av obehandlad mätdata från samtliga senso- rer till styrenhet. Styrenheten beräknar därefter totalacceleration samt drift- korrigerar X - och Y-värden från accelerometer och gyroskop med hjälp av kalman�ltrering. Magnetisk riktning hämtas därefter från magnetometer och kalman�ltreras tillsammans med gyroskopets Z-axel för att möjliggöra en vinkelangivelse i förhållande med jordens magnetfält. 29 Figur 3.8: Flödesschema över hämtning samt beräkning av sensorvärden 30 Kapitel 4 Resultat 4.1 Hårdvara Under examensarbetets gång har ett kretskort konstruerats som skall klara en störningsfylld miljö. Kretskortet har även skydd för transienter på matning- spänning och ett störningsskydd för CAN-kommunikation. Hårdvaran som har designat har kvadratisk design och mäter 32x32 mm. Storleksmässigt kan enheten ses som minimal i förhållande till en entreprenadmaskins storlek. Enheten är även mindre i förhållande till enheter med samma karakteristik och prestanda som tillämpas idag. Kretskortet är även dubbelsidigt, kortet har alltså komponenter placerade på båda sidor. Placeringen av komponenter är genomförd på ett sätt som skapar minimal interferens mellan störnings- känsliga komponenter och störningsskapande komponenter. Komponenterna är även placerade på ett sätt så att signalbanorna mellan kretsarna är så korta som möjligt. 4.2 Mjukvara Då målsystemet ej har varit tillgängligt har mjukvaruutvecklingen istället skett på plattformar som liknar den hårdvara som utvecklats. Då den slutli- ga produkten ses som ett inbyggt system utan ett gränsnitt för användaren har stor vikt lagts på att systemet skall vara driftsäkert. Detta kan man kan se i en tydlig strukturering av utveckling där ett gränssnitt eller en tillbyggnad skall vara helt stabil innan ett nytt tillägg implementeras. Mjukvaran som har utvecklats mot testplattformen har gett önskad karakteristik vad gäller 31 sensorläsning, hantering av CAN-buss samt vinkelberäkning. Det �nns där- för en stor tilltro till att mjukvaran utvecklad för testplattform skall kunna implementeras på målsystemet. 4.3 Veri�ering Kretskortet är fortfarande under produktion då denna rapport samman- ställts. Därför har ingen verifering och testning av hårdvarukonstruktionen kunnat utföras. Då målsystemet inte varit tillgängligt har inte heller testning av mjukvara kunnat utföras i detta system. Resultat från utvecklingsplattfor- men och dess mjukvarufunktioner har dock givit indikationer på att korrekta mätvärden och funktionalitet har uppnåtts. En vidareutveckling av examens- arbetet kommer även att utföras under följande månader där möjlighet till utförlig testning och veri�ering av hårdvara och mjukvara kommer att ges. 32 Kapitel 5 Slutsats 5.1 Resumé Projektet �Inertial Measurement Unit (IMU) av miniatyrformat med CAN- interface� handlar om att konstruera en så yte�ektiv och mätnoggrann IMU som möjligt. IMUn skall kunna placeras på objekt av olika form och material och sedan beräkna och informera andra enheter om objektets position samt rörelse via en CAN-buss. I detta examensarbete syftar arbetet till att utvärde- ra samt konstruera både hårdvara och mjukvara för nämnda IMU. Hårdvaran måste förutom sensorer även klara Volvo ABs standarder för spänningsspi- kar och laster. Den måste även klara av störningar på CAN-bussen, detta då CAN-bussen är den valda kommunikationen med andra enheter. Mjukvaran utvecklad för denna plattform måste �ltrera stora störningar i form av in- tensiva rörelser från till exempel en skakande grävmaskinsarm, samt drift av mätvärden från sensorer. Anledningen till att en IMU utvärderats är för att få möjligheten att själv välja mätdata samt datapresentation, något som ej är möjligt vid inköp och utvärdering av tredjeparts IMUer. 5.2 Generaliseringar Möjligheterna för en IMU är idag stora. Till följd av intresset för enheter som denna har utveckling inom område ökat markant vilket fått till följd att �er och mer so�stikerade sensorer utvecklats. Enheter som den som utvecklats under detta examensarbete åter�nns i många utförande och tillämpningar, allt från att möjliggöra en ny funktion i en mobiltelefon till att skapa förut- 33 sättningar till autonoma farkoster. Att för ett företag som uppdragsgivaren ha en sådan här plattform tillgänglig underlättar framtida implementationer inom olika fordonstillämpningar då kretsens konstruktion är generell. I ett arbetsmiljömässigt perspektiv kan den här enheten möjliggöra e�ektivise- ring och erbjuda en större användarvänlighet då enheten enkelt placeras på önskad del på en kropp och presenterar därefter mätdata. 5.3 Kritisk diskussion Tidsramarna för examensarbetet har under projektets gång inte kunnat hål- las. Detta främst då utveckling av hårdvara varit mer tidskrävande än för- utspått. De verktyg som funnits tillgängliga hos uppdragsgivaren har varit avancerade och detta tillsammans med vår ovana att tillämpa dessa verktyg har lett till en oförutsedd inlärningsperiod. Verktygen har dock i slutändan erbjudit stora kon�gurationsmöjligheter och möjlighet till god överblick över utvecklingen. Under projektets slutfas har ledtiden av kretsproduktionen lett till vissa fördröjningar som ej har togs i beaktning vid tidsplaneringen. Trots dessa förhinder har arbetet fullföljts till fullo och utvecklingen har istället testats mot testbänkar bestående av utvecklingsplattformar med lik- värdiga komponenter. Detta har möjliggjort utveckling inom tidsplanens ra- mar, men utförliga tester av mjukvaran mot konstruerad hårdvara har inte kunnat utföras. Även tester som syftar till att enkom testa begränsningar hos den egenkonstruerade hårdvaran har inte kunnat fullgöras. Då testning utförts mot utvecklingsplattformen har detta resulterat i förväntade mätvär- den och utdata från sensorer, mikrokontroller och CAN-buss. Vid för�yttning av sensorplattformen i givna vinklar förändras utdata från mikrokontrollern likvärdigt. Detta examensarbete har givit oss god insikt hur det är utveckla hårdvara med hjälp av professionella verktyg samt att sedan tillämpa egenkonstruerad mjukvara. 34 Litteraturförteckning [1] AsahiKASEI. AK8975/AK8975B, 3-Axis Electronic Compass. http: //www.akm.com/akm/en/file/datasheet/AK8975.pdf (Hämtad 2013- 05-27), December 2009. [2] Honeywell. 3-Axis Digital Compass IC HMC5883L. http://www51.honeywell.com/aero/common/documents/ myaerospacecatalog-documents/Defense_Brochures-documents/ HMC5883L_3-Axis_Digital_Compass_IC.pdf (Hämtad 2013-05-27) (Hämtad 2013-05-27), Februari 2013. [3] I2C-bus.org. I2C-Bus: Termination versus Capacitance. http:// www.i2c-bus.org/termination-versus-capacitance (Hämtad 2013- 05-27), Maj 2013. [4] I2C-bus.org. I2C-Bus: What's that? http://www.i2c-bus.org (Häm- tad 2013-05-27), Maj 2013. [5] InvenSense. MPU-6000 and MPU-6050 Product Speci�cation Revision 3. http://www.invensense.com/mems/gyro/documents/ PS-MPU-6000A.pdf (Hämtad 2013-05-27), Maj 2012. [6] InvenSense. MPU-9150 Product Speci�cation. http://www. invensense.com/mems/gyro/documents/PS-MPU-9150A.pdf (Hämtad 2013-05-27), Maj 2012. [7] R. E. Kalman. A New Approach to Linear Filtering and Prediction Problems. http://www2.elo.utfsm.cl/~ipd481/Papers%20varios/ kalman1960.pdf (Hämtad 2013-05-27), 1960. 35 [8] B. Lepkowski, J. och Wolfe. EMI/ESD Protection solutions for the CAN Bus. http://www.can-cia.org/fileadmin/cia/files/icc/10/ cia_paper_lepkowski.pdf (Hämtad 2013-05-27), 2005. [9] J. Lepkowski. EMI/ESD Protection Solutions for the CAN Bus. http: //www.onsemi.com/pub_link/Collateral/AND8169-D.PDF (Hämtad 2013-05-27), November 2007. [10] Paolo Giusto Arkadeb Ghosal Marco Di Natale, Haibo Zeng. Understan- ding and Using the Controller Area Network Communication Protocol. Number 978-1-4614-0313-5. Springer, 2012. [11] A. B. Matsko. Viewpoint: All-optical compass based on the e�ect of electromagnetically induced transparency. http://physics.aps.org/ articles/v3/76/ (Hämtad 2013-05-27), September 2010. [12] Microchip. WebSeminar: CAN Protection. http://www.microchip. com/stellent/groups/SiteComm_sg/documents/Training_ Tutorials/en528477.pdf (Hämtad 2013-05-27), Oktober 2006. [13] NXP. UM10204: I2C-bus speci�cation and user manual. http:// www.nxp.com/documents/user_manual/UM10204.pdf (Hämtad 2013- 05-27), Oktober 2012. [14] Grewal M. S. och Andrews A. P. Kalman Filtering: Theory and Practice Using MATLAB. Second Edition(0-471-39254-5), 2001. [15] Welch G. och Bishop G. An Introduction to the Kalman Fil- ter. http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf (Hämtad 2013-05-29), July 2006. [16] J. Paetau. Mail conversation with InvenSense. E-Mail, March 2013. [17] Philips Semiconductors. AN10216-01: I2C Manual. http://www. nxp.com/documents/application_note/AN10216.pdf (Hämtad 2013- 05-27), Mars 2003. [18] R. Snedsbol, R. och Johansson. Realtidssystem for högskolans ingen- jörsutbildningar. Number ISBN 91-89280-14-8. Goteborgs mikrovaror, 7 edition, 2002. 36 [19] Starlino. A Guide to using IMU (Accelerometer and Gyroscope Devices) in Embedded Applications. http://www.starlino.com/imu_guide. html (Hämtad 2013-05-27) (Hämtad 2013-05-27), December 2009. [20] STMicroelectronics. AN2824: STM32F10xxx I2C optimized examples. http://www.st.com/st-web-ui/static/active/en/resource/ technical/document/application_note/CD00209826.pdf (Hämtad 2013-05-27), Juni 2010. [21] STMicroelectronics. AN2586: Getting started with STM32F10xxx hardware development. http://www.st.com/st-web-ui/static/ active/en/resource/technical/document/application_note/ CD00164185.pdf (Hämtad 2013-05-27), November 2011. [22] STMicroelectronics. STM32F107xx: Connectivity line, ARM- based 32-bit MCU with 64/256 KB Flash, USBOTG, Ether- net, 10 timers, 2 CANs, 2 ADCs, 14 communication interfa- ces. http://www.st.com/st-web-ui/static/active/en/resource/ technical/document/datasheet/CD00220364.pdf (Hämtad 2013-05- 27), Augusti 2011. [23] STMicroelectronics. LSM303D, Ultra compact high performan- ce e-Compass 3D accelerometer and 3D magnetometer modu- le. http://www.st.com/st-web-ui/static/active/en/resource/ technical/document/datasheet/DM00057547.pdf (Hämtad 2013-05- 27), Juni 2012. [24] STMicroelectronics. L3GD20, MEMS motion sensor: three-axis digital output gyroscope. http://www.st.com/st-web-ui/static/active/ en/resource/technical/document/datasheet/DM00036465.pdf (Hämtad 2013-05-27), Februari 2013. [25] CT Systems. Magnetometer - the History. http://www.ctsystems.eu/ support/history-mag.html (Hämtad 2013-05-31), Maj 2013. [26] W. Truchsess. E�ects of Varying I2C Pull- Up Resistors. http://dsscircuits.com/articles/ effects-of-varying-i2c-pull-up-resistors.html (Hämtad 2013-05-27), December 2010. 37 [27] Volvo. STD 313-0003: Electro-magnetic compatibility, EMC. http:// www.tech.volvo.com/std/docs/515-0003 (Hämtad 2013-06-04), Ok- tober 2009. 38