Preview only show first 10 pages with watermark. For full document please download

Similar Pages

   EMBED


Share

Transcript

Institutionen för systemteknik Department of Electrical Engineering Examensarbete Kadenssensor med en accelerometer och ANT+ Examensarbete utfört i Datorteknik vid Tekniska högskolan vid Linköpings universitet av Glenn Westerholm LiTH-ISY-EX-ET–15/0434–SE Linköping 2015 Department of Electrical Engineering Linköpings universitet SE-581 83 Linköping, Sweden Linköpings tekniska högskola Linköpings universitet 581 83 Linköping Kadenssensor med en accelerometer och ANT+ Examensarbete utfört i Datorteknik vid Tekniska högskolan vid Linköpings universitet av Glenn Westerholm LiTH-ISY-EX-ET–15/0434–SE Handledare: Oscar Gustafsson isy, Linköpings universitet Examinator: Anders Nilsson isy, Linköpings universitet Linköping, 16 maj 2015 Avdelning, Institution Division, Department Datum Date Avdelningen för Datorteknik Department of Electrical Engineering SE-581 83 Linköping 2015-05-16 Språk Language Rapporttyp Report category ISBN   Svenska/Swedish  Licentiatavhandling ISRN  Engelska/English  Examensarbete   C-uppsats  D-uppsats — LiTH-ISY-EX-ET–15/0434–SE Serietitel och serienummer Title of series, numbering  Övrig rapport  ISSN —  URL för elektronisk version http://urn.kb.se/resolve?urn=urn:nbn:se:liu:diva-119070 Titel Title Kadenssensor med en accelerometer och ANT+ Författare Author Glenn Westerholm Cadence sensor with an accelerometer and ANT+ Sammanfattning Abstract Rapporten presenterar det examensarbetet som har gått ut på att undersöka möjligheterna att konstruera en sensor som mäter kadens med hjälp av en accelerometer. Implementation av kadensprofilen till ANT+ har gjorts för att möjliggöra synkronisering mellan en sportklocka och sensorn. Kadens är hur fort cyklisten trampar med pedalerna mätt i enheten Varv per minut vanligt förkortat RPM från engelskans Revolutions Per Minute. Hur fort en cyklist trampar påverkar kroppen på många olika sätt och ofta vill cyklisten veta vad aktuell kadens är för att optimera sin prestation. Den undersökta principen att använda en accelerometer för att mäta kadens syftar till att en eventuell prototyp skulle vara lämplig till inomhuscykling även kallad spinning. På en vanlig traditionell cykel har man oftast två hårdvarudelar för att mäta kadens, en monterad på pedalarmen och den andra på cykelramen. Cykelramen på en spinningcykel skiljer sig så pass mot en vanlig cykel att hårdvarudelen som ska sitta på cykelramen inte kan monteras med samma lätthet. Med en accelerometer behövs bara en hårdvarudel som lätt kan monteras på pedalarmen på cykeln. Programutvecklingen har skett med ett Arduino Uno som består av en ATmega328 mikrokontroller från Atmel. Sensorenheten som mäter kadensen består av Arduino Uno, accelerometern LSM303DLHC från STMicroelectronics och ANT-chippet nRF24AP2 från Nordic Semiconductor. Huvudenheten har bestått av en persondator som har agerat mottagare med programmet ANT+ Simulator. Det utvecklade programmet på mikrokontrollen upptäcker när det sker ett pedalvarv och skickar den totala varvtiden tillsammans med antal pedalvarv som totalt inträffat till nRF24AP2 vidare till huvudenheten. Kadensprofilen är den som räknar ut vad aktuell kadens är. Avslutningsvis presenteras ett minimumkrav av hårdvaran och ett förslag av en energisnål mikrokontroller för en eventuell prototyp. Nyckelord Keywords kadens, ANT, ANT+, cykling, spinning Sammanfattning Rapporten presenterar det examensarbetet som har gått ut på att undersöka möjligheterna att konstruera en sensor som mäter kadens med hjälp av en accelerometer. Implementation av kadensprofilen till ANT+ har gjorts för att möjliggöra synkronisering mellan en sportklocka och sensorn. Kadens är hur fort cyklisten trampar med pedalerna mätt i enheten Varv per minut vanligt förkortat RPM från engelskans Revolutions Per Minute. Hur fort en cyklist trampar påverkar kroppen på många olika sätt och ofta vill cyklisten veta vad aktuell kadens är för att optimera sin prestation. Den undersökta principen att använda en accelerometer för att mäta kadens syftar till att en eventuell prototyp skulle vara lämplig till inomhuscykling även kallad spinning. På en vanlig traditionell cykel har man oftast två hårdvarudelar för att mäta kadens, en monterad på pedalarmen och den andra på cykelramen. Cykelramen på en spinningcykel skiljer sig så pass mot en vanlig cykel att hårdvarudelen som ska sitta på cykelramen inte kan monteras med samma lätthet. Med en accelerometer behövs bara en hårdvarudel som lätt kan monteras på pedalarmen på cykeln. Programutvecklingen har skett med ett Arduino Uno som består av en ATmega328 mikrokontroller från Atmel. Sensorenheten som mäter kadensen består av Arduino Uno, accelerometern LSM303DLHC från STMicroelectronics och ANT-chippet nRF24AP2 från Nordic Semiconductor. Huvudenheten har bestått av en persondator som har agerat mottagare med programmet ANT+ Simulator. Det utvecklade programmet på mikrokontrollen upptäcker när det sker ett pedalvarv och skickar den totala varvtiden tillsammans med antal pedalvarv som totalt inträffat till nRF24AP2 vidare till huvudenheten. Kadensprofilen är den som räknar ut vad aktuell kadens är. Avslutningsvis presenteras ett minimumkrav av hårdvaran och ett förslag av en energisnål mikrokontroller för en eventuell prototyp. iii Innehåll Notation 1 Introduktion 1.1 Bakgrund . . . 1.2 Syfte . . . . . . 1.3 Mål . . . . . . 1.4 Frågeställning 1.5 Disposition . . 1.6 Avgränsning . vii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 2 2 2 3 2 Teori 2.1 Kadens . . . . . . . . . . . . . . . . . . 2.2 Sampling och samplingsteoremet . . . 2.3 Accelerometerns fysiska grundprincip 2.4 Digitala filter . . . . . . . . . . . . . . . 2.5 Kommunikation . . . . . . . . . . . . . 2.5.1 ANT . . . . . . . . . . . . . . . 2.5.2 ANT+ . . . . . . . . . . . . . . . 2.5.3 UART . . . . . . . . . . . . . . . 2.5.4 Two Wire Serial Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 9 12 14 14 16 17 18 3 Metod 3.1 Hårdvara . . . . . . . . . . . . . . . 3.1.1 Cykelhjul . . . . . . . . . . . 3.1.2 Arduino Uno . . . . . . . . . 3.1.3 Adafruit 9-DOF IMU . . . . 3.1.4 nRF24AP2 . . . . . . . . . . 3.1.5 SparkFun Bluetooth Modem 3.1.6 Halleffektsensor . . . . . . . 3.1.7 Batteripack . . . . . . . . . . 3.2 Mjukvara . . . . . . . . . . . . . . . 3.2.1 MATLAB R2014a . . . . . . 3.2.2 Arduino IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 21 22 23 23 25 25 26 26 26 26 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi Innehåll 3.2.3 ANT+ Simulator . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Uträkning av RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Undersökning av RPM i förhållande till samplingsfrekvens . . . . 3.4.1 Samplingsfrekvens . . . . . . . . . . . . . . . . . . . . . . . 3.4.2 RPM vs. samplingsfrekvens . . . . . . . . . . . . . . . . . . 3.5 Detektering av ett pedalvarv och approximation av nollgenomgången . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6 Implementering av ANT+ . . . . . . . . . . . . . . . . . . . . . . . 27 28 28 28 30 31 33 4 Resultat 4.1 Sensorenhet . . . . . . . . . . . . . 4.2 Slavenhet . . . . . . . . . . . . . . . 4.3 Testfall . . . . . . . . . . . . . . . . 4.4 Strömförbrukning av komponenter 4.5 Accelerometern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 35 36 36 40 40 5 Diskussion 5.1 Detektering av ett varv 5.2 Filter . . . . . . . . . . 5.3 Mikrokontroller . . . . 5.4 Strömförbrukning . . . 5.5 “Brister” . . . . . . . . 5.6 Systemkrav . . . . . . . 5.7 Framtida utveckling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 41 42 42 43 44 45 45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A Systemdesign vid test 49 B Systemdesign vid en prototyp 51 Litteraturförteckning 53 Notation Förkortningar Förkortning bps DOF FIR GFSK IIR IMU ISM MEMS RPM RX TDMA TWI TX UART USB Betydelse bits per second Degrees Of Freedom Finite Impulse Response Gaussian Frequency Shifting Key Infinite Impulse Response Inertial Measurement Unit Industrial, Scientific and Medical Mikroelektromekaniska system Revolutions Per Minute Mottagare Time Division Multiple Access Two Wire Serial Interface Sändare Universal Asynchronous Receiver/Transmitter Universal Serial Bus vii 1 Introduktion Rapporten handlar om ett examensarbete som har genomförts hos Institutionen för systemteknik (ISY) på avdelningen Datorteknik vid Linköpings Tekniska Högskola. 1.1 Bakgrund En tydlig trend inom träning är att de som tränar vill mäta sin prestation. I samband med gruppträning sker detta ofta genom att pulsen mäts. Vid inomhuscykling (spinning) finns det även fler saker som är lätt mätbara, t.ex. hur fort pedalerna går, den så kallade kadensen. De allra flesta kadensmätare som finns på marknaden är kombinerade med en hjulhastighetsmätare. För en inomhuscykel är detta dock sällan en bra idé. Dels finns det på de allra flesta inomhuscyklar ett fixt förhållande mellan pedaltakt och hjulhastighet, dels är själva meningen med hjulhastighet att mäta hur fort cykeln förflyttar sig, dels är mätarna gjorda för att monteras på ramen på en ”vanlig” cykel och kan därför inte med lätthet monteras på en inomhuscykel [11]. 1.2 Syfte Syftet med examensarbetet är att möjliggöra för cyklister som utövar inomhuscykling att på ett enkelt sätt kunna mäta sin kadens med en sensor gjord med en 1 2 1 Introduktion accelerometer. Med den implementerade kadensprofilen till ANT+ kan cyklisten synkronisera sin sportklocka till sensorn trådlöst. På så sätt kan cyklister utvärdera sin kadens under träningspasset och anpassa den efter eget önskemål. 1.3 Mål Målet med examensarbetet är att undersöka hur en kadensmätare som monteras på pedalarmen kan fungera. Grunden i en kadensmätare av detta slag kan t.ex. vara ett gyroskop eller en accelerometer. Till detta undersöka noggrannheten av den skattade kadensen, sampeltakt, energiförbrukning och antal dimensioner som behöver mötas, sikten är att på ett minimalt sätt inte använda mer än vad som behövs för applikationens uppgift men ändå få ett tillfredsställande resultat av kadensen. Den korrekta kadensen ska överföras trådlöst med kadensprofilen för ANT+ så en kompatibel sportklocka eller annan vald mottagare kan ta emot kadensen och presenteras för cyklisten. 1.4 Frågeställning Problemformuleringen kan delas in i tre frågor: • Kan man använda sig av en accelerometer eller gyroskop för att beräkna kadensen? • Hur skulle en kravsättning för ett system kunna se ut med en accelerometer eller gyroskop för att begränsa sampeltakt, energiförbrukning, antal dimensioner, men ändå vara effektiv nog att kunna beräkna kadensen med bra noggrannhet? • Sensorer av denna typ är relativt störningskänsliga. Vilken form av signalbehandling behövs för en korrekt detektion? 1.5 Disposition Rapporten är uppbyggd efter följande fem kapitel. Kapitel 1 är en kort introduktion om examenarbetet. Kapitel 2 går igenom teorin som har inlett examensarbetet och ska ge en god grund för läsaren att stå på inför fortsättning av rapporten. Kapitel 3 går in på vilka metoder som har använts, vilken hårdvara och mjukvara men också undersökningar som har lett fram till resultatet. I kapitel 4 presenteras resultatet. Kapitel 5 tar upp en diskussion angående resultatet och knyter samman rapporten med det minimumkrav som krävs för en prototyp. 1.6 1.6 Avgränsning 3 Avgränsning Medvetna avgränsningar är bland annat att användningsområdet har varit för inomhuscykling. För utomhuscykling skulle t.ex. andra krav ställas på signalbehandlingen då användningen kan påverkas av ett ojämnt underlag. Inga specialfunktioner för accelerometern har använts. Tanken är att använda grundprincipen för hur en accelerometer fungerar, så att vilken accelerometer som helst ska kunna tillämpas i lösningen. En begränsning har satts vid hur hög kadens som anses rimlig för vad en cyklist kan tänkas uppnå under ett träningspass. En gräns på 130 RPM anses vara en tillräcklig hög kadens att tillfredsställa såväl proffs som amatörer. 2 Teori I kapitel 2 kommer den teori och förstudie som har gjorts i examensarbetet att presenteras. Kapitlet börjar med att introducera för läsaren vad kadens är för något följt av samplingsteoremet, hur en accelerometer fungerar, digitala filter, nätverksprotokollet ANT och de två kommunikationsprotokollen UART och TWI. 2.1 Kadens Kadens beskrivs som den hastighet en cyklist trampar med pedalerna mätt i Varv per minut, oftast betecknat RPM från engelskans Revolutions Per Minute. Kadens är en viktig parameter för en cyklist att hålla koll på då den påverkar många olika faktorer som energiförbrukning, uteffekt, trötthet och muskelpåfrestning. Kadens är en av få variabler en cyklist kan justera och har en avgörande roll för prestationen. Vad som anses ”optimal” kadens är med andra ord svårt att säga, oftast resulterar det att cyklisten måste göra en kompromiss mellan faktorerna [2][1]. Studier har visat att relativt hög kadens (100-120 RPM) kan förbättra prestationen för kortdistanser då muskelkraften och muskeltröttheten reduceras, samt att uteffekten maximeras. Däremot så ökar energiförbrukningen vid hög kadens. Således vid långvariga distanser borde en aning lägre kadens vara mer passande (90-100 RPM) och ännu lägre (70-90 RPM) vid extremt långa distanser. Dock vid lägre kadens så ökar kraften som behöver appliceras på pedalerna för att vidhålla en given uteffekt och det i sig sliter mer på knän och leder [1]. Det har även vi5 6 2 Teori sats att energiförbrukningen ökar linjärt för en given kadens när uteffekten stiger [13]. Cyklisten behöver finna en god balans av ovanstående faktorer och välja rätt växel för att vidhålla en komfortabel kadens som individen finner ”optimal” för sitt behov vid långdistans respektive kortdistans. Det är där en kadensmätare kommer till nytta för cyklisten. 2.2 Sampling och samplingsteoremet Likformig sampling är bland de vanligaste sätten att sampla en signal, där tiden mellan varje sampel är konstant med tiden T , även kallad samplingsperiod. Samplingsfrekvensen är definierad fs = T1 och anger antal sampels per sekund. Den tidsdiskreta signalen x(n) bildas genom likformig sampling av den tidskontinuerliga signalen x(t) vid tidpunkten t = nT , där n är ett heltal [4], se figur 2.1. x(n) = x(nT ) (2.1) Figur 2.1: Likformig sampling Samplingsteoremet säger att signal x(t) kan bara återskapas ifall samplingsteoremet är uppfyllt. Om x(t) har en begränsad bandbredd på ω = ω0 (f = f0 ), ω0 = 2πf0 (2.2) och samplas med sampelfrekvensen ωs = 2πfs (2.3) så kan signalen x(t) återskapas från den samplade signalen x(n) = x(nT ). Förutsatt att sampelfrekvensen ωs är strikt större än dubbla bandbredden eller den högsta frekvensen f0 innehållandes i signalen 2.2 7 Sampling och samplingsteoremet ωs > 2ω0 ⇔ fs > 2f0 (2.4) Frekvensen f0 kallas även för Nyquistfrekvensen och 2f0 för Nyquists samplingsfrekvens [4]. Om samplingsteoremet inte uppfylls utan istället fs ≤ 2f0 så är signalen undersamplad och kan inte återskapas till det ursprungliga spektrumet signalen hade, se figur 2.4 och figur 2.5. Felaktigheten som uppstår kallas för vikningsdistorsion [4]. Följande är ett exempel på samplingsteoremets betydelse att det måste uppfyllas för att få en signal återskapad. En signal på 60 Hz, figur 2.2, där de blå prickarna visar samplingspunkterna med fs = 800 Hz. 60 Hz signal 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −0.05 −0.04 −0.03 −0.02 −0.01 0 t (sekunder) 0.01 0.02 0.03 0.04 0.05 Figur 2.2: Samplingspunkter med fs = 800 Hz på en 60 Hz signal Figur 2.3 visar samplingsfrekvensen fs = 120 Hz dvs. fs = 2f0 . Punkterna markerar maximum och minimum. 8 2 Teori 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −0.05 −0.04 −0.03 −0.02 −0.01 0 t (sekunder) 0.01 0.02 0.03 0.04 0.05 Figur 2.3: Samplingspunkter med fs = 120 Hz på en 60 Hz signal Figur 2.4 visar en samplingsfrekvens som inte uppfyller fs > 2f0 , här med fs = 70 Hz ger punkterna. 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −0.05 −0.04 −0.03 −0.02 −0.01 0 t (sekunder) 0.01 0.02 0.03 0.04 0.05 Figur 2.4: Samplingspunkter med fs = 70 Hz på en 60 Hz signal Dras en linje mellan punkterna i figur 2.4 blir det en signal som liknar 10 Hz i 2.3 9 Accelerometerns fysiska grundprincip figur 2.5 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −0.05 −0.04 −0.03 −0.02 −0.01 0 t (sekunder) 0.01 0.02 0.03 0.04 0.05 Figur 2.5: Återskapad signal som efterliknar 10 Hz vid 70 Hz sampling på en 60 Hz signal 2.3 Accelerometerns fysiska grundprincip En accelerometer mäter indirekt accelerationen genom den kraft den utsätts för. Den här kraften kan uppstå via acceleration av en rörelse eller med hjälp av gravitationens kraft vid stillastående. Kraften som sensorn känner av är i direkt motsatt riktning från accelerationsvektorn [6]. Figur 2.6: Hur en massa påverkas vid acceleration 10 2 Teori Den vanligaste fysiska principen för en accelerometer är en massa fäst via en fjäder. Fjädern omfattas av Hookes lag där kraften F är proportionell mot förflyttningen x där k är fjäderkonstanten. F = kx (2.5) Newtons andra lag säger att kraften F är proportionell mot massan m och accelerationen a. F = ma (2.6) Figur 2.6 visar en massa kopplad till en fjäder. Om en acceleration sker så uppstår en kraft enligt Newtons andra lag (2.6). Kraften kommer att få fjädern att antingen expandera eller dra ihop sig enligt Hooks lag (2.5). Kombinera ekvation (2.5) och (2.6) så kommer massan vid acceleration att förflytta sig enligt x= ma k (2.7) Om det istället observeras att massan har förflyttats x längdenheter, så har massan genomgått en acceleration [6]. a= xk m (2.8) I en modern accelerometer på ett mikrochip byggd med tekniken mikroelektromekaniska system (MEMS) handlar det om att mäta massans förflyttning x med hjälp av kapacitiva sensorer. De kapacitiva sensorerna känner av när det sker en ändring i avståndet mellan två parallella kapacitiva plattor [7], se figur 2.7. Kapacitansen C0 mellan två parallella plattor är: C0 = 0  A 1 = A d d (2.9) där A = 0 A, A är arean som plattorna täcker, d är avståndet mellan dem,  är det isolerande materialets permittivitet och 0 är permittiviteten för tomrum. Någon ändring i parametrarna resulterar i en ändring i kapacitansen [7]. Grundkonstruktionen av en MEMS-accelerometer består av en massa fäst med fjädrar i vardera sida till en referensram. Det sitter utstickande plattor på den rörliga massan som är placerande mellan de statiska plattorna på sidan. När massan är i rörelse så ändras avståndet mellan de statiska och de rörliga plattorna. 2.3 11 Accelerometerns fysiska grundprincip Mellan de två plattorna uppstår en kondensator och skillnaden i kapacitansen när massan är i rörelse ger möjligheten att uttrycka längden x [7]. Figur 2.7: Grundprincipen för en MEMS-accelerometer Kapacitansen mellan den rörliga plattan och de två statiska plattorna C1 och C2 beror på ändringen i avståndet x1 och x2 : 1 1 = A = C0 − 4C x1 d+x 1 1 C2 =  A = A = C0 + 4C x2 d−x C1 =  A (2.10) När x1 = x2 så är C1 = C2 vilket betyder att accelerationen är noll. Om x , 0 så är skillnaden i kapacitansen: C2 − C1 = 24C = 2A x d 2 − x2 (2.11) Annars blir C2 − C1 = 0. Genom att mäta 4C så finner man x i den olinjära ekvationen: 4Cx2 + A − 4Cd 2 = 0 För små skillnader i x så kan termen 4Cx2 bortses: (2.12) 12 2 x≈ d2 4C 4C = d A C0 Teori (2.13) förflyttningen x är då proportionellt mot skillnaden i kapacitansen 4C [7]. Ett vanligt sätt att mäta ändring i kapacitansen är att låta alla övre plattor vara parallellkopplade till en gemensamt sett C1 och motsvarande för de nedre till en C2 . Både C1 och C2 drivs av en fyrkantsvåg med spänningen V0 som är 180◦ i fasskillnad mellan dem [7]. Figur 2.8: Hur Vut beräknas Utspänningen Vx , se figur 2.7, är massans genererande utspänning (Vx + V0 )C1 + (Vx − V0 )C2 = 0 (2.14) tillsammans med ekvation (2.10) och (2.13) Vx = V0 x C2 − C1 = V0 C2 + C1 d (2.15) Lös ut x ur ekvation (2.15) och kombinera den med ekvation (2.8) så blir accelerationen uttryckt: a= kdVx mV0 (2.16) utan att behöva vara beroende av längden x eller av kapacitansvärden [7]. 2.4 Digitala filter Det finns två sorters av digitala filter, IIR-filter och FIR-filter. Det förstnämnda står för Infinite-length Impulse Response och det sistnämnda för Finite-length 2.4 13 Digitala filter Impulse Response. Utsignalen y(n) kan beskrivas som faltning av impulssvaret h(n) och insignalen x(n) enligt [12]. y(n) = h(n) ∗ x(n) = ∞ X h(k)x(n − k) (2.17) k=0 I ett FIR-filter så kommer impulssvaret h(n) att efter en tid bli noll efter en ändlig mängd, N , sampels dvs. längden på impulssvaret h(n) är N långt räknat från första till sista nollskilda sampel. I ett IIR-filter så når impulssvaret teoretiskt sett inte noll då utsignalen är återkopplad. Enklaste realiseringen för ett FIR-filter är på direkt form enligt figur 2.9 med N + 1 multiplikationer och N additioner för att beräkna utsignalen. Figur 2.9: FIR-filter på direkt form Glidande medelvärdesfilter är ett enkelt FIR-filter som används att få bort oönskat brus i en sekvens genom att beräkna medelvärdet av L sekventiella värden [12]. L−1 y(n) = 1X x(n − k) L k=0 Filterstrukturen för denna typ ser ut som följande Figur 2.10: Filterstrukturen för ett glidande medelvärdesfilter (2.18) 14 2 Teori Figur 2.11 visar hur en signal innan och efter filtrering ser ut med ett glidande medelvärdesfilter. Signalen samplas i 100 Hz. 100 Hz Ofiltrerad Filtrerad 1 0.5 0 −0.5 1160 1180 1200 1220 1240 1260 1280 Figur 2.11: Blå filtrerad med L = 10, röd ofiltrerad 2.5 2.5.1 Kommunikation ANT ANT är ett nätverksprotokoll särskilt utformat för trådlösa sensornätverk med låg energiförbrukning och kan hantera många av de vanligaste nätverkstopologierna. ANT använder det licensfria frekvensbandet Industrial, Scientific and Medical (ISM) på 2.4 GHz. ANT-protokollet är specifikt inriktat mot användningsområdet träningssensorer som ofta drivs med små batterier som ska räcka länge [9]. Varje nod i ett nätverk innehåller ett implementerat ANT-protokoll och en mikrokontroller. Inom ett ANT-nätverk kan en nod antingen vara master, slav eller agera både och. Master är primärt sändare av data och slav den som tar emot data. Mellan noderna finns en kanal som sammanlänkar två noder [9]. 2.5 Kommunikation 15 Figur 2.12: En etablerad kanal mellan en master och slav För att kunna få två ANT-enheter att kommunicera med varandra kräver de en gemensam kanalkonfiguration som innehåller följande parametrar. För mer djupgående information hänvisas läsaren till databladet för ANT. • Kanaltyp • Radiofrekvens • Kanal-ID – Överföringstyp – Enhetstyp – Enhetsnummer • Kanalperiod • Nätverksnummer och nätverksnyckel Kanaltyp Vanligaste kanaltypen är en dubbelriktad kanal där data primärt sänder från master till slav men även omvänt är möjligt. Det är denna kanaltyp som används, trots att slaven kan skicka till master så är det inget som görs för den här användningen. Radiofrekvens En kanal verkar på en och samma radiofrekvens under kanalens existerande. Radiofrekvensen måste vara känd hos både master och slav innan öppnande av kanalen. Flertalet kanaler kan använda samma radiofrekvens då TDMA (Time Division Multiple Access) tillåter varje kanal att kommunicera under en tidslucka. 16 2 Teori Kanal-ID Kanal-ID innehåller följande tre fält – överföringstyp, enhetstyp och enhetsnummer. Enhetstyp är ett nummer som representerar vilken klass en masternod tillhör. Enhetsnummer är ett unikt nummer som representerar en specifik masterenhet. Överföringstyp är ett tal som representerar de olika egenskaperna hos en enhets överföring. Endast enheter med matchande kanal-ID kan kommunicera med varandra. Kanalperiod Kanalperiod är den frekvens hur ofta varje datapaket ska skickas. Nätverksnummer och nätverksnyckel Ett nätverksnummer identifierar de tillgängliga nätverken på en ANT-enhet. Varje nätverksnummer kommer att tilldelas en nätverksnyckel. En nätverksnyckel är ett unikt nummer som identifierar ett nätverk. Endast kanaler med identiska nätverksnycklar kan kommunicera med varandra ANT datatyper Det finns fyra olika datatyper som stöds av ANT. Varje datatyp sänds i paket om 8 byte och tillhör inte kanalkonfigurationen. Den vanligaste datatypen är ”Broadcast“ och skickar data från master till slav på varje kanalperiod. Att skicka data från slav till master sker bara om det explicit begärs. Denna datatyp är även den som förbrukar minst ström. Om det inte finns något nytt data att skicka vid kommande överföringstidpunkt så kommer sändningen att innehålla samma data som vid föregående överföring. 2.5.2 ANT+ ANT+ är en samling av olika enhetsprofiler där varje enhetsprofil har fördefinierade parametrar till kanalkonfigurationen. På så sätt kan informationen som skickas mellan master och slav tolkas rätt beroende på vad det är sensorn mäter [9]. Till det här examensarbetet så har kadensprofilen använts för att mäta kadens. För att få tillgång till den specifika kanalkonfigurationen för kadensprofilen måste användaren bli medlem gratis på www.thisisant.com. Dessa är därför utelämnade ur rapporten. 2.5 Kommunikation 2.5.3 17 UART För kommunikation mellan Ardunio Uno och datorn används UART, en hårdvarudel som omvandlar data från parallellt till seriellt. UART står för Universal Asynchronous Receiver and Transmitter och används för att skicka data, i det här fallet via USB eller på de två digitala pinnarna 0 (RX) och 1 (TX). UART tar bytes av data och skickar bit för bit i en sekventiell ordning till en mottagande UART som sedan åter sätter ihop bitarna till kompletta bytes. Varje UART består av ett skiftregister som är fundamentalt för att konvertera mellan parallellt och seriellt. Innan någon form av dataöverföring kan ske så måste initiering av baud rate och storleken av meddelandestrukturen sättas. Baud rate är den hastighet som ett meddelande sänds i, bits per second (bps) [3]. Varje dataöverföring är initierad genom att först ladda en överföringsbuffert med data som ska skickas. När skiftregistret är redo att skicka ett nytt meddelande så förs data från bufferten till skiftregistret. Skiftregistret är redo när ingen pågående överföring sker eller direkt efter den sista stoppbiten från föregående meddelande. Hastigheten av överföringen bestäms av baud rate som sätts i initieringen av UART [3]. Ett mottagande meddelande börjar med att UART upptäcker en giltig startbit. Följande bitar kommer därefter att samplas efter den satta baud rate. Baud rate måste vara densamma på båda sidorna. Databitarna skiftas in i det mottagande skiftregistret tills den första stoppbiten är mottagen. Därefter har ett fullständigt meddelande anlänt i skiftregistret och kan överföras till mottagarbufferten som datorn sedan kan läsa ifrån [3]. Strukturen för att skicka ett seriellt meddelande är definierad som: • 1 startbit, alltid låg • 5, 6, 7, 8 eller 9 databitar • Ingen, jämn eller udda paritetsbit • 1 eller 2 stoppbitar, alltid hög Ett meddelande börjar med en startbit följt av databitarna med den minst signifikanta biten först och avslutande med den mest signifikanta biten sist. Efter upp till max nio databitar kommer paritetsbiten, om den används, därefter följt av stoppbiten som är en eller två bitar. När ett komplett meddelande har skickats så kan proceduren upprepas [3]. 18 2 Bitnummer 1 Startbit Start 2 3 Data 1 Data 2 4 5 6 7 5-8 Databitar Data Data Data Data 3 4 5 6 8 9 Data 7 Data 8 Teori 10 11 Stoppbitar Stopp Tabell 2.1: Hur data skickas via UART 2.5.4 Two Wire Serial Interface Two Wire Serial Interface (TWI) är ett protokoll för att skicka data seriellt och är utvecklat av Atmel. TWI-protokollet tillåter att koppla samman upp till 128 olika enheter enbart via två ledningar, en klockledning (SCL) och en dataledning (SDA). Både SCL- och SDA-ledningen är kopplade med var sitt pullup-motstånd till matningsspänning. Varje kopplad enhet har sin specifika adress vid anrop. Figur 2.13: TWI-kommunikation mellan olika enheter Start och stopp Kommunikationen initieras av en masterenhet till en slavenhet med ett startvillkor (ST) och avslutar med ett stoppvillkor (SP). Efter startvillkoret anses ledningen vara upptagen. Startvillkoret är när SDA går från hög till låg medan SCL fortfarande är hög, stoppvillkoret är när SDA går hög medan SCL redan är hög [10]. Adresspaket Efter startvillkoret följer ett adresspaket (SAD) på 8 bitar. De 7 första bitarna är adressen till den slavenhet man vill anropa, och den mest signifikanta biten av 2.5 19 Kommunikation adressen sänds först. Bit 8 är en läs/skriv-bit (R/W). Om R/W är satt till hög så ska mastern läsa från dataledningen. Om R/W är satt låg ska mastern skriva till dataledningen. När adressen är skickad jämför alla slavenheter i systemet de 7 första bitarna om det är deras adress som anropas. Om ingen slav bekräftar att det är deras adress som anropas så måste dataledningen lämnas hög [10]. Bekräftelse Vid varje dataöverföring så måste mottagaren bekräfta att mottagandet av data gick bra. Detta genom att sändaren frigör dataledningen inför nionde klockcykeln. Mottagaren måste då sätta SDA låg och hålla den låg när SCL går hög [10]. Datapaket När en kommunikation har upprättats så är mottagaren redo att ta emot 8 bitars datapaket (DATA) från sändaren på SDA-ledningen med den mest signifikanta biten först. Skickas flera datapaket efter varandra så kan sändaren fortsätta så länge mottagaren bekräftar mottagandet [10]. LSM303DLHC LSM303DLHC agerar som en slavenhet. Kommunikationen börjar med startvillkoret (ST) följt av slavadressen (0011001b), slaven bekräftar (SAK), och därefter skickas en 8-bitars registeradress (SUB). De 7 första bitarna representerar den faktiska adressen medan bit 8 sätts hög eller låg om man vill möjliggöra att adressen inkrementeras automatiskt ifall flera adresser efter varandra ska läsas ifrån. Om mastern vill läsa från slaven så måste ett repeterat startvillkor (SR) göras efter att registeradressen har skickats. MAK samt NMAK indikerar när mastern bekräftar mottagandet av data, dvs. att allt gick bra resp. inte gick bra [10]. Kommando Läs Skriv SAD[7:1] 0011001 0011001 R/W 1 0 SAD+R/W 00110011 (33h) 00110010 (32h) Tabell 2.2: Kommandon för att läsa och skriva Master Slav ST SAD +W SUB SAK SR SAK SAD +R MAK SAK DATA MAK DATA NMAK DATA Tabell 2.3: Master som läser flera datapaket från slaven SP 3 Metod I kapitel 3 presenteras den hårdvara och mjukvara till utvecklingsmiljön som har använts. Men även den metod som har lett fram till resultatet presenteras. 3.1 Hårdvara 3.1.1 Cykelhjul Ett cykelhjul monterat på ett stativ med tre ben har använts för att emulera funktionaliteten av en cykelpedal. Följande hårdvarudelar i avsnitt 3.1.2-3.1.7 har sedan monterats på ekrarna på ett säkert sätt för att inte lossna när hjulet snurrar. Ett varv som hjulet snurrar simulerar ett varv trampat med en cykelpedal. Figur 3.1: Cykelhjulet som användes under arbetet med komponenterna fastmonterade på ekrarna 21 22 3.1.2 3 Metod Arduino Uno Arduino Uno är ett utvecklingskort som är baserat på mikrokontrollern ATmega328 från Atmel och har använts i detta examensarbete. Den består av 20 stycken in/ut-gångar varav 14 digitala in/ut-gångar och 6 stycken analoga in/utgångar. ATmega328 har en klockfrekvens på 16 MHz och ett flashminne på 32 kB där den exekverande koden är lagrad. Strömförsörjningen sker antingen via USB-kontakten till USB-ingången eller med en 2.1 mm hona till kortets strömingång [5]. ATmega328 erbjuder olika kommunikationsmöjligheter mellan andra mikrokontrollers eller persondatorer. UART-kommunikation finns på digital pinne P0 (RX) och P1 (TX) samt på önskade valda digitala pinnar genom att använda sig av ett Arduino-bibliotek kallat SoftwareSerial för att replikera funktionaliteten av RX och TX. Två uppsättningar av UART gjordes i detta examensarbete, en för blåtand och en för ANT. En ATmega16U2 på utvecklingskortet hanterar seriell kommunikation över USB-kabeln. Används seriell kommunikation över USB så kan inte RX och TX användas från digital pinne P0 och P1. ATmega328 stödjer TWI på de analoga pinnarna A5 (SDA) och A4 (SCL) med tillhörande Arduino-bibliotek Wire för enkel användning [5]. Arduino Uno konfigureras enklast genom att koppla kortet till datorn med USBkabel och använda Arduinos utvecklingsmiljö för att ladda upp senaste kod via en bootloader som finns på ATmega328. Denna kommunicerar med ett STK500protokoll [5]. Figur 3.2: Arduino Uno som användes i examensarbetet 3.1 23 Hårdvara 3.1.3 Adafruit 9-DOF IMU Till genomförandet så har Adafruit 9-DOF (degrees of freedom) IMU (Inertial Measurement Unit) använts. Det är ett kretskort som kan mäta nio olika typer av rörelser eller orienteringsrelaterad data. Tre vardera av acceleration, magnetisk orientering och vinkelhastighet. På kortet finns två kretsar, båda tillverkade av STMicroelectronics, som fungerar enligt MEMS-tekniken. LSM303DLHC är den krets på kortet som kan mäta acceleration och magnetisk orientering, den andra är L3GD20 som mäter vinkelhastigheten. Accelerometern i LSM303DLHC är den krets som uteslutande har använts för hela examensarbetet till att mäta acceleration. Kretsen har möjlighet att ändra skala om ±2/ ± 4/ ± 8/ ± 16 g beroende på användningsområde samt sampelhastighet för hur ofta den ska läsa av de interna sensorerna. Kommunikationen med kretskortet sker via TWI. Till Arduino så finns det färdiga bibliotek att använda för enkel användning. Till det här examensarbetet så behövs det inte en skala på mer än ±2 g då den inte utsätts för större accelerationer. Figur 3.3: Bild på Adafruit 9-DOF IMU 3.1.4 nRF24AP2 Till den trådlösa kommunikationen med ANT användes chipet nRF24AP2 från Nordic Semiconductor. Den finns i varianter som stödjer antingen 1 kanal eller upp till 8 kanaler. I det här examensarbetet användes versionen med 1 kanal då fler inte är nödvändiga. nRF24AP2 har följande specifikationer [8] • Sänder på 2,4 GHz ISM-bandet • GFSK modulation • Toppströmförbrukning på 17 mA vid RX 24 3 Metod • Toppströmförbrukning på 15 mA vid TX • Genomsnittlig strömförbrukning 22 µA, RX, 57600 baud rate • Genomsnittlig strömförbrukning 32 µA, TX, 57600 baud rate • 1 Mbps luftdatahastighet nRF24AP2 stödjer både UART och SPI. I det här fallet så användes UART genom att sätta PORTSEL låg, se figur 3.5 på motstående sida. Vald baud rate bestäms av hur man sätter pinnarna BR1, BR2 och BR3, låg eller hög. Baud rate kan väljas från 1200 till 57600. Högsta möjliga baud rate valdes då den drar mindre ström per skickat meddelande jämfört med lägre baud rate. Ju fortare meddelandet skickas desto mindre tid behöver den vara aktiv. Se tabell 3.1 för olika konfigurationer av baud rate. BR1 0 0 0 0 1 1 1 1 BR2 0 1 0 1 0 1 0 1 BR3 0 0 1 1 0 0 1 1 Baud rate 4800 19200 38400 50000 1200 2400 9600 57600 Tabell 3.1: Olika konfigurationer för vald baud rate Strukturen för att skicka meddelanden till nRF24AP2 ser enligt tabell 3.2 ut som följande [9]: Byte # 0 Synk (0xA4) 1 Meddelandets längd 2 3...N+2 N+3 ID Data Kontrollsumma Tabell 3.2: Meddelandestrukturen som skickas till nRF24AP2 Varje byte skickar minst signifikant bit först. För att markera starten så börjar varje meddelande med en Synk-byte på 0xA4 i hexadecimal form. Därefter följt av längden av meddelandeinnehållet i antal bytes. I byte 2 anges ett specifikt ID beroende vad det är för typ av meddelande. Kommande N-bytes är innehållet av själva meddelandet. Avslutningsvis görs en kontrollsumma, där alla tidigare bytes ska XOR med varandra och resultatet lagras i sista byten. 3.1 25 Hårdvara Figur 3.4: nRF24AP2 Figur 3.5: Blockdiagram mellan Arduino Uno och nRF24AP2 3.1.5 SparkFun Bluetooth Modem För att enkelt kunna föra över informationen trådlöst under utvecklingen och för att kunna felsöka så har en blåtandsmodul med T9JRN41-1 från SparkFun använts vid namnet BlueSMiRF Gold. Data från mikrokontrollern skickas seriellt med UART till blåtansmodulen. En mottagande USB-modul användes till datorn för att ta emot signalen och vidare för att läsa av serieporten i Arduino IDE (Integrated Development Environment). 3.1.6 Halleffektsensor En halleffektsensor vid namnet A3240 av Allergo har använts som en referens att räkna kadensen och för att se om tillvägagångsättet med en accelerometer fungerar. 26 3 Metod En halleffektsensor reagerar på magnetiskt fält. En magnet som placeras parallellt med sensorn kommer att göra att sensorn genererar en låg utsignal. Blir den inte påverkad av ett magnetiskt fält ger den en hög utsignal. 3.1.7 Batteripack För att strömförsörja Arduino Uno när hjulet snurrar så har ett batteripack använts vid namnet GP Portable PowerBank GL343 med 4000 mAh 3.2 3.2.1 Mjukvara MATLAB R2014a MATLAB (matrix laboratory) är ett program utvecklad av MathWorks och används främst för att göra matematiska numeriska beräkningar. I MATLAB kan man enkelt skapa grafer och tabeller men även användargränssnitt till olika program för att användaren lätt ska kunna använda programmet. MATLAB har i det här examensarbetet använts för att på ett enkelt sätt samla in data från Arduino för att få en grafisk visuell bild av hur signalen ser ut från accelerometern när hjulet har snurrat. För att senare besluta vilken ytterligare signalbehandling som krävs. Även färdigkalkylerad data av kadensen har inhämtats för att se en jämförelse mellan referensen och accelerometerns uträkning. 3.2.2 Arduino IDE Programkoden skriven till Arduino Uno har gjorts i en utvecklingsmiljö som Arduino tillhandahåller gratis på sin hemsida. Det är en texteditor med innehållande kompilator och debugger. Varje fil med kod skriven kallas för en sketch. Svarta rutan i texteditorn visar meddelanden när kompilering och uppladdning av kod till mikrokontrollen sker, men även felmeddelanden vid kompilering, se figur 3.6. Strukturen av programkoden bygger på minst två funktioner som alltid måste finnas. I funktionen setup() placeras kod som bara ska köras en gång vid starten av programmet, vanligast initieringskod t.ex. avbrottsrutin hur ofta ett avbrott ska inträffa eller sätta baud rate för UART. I den andra funktionen loop() placeras kod som ska exekveras kontinuerligt så länge programmet är aktivt. 3.2 27 Mjukvara Figur 3.6: setup() och loop() Användaren laddar upp senaste programkoden till Arduino genom att först ha utvecklingskortet kopplad till datorn via en USB-kabel, väljer därefter rätt serieport i Arduino IDE för vilken USB-port som är kopplad till kortet samt vilket Arduino-kort som används. När detta är gjort så trycker användaren på Upload knappen. Vid uppladdning så används en bootloader som finns laddad i mikrokontrollern som tillåter användaren att ladda upp ny kod. För att visa vad Arduino Uno skickar seriellt till datorn så kan ett fönster öppnas som visar innehållet. Det kallas för Serial Monitor. 3.2.3 ANT+ Simulator ANT+ Simulator är ett program som kan simulera en sensor genom att skicka data till en mottagare. Programmet kan även agera som display för mottagande data skickat av en sensor. I det här examensarbetet så har den agerat som display för att i programmet presentera datapaketen som skickats av sensorn på hjulet när det snurrat. I programmet väljer man själv vilken profil man har implementerat för att tolka datapaketen rätt som den mottar. Kadensprofilen som har använts räknar själv ut kadens med det data den erhåller. Det kumulativa varvtalet och den totala tiden används av kadensprofilen för att räkna ut kadensen. 28 3 3.3 Metod Uträkning av RPM Grundprincipen för att räkna ut varvhastigheten per minut är RP M = 60 Tp (3.1) där Tp är periodtiden för ett pedalvarv. Istället för att räkna tiden mellan varje detekterat pedalvarv så har metoden varit att räkna antal sampels för ett pedalvarv och lagra antalet i en variabel. Vet man samplingshastigheten som är hur många sampels som tas varje sekund så kan tiden för ett helt varv fås. Tp = S × Ts (3.2) där • S = mängden sampels på ett pedalvarv • Ts = 1 fs • fs = samplingsfrekvensen i Hz och kombineras ekvationerna (3.1) och (3.2) erhålls den grundformel som har använts för att räkna ut kadensen. K adens = 3.4 3.4.1 60 × fs [RP M] S (3.3) Undersökning av RPM i förhållande till samplingsfrekvens Samplingsfrekvens Om en cyklist trampar i 130 RPM så motsvarar det ∼2,2 Hz enligt formel 3.1 för ett varv med pedalerna. Enligt samplingsteoremet fs > 2f0 så måste samplingsfrekvensen, fs , vara strikt större än 4,4 Hz då f0 = 2, 2 Hz. 10 Hz är en teoretiskt rimlig frekvens att sampla på för att kunna klara av 130 RPM, vilket anses vara väldigt hög kadens, se figur 3.7. 3.4 29 Undersökning av RPM i förhållande till samplingsfrekvens 2,2 Hz signal 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −1 −0.8 −0.6 −0.4 −0.2 0 t (sekunder) 0.2 0.4 0.6 0.8 1 Figur 3.7: En genererad signal på 2,2 Hz. Punkterna indikerar en samplingsfrekvens på 10 Hz En avbrottsrutin har satts upp till ATmega328 för att kunna bestämma samplingsfrekvensen, dvs. hur ofta programmet ska ta ett värde från accelerometern. ATmega328 har tre stycken olika timers, här har Timer1 använts som är 16 bit stor. Timer1 har ett register kallat TCNT1 som räknar upp ett värde vid varje klockcykel, och ett avbrott genereras när TCNT1 matchar värdet i registret OCR1A. Det specifika värdet för en viss samplingsfrekvens till registret OCR1A räknas ut med formeln: OCR1A = fp fa × P −1 (3.4) där • fa = den önskade avbrottsfrekvensen i Hz • fp = processorhastigheten i Hz • P = prescaler Initieringen av avbrottsrutinen är placerad i setup() -funktionen då den bara ska ske en gång. Koden nedanför visar hur man ställer in en avbrottsrutin för ATmega328 så att ett avbrott sker med en frekvens på 10 Hz. 30 1 2 3 4 5 6 7 8 3 Metod // Timer1 s a t t t i l l a v b r o t t på 10 Hz TCCR1A = 0 ; TCCR1B = 0 ; TCNT1 = 0 ; OCR1A = 1561; // = (16*10^6) / ( 1 0 * 1 0 2 4 ) − 1 TCCR1B |= ( 1 << WGM12) ; TCCR1B |= ( 1 << CS12 ) | ( 1 << CS10 ) ; TIMSK1 |= ( 1 << OCIE1A ) ; Den kod som sedan önskas exekveras varje gång ett avbrott sker för Timer1 är placerad i 1 2 3 4 ISR ( TIMER1_COMPA_vect ) { // kod a t t exekvera vid e t t a v b r o t t } 3.4.2 RPM vs. samplingsfrekvens Följande figur 3.8 på nästa sida visar hur förhållandet ser ut mellan olika valda samplingsfrekvenser och det RPM som erhållits enligt formeln (3.3) beroende på hur många sampels som variabeln S hinner räkna till. Ju högre kadens desto sämre blir precisionen av det faktiska varvtalet oavsett samplingsfrekvens. Det syns tydligast vid 10 Hz strax över 30 PRM. 3.5 31 Detektering av ett pedalvarv och approximation av nollgenomgången 100 Hz 80 Hz 40 Hz 20 Hz 10 Hz 140 120 RPM 100 80 60 40 20 50 100 150 200 Antal sampels per varv 250 300 Figur 3.8: RPM i förhållande till antalet sampels för olika frekvenser 3.5 Detektering av ett pedalvarv och approximation av nollgenomgången En detektering av ett pedalvarv sker genom att jämföra de två senaste sampelvärdena tagna från accelerometern för att veta när signalen passerat en nollgenomgång. Jämförelsen görs med två variabler, en som innehåller det nuvarande tagna sampelvärdet och den andra innehållande det föregående sampelvärdet. Genom att jämföra om det nuvarande sampelvärdet är större än noll samtidigt som föregående sampelvärde är mindre än noll så har ett varv inträffat. 32 3 Metod Figur 3.9: När ett pedalvarv är detekterad vid en nollgenomgång Genom att approximera nollgenomgången mellan de två punkterna så ger det en bättre precision av det faktiska sampelantalet för ett varv som sedan kan användas vid uträkning av kadensen i formeln (3.3). Tillämpning av räta linjens ekvation mellan de två punkterna för att göra approximationen av nollgenomgången användes enligt figur 3.10. Figur 3.10: Beräkning av den approximerade nollgenomgången 3.6 33 Implementering av ANT+ Räta linjens ekvation mellan punkt a och b ges av a+ 4x t =0 4t 2 (3.5) Punkten t2 blir t2 = −a 4t 4x (3.6) Skillnaden mellan 4t − t2 för att räkna ut sträckan mellan t2 och b 4t − t2 = 4t + a 4t a = 4t(1 + ) 4x 4x (3.7) a ) 4x (3.8) Vi kallar den för en korrektionsterm korr. = 4t(1 + Subtrahera denna korrektionsterm från sampelantalet på punkten b för att få det approximerade sampelantal som det är i punkten t2 . Addera föregående korrektionsterm för att få punkten t1 . Det nya sättet att räkna ut kadensen blir istället K adens = 3.6 60 × fs [RP M] S − korr.n + korr.n−1 (3.9) Implementering av ANT+ En kommunikationskanal har upprättats mellan sensorn och en mottagande dator. En sensor anses som en master och har varit Arduino Uno med kringutrustning. Den mottagande delen har varit en dator och anses vara en slav. Initieringen för att upprätta en kanal sker i en specifik ordning enligt figur 3.12 på följande sida. 34 3 Metod Figur 3.11: Kommunikationskanal mellan sensorn och datorn Figur 3.12: Initieringsprocessen för att upprätta en kanal I varje steg är det specifika värden som måste sättas beroende vilken profil man väljer att implementera. Motsvarande värden finns till slaven för respektive profil. Dessa värden initieras själv av programmet ANT+ Simulator vid val av simulerad profil. För att få tillgång till vilka specifika värden varje profil har måste utvecklaren blir medlem gratis på www.thisisant.com. Dessa är därför utelämnade ur rapporten. 4 Resultat I kapitel 4 presenteras de olika enheterna som har använts, främst sensorenheten som har varit den huvudsakliga utvecklingen i examensarbetet. Även resultatet presenteras med olika testfall av filterstorlekar samt hur stor betydelse av att approximera nollgenomgången har varit för att få ett tillfredsställande resultat på 10 Hz. 4.1 Sensorenhet Under testning bestod sensorenheten av följande komponenter: • Arduino Uno • Bluetooth T9JRN41-1 • Batteripack • Halleffektsensor • nRF24AP2 • Adafruit 9-DOF IMU • Resistorer 35 36 4 Resultat Sensorenheten är den enhet som sitter på hjulet och räknar varvtal per minut med hjälp av accelerometern. Tanken är att sensorenheten ska fästas på pedalarmen på en inomhuscykel. Sensorn upptäcker ett varv och passerar nollnivån när den går från negativ till positiv tecken. Därefter räknar programmet ut sampelantalet med hjälp av att approximera nollgenomgången för att kunna få korrekt total tidsåtgång för kadensprofilen. 4.2 Slavenhet Slavenheten har varit en valfri dator med en USB-mottagare som stödjer ANT+ för att kunna ta emot signalen från Arduino Uno via modulen nRF24AP2. Datorn har använt programmet ANT+ Simulator där kadensprofilen har valts i menyn. 4.3 Testfall I alla tester har hjulet satts i fart och sedan fått snurra fritt. Figur 4.1 visar förbättringen som den approximerade nollgenomgången tillförde jämfört med och utan approximation. Inget filter 150 Kadens utan approximerad nollgenomgång Kadens med approximerad nollgenomgång RPM 100 50 0 0 20 40 60 Tid 80 100 120 Figur 4.1: Med approximation och utan approximation vid uträkning av kadens. 4.3 37 Testfall Här syns de distinkta hoppen i kadensen som sågs i figur 3.8 på sidan 31 för 10 Hz utan att approximera nollgenomgången. Med den approximerade nollgenomgången fås en mjukare variation i kadensen som inte hoppar till det extrema. I och med att sampelantalet inte längre är heltal utan med två decimaler, som approximerandet ger, så kan noggrannare värden av varvantalet fås. Figur 4.2 visar absolutbeloppet och hur extrema skillnaderna är i kadensen som figur 4.1 på föregående sida gav. Skillnader på 0-26 RPM förekommer mellan kadensen med och utan tillämpad approximerad nollgenomgång av signalen vid ett varv. Absolutbeloppet av RPM−skillnaden 30 25 RPM 20 15 10 5 0 0 20 40 60 Tid 80 100 120 Figur 4.2: Skillnaden i kadensen mellan approximerad nollgenomgång och utan. Skillnaden i medelvärde är 5,78 RPM. Följande grafer från MATLAB visar en jämförelse mellan kadensen för accelerometern med den approximerade nollgenomgången och referensen med halleffektsensorn för två olika filterstorlekar. Figur 4.3 på följande sida visar resultatet med en filterstorlek 3. Om inledningen bortses innan det stabiliseras i figur 4.4 på sidan 39 varierar kadensen 0-3 RPM mellan accelerometern och halleffektsensorn. Vid de lägre varvtalen mot slutet så blir inte skillnaden mer än 0-1 RPM. Figur 4.5 på följande sida visar hur det ser ut med en filterstorlek 5. Här är också skillnaden i kadensen mellan 0-3 RPM, däremot är variationen 0-1 RPM påtagli- 38 4 Resultat gare. Filterstorlek 3 120 Accelerometer Referens 100 RPM 80 60 40 20 0 0 20 40 60 Tid 80 100 120 Figur 4.3: Referensen och accelerometern med filterstorlek 3. Filterstorlek 5 140 Accelerometer Referens 120 100 RPM 80 60 40 20 0 0 20 40 60 Tid 80 100 Figur 4.5: Referensen och accelerometern med filterstorlek 5. 120 4.3 39 Testfall Absolutbeloppet av RPM−skillnaden 9 8 7 RPM 6 5 4 3 2 1 0 0 20 40 60 Tid 80 100 120 Figur 4.4: Absolutbeloppet på skillnaden av varvtal med filterstorlek 3. Skillnaden i medelvärde är 1,15 RPM. Absolutbeloppet av RPM−skillnaden 5 4.5 4 3.5 RPM 3 2.5 2 1.5 1 0.5 0 0 20 40 60 Tid 80 100 120 Figur 4.6: Absolutbeloppet på skillnaden av varvtal med filterstorlek 5. Skillnaden i medelvärde är 1,11 RPM. 40 4 Resultat Skillnaden mellan de två olika filterstorlekarna är liten och borde övervägas efter egen preferens vad som anses vara passande. I slutänden spelar det ingen roll då ingen filtrering krävs med den implementerade kadensprofilen utan filtreringen är mer av intresse om man inte använder sig av ANT+. 4.4 Strömförbrukning av komponenter När det kom till valet av att använda antingen accelerometern eller gyroskopet så var accelerometern det självklara valet ur ett strömsparande perspektiv. Accelerometern LSM303DLHC har en strömförbrukning på 110 µA jämfört med 6,1 mA för gyroskopet L3GD20. När det kommer till strömförbrukningen av nRF24AP2, med konfigurationen att bara motta data asynkront med 57600 baud rate och en kanalkonfiguration enligt följande: bara sända, meddelandehastighet 4,04 Hz, datatyp “Broadcast”, så är strömförbrukningen 130 µA med en basström på 87 µA, totalt 217 µA för hela användingen. Egna beräkningar kan göras på www.thisisant.com/ developer/components/developer. Tillsammans med både nRF24AP2 och LSM303DLHC så blir det totalt en strömförbrukning på ∼327 µA med en effekt på 1,1 mW. 4.5 Accelerometern Av de tre möjliga dimensionerna för acceleration så behövs en dimension med tanke på hur en cykelpedal roterar. Beroende på placeringen av accelerometern måste hänsyn tas till vilken axel som läses av. I det här fallet var accelerometern placerad så Y-axeln användes. 5 Diskussion I kapitel 5 förs en diskussion av resultatet, problem som har uppstått och lösningssätt under arbetets gång samt eventuella förbättringar. Att approximera nollgenomgången för uträkningen av kadensen hade en stor betydande roll för hela sensorns resultat. Att gå ifrån 100 Hz ner till 10 Hz var inte möjligt innan utan stora bristfälliga resultat. Att sänka samplingsfrekvensen till en tiondel gav fördelar med att inte behöva använda filtrering på signalen för att detektera ett varv men även möjligheten att kunna använda lägre processorhastighet och med det minska strömföbrukningen. 5.1 Detektering av ett varv Valet att detektera ett varv via en nollgenomgång görs för att vara oberoende av hur amplituden ser ut när pedalen är i rörelse. Större acceleration ger större amplitud och lägre acceleration ger lägre amplitud. Oavsett om accelerometern genererar en hög eller låg amplitud så kommer signalen alltid att passera noll. På ett enkelt sätt kan man då uppskatta skärningspunkten vid nollan mellan de två punkterna som är större och mindre än noll. Istället för att behöva göra en approximation på en specifik nivå som signalen måste passera och med det vara beroende av amplituden. Tidigare sätt att detektera ett varv än nuvarande metod har varit att upptäcka när en topp inträffar och beräkna tiden till nästa topp. Principen var när aktuellt sampel var lägre än föregående så är det en topp. Denna lösning var inte optimal 41 42 5 Diskussion då signalen är bruskänslig och det påverkar negativt vid beräkningen av kadensen när pedalen står stilla, vilket gav upphov till orealistiskt höga varvtal då flera “toppar” skapades tätt efter varandra som inte är orsakade av att man trampar. 5.2 Filter Med den implementerade kadensprofilen till ANT+ så är det profilen själv som räknar ut kadensen med hjälp av den totala tiden när ett varv inträffar tillsammans med det totala antalet varv upp till det tillfället. Önskar man sig att använda sensorn utan ANT+ och räkna ut kadensen själv så passar ett glidande medelvärdesfilter i storleksordningen 3-5 bra. Normalt har mottagaren själv någon typ av filtrering. Genom att approximera nollgenomgången kunde samplingen av accelerometern sänkas från 100 Hz till 10 Hz. Vid 10 Hz behövs ingen filtrering av signalen. 5.3 Mikrokontroller Om man ska se till utvecklingskortet Arduino Uno med sin Atmega328 så är den allt för kraftfull när det kommer till processorhastigheten för det här ändamålet men även till antalet portar som är tillgängliga. Exekveringstiden av koden är uppmätt till ungefär 10-12 millisekunder vid en processorhastighet på 16 MHz. Koden exekveras med en frekvens på 10 Hz eller i tid mätt 100 millisekunder. Om man försöker minska tidsluckan mellan två exekveringstidpunkter så att de ligger så tätt efter varandra som möjligt skulle en sänkning av klockfrekvensen till 2,1 MHz fungera och ändå klara av alla beräkningar mellan varje avbrott. På så sätt minskas tiden då processorn inte utför några beräkningar. I och med att lägre processorhastighet fungerar för att hinna exekvera koden så drar det ner på strömförbrukningen, se figur 5.3 på sidan 44. Figur 5.1: Exekveringstiden med 16 MHz 5.4 Strömförbrukning 43 Figur 5.2: Exekveringstiden med 2,1 MHz Inledningsvis när samplingen skedde i 100 Hz, som är en periodtid på 10 millisekunder, så skulle det betyda att exekveringen av koden som startades av föregående avbrott inte har hunnit klart nu när exekveringstiden är 10-12 millisekunder utan att behöva öka processorhastigheten. Så att sänka samplingsfrekvensen med en tiondel har även hjälpt så att inget tillfälle missas när programkoden ska köras. Antalet portar som används just nu är mer än vad som egentligen behövs av den anledningen att en blåtandsmodul och halleffektsensor används för felsökning och verifiering, och att accelerometern räknar rätt i kadens. Vid en eventuell prototyp så skulle dessa komponenter utgå vilket minskar kravet på antalet tillgängliga portar på en mikrokontroller. Det som behövs i hårdvara är en mikrokontroller, accelerometer och ett ANT-chip. Accelerometern behöver två pinnar för kommunikation med TWI. Kommunikationen via UART till ANT-chipet använder bara RX-ingången och ingen TX. Därutöver sätts resterande pinnar som krävs till jord och spänning. Totalt tre in/ut-gångar behövs på en mikrokontroller som kan hantera de egenskaper som har använts. Den programkod som har skrivits har tagit upp 16 kB av ATmega328 totala kapacitet på 32 kB. Koden kan optimeras så den tar mindre utrymme och med det kortare exekveringstid då all kod som är skriven inte är nödvändig utan har använts vid felsökning. Hur mycket av koden som är specifikt genererad för att den är utvecklad på Arduino Uno är svårt att säga. 5.4 Strömförbrukning I och med att kunna välja en lägre processorhastighet så förbrukar ATmega328 mindre ström. ATmega328 har en strömförbrukning på ∼2 mA vid aktivt läge på 3 V med 4 MHz jämfört med ∼9,5 mA aktiv på 5 V med 16 MHz, se figur 5.3. 44 5 Diskussion Figur 5.3: Strömförbrukning vid aktivt läge, från databladet ATmega328 Vid en eventuellt sänkning av processorhastigheten på ATmega328 till 4 MHz och med det en strömförbrukning på ∼2 mA skulle det tillsammans med accelerometern och nRF24AP2 ge en strömförbrukning på ∼2,3 mA. En vanlig typ av batteri vid en prototyp av detta slag skulle kunna vara ett CR2032. CR2032 har en kapacitet på 225 mAh och kommer då kunna räcka i ∼98 timmars aktiv användning. En mikrokontroller specifikt utformad för låg strömförbrukning på t.ex. ∼0,5 mA skulle resultera i en aktiv användningstid på ∼250 timmar. 5.5 “Brister” Vid användning förutsätts att cyklisten cyklar på ett “normal” sätt. Det går att lura systemet så att ett varv har inträffat genom att placera accelerometern i det läget när det sker en nollgenomgång och rycka fram och tillbaka. Dock kan man på samma sätt lura det mer traditionella sättet som används på marknaden genom även där rycka sensorn fram och tillbaka på pedalarmen över magneten som sitter på cykelramen. Dessa “brister” går inte enkelt att komma ifrån. I och med att samplingsteoremet måste uppfyllas mellan tramphastigheten och samplingstiden så finns vissa begränsningar för hur hög kadens den kan uppnå innan osäkerheten av precisionen uppstår. Man ska vara medveten om att detekteringen av ett varv skiljer sig mellan accelerometern och referensen. Ungefär en skillnad på ett kvarts varv på hjulet mellan de två olika positionerna då ett varv inträffar. Det kan möjligtvis ha ett viss inflytande på att det skiljer 1-3 RPM mellan accelerometern och referensen. 5.6 Systemkrav 5.6 45 Systemkrav Sammanfattning av systemkrav • Mikrokontroller – Flashminne på minst 16 kB – Minst 3 in/ut-gångar – Klara av TWI och UART – En processorhastighet på 2,1 MHz • Accelerometer – Klara av ±2 g • ANT-chip Ett förslag på en mikrokontroller skulle kunna vara en från Silicon Labs vid namnet EFM32 Zero Gecko som är specifikt inriktad mot användningsområdet hälsa och fitness med krav på låg strömförbrukning. 5.7 Framtida utveckling Grundprincipen för alla accelerometrar är att de ger ut en signal utifrån den acceleration de utsätts för. Det är den signalen som har tagits in i programmet och behandlats. Vissa accelerometrar kan i sin tur ha specifika egenskaper av att kunna generera ett avbrott utifrån en viss placering av kretsen. Att använda detta tillvägagångssätt skulle kunna vara intressant att undersöka, ingen samplingsfrekvens används utom den interna på LSM303DLHC, utan det torde då bara vara att ta tiden mellan varje genererat avbrott för att kunna räkna ut kadensen. Då jag inte har velat vara begränsad till specifika egenskaper för vissa accelerometrar så användes den generella funktionaliteten som alla accelerometrar har för att istället behandla signalen. Att minimera strömförbrukningen för nRF24AP2 skulle kunna undersökas genom att sätta den i viloläge när den inte är aktiv genom att skicka data. Av kodens exekveringstid på 10-12 millisekunder så var tiden att skicka ny data till nRF24AP2 ∼4 millisekunder med en baud rate på 57600. Appendix A Systemdesign vid test Systemdesign vid testning och verifiering av sensorn. Figur A.1: Figuren visar hur signalerna går mellan modulerna 49 B Systemdesign vid en prototyp Förslag på systemdesign vid en eventuell prototyp med en EFM32 Zero Gecko som mikrokontroller. Figur B.1: Förslag på en design till en prototyp 51 52 B Systemdesign vid en prototyp Litteraturförteckning [1] Chris R. Abbiss, Jeremiah J. Peiffer, and Paul B. Laursen. Optimal cadence selection during cycling. International SportMed Journal, 10(1):1 – 15, 2009. ISSN 15283356. [2] Les Ansley and Patrick Cangley. Determinants of “optimal” cadence during cycling. European Journal of Sport Science, 9(2):61 – 85, 2009. ISSN 17461391. [3] Datablad ATmega328. (2015-01-13). [4] Johansson H. Discrete-Time Systems. Linköpings universitet, 2009. [5] http://arduino.cc/en/Main/ArduinoBoardUno. (2015-01-20). [6] http://clifton.mech.northwestern.edu/~me224/Documents_me_ 20224_20lab_206_mems.PDF. (2014-11-14). [7] http://mafija.fmf.uni-lj.si/seminar/files/2007_2008/MEMS_ accelerometers-koncna.pdf. (2014-11-14). [8] http://www.nordicsemi.com/eng/Products/ANT/nRF24AP2-1CH. 10-06). (2014- [9] http://www.thisisant.com. (2014-10-06). [10] Datablad LSM303DLHC. (2015-05-01). [11] Gustafsson O. Examensarbetsförslag – Kadensmätare med ANT+/BlueTooth LE. (2014-09-29). [12] Johansson H. och Wanhammar L. Digital Filters Using Matlab. Linköpings universitet, 2013. [13] Samozino Pierre, Horvais Nicolas, and Hintzy Frédérique. Interactions between cadence and power output effects on mechanical efficiency during sub maximal cycling exercises. European Journal of Applied Physiology, 97(1):133 – 139, 2006. ISSN 14396327. 53 54 Litteraturförteckning Upphovsrätt Detta dokument hålls tillgängligt på Internet — eller dess framtida ersättare — under 25 år från publiceringsdatum under förutsättning att inga extraordinära omständigheter uppstår. Tillgång till dokumentet innebär tillstånd för var och en att läsa, ladda ner, skriva ut enstaka kopior för enskilt bruk och att använda det oförändrat för ickekommersiell forskning och för undervisning. Överföring av upphovsrätten vid en senare tidpunkt kan inte upphäva detta tillstånd. All annan användning av dokumentet kräver upphovsmannens medgivande. För att garantera äktheten, säkerheten och tillgängligheten finns det lösningar av teknisk och administrativ art. Upphovsmannens ideella rätt innefattar rätt att bli nämnd som upphovsman i den omfattning som god sed kräver vid användning av dokumentet på ovan beskrivna sätt samt skydd mot att dokumentet ändras eller presenteras i sådan form eller i sådant sammanhang som är kränkande för upphovsmannens litterära eller konstnärliga anseende eller egenart. För ytterligare information om Linköping University Electronic Press se förlagets hemsida http://www.ep.liu.se/ Copyright The publishers will keep this document online on the Internet — or its possible replacement — for a period of 25 years from the date of publication barring exceptional circumstances. The online availability of the document implies a permanent permission for anyone to read, to download, to print out single copies for his/her own use and to use it unchanged for any non-commercial research and educational purpose. Subsequent transfers of copyright cannot revoke this permission. All other uses of the document are conditional on the consent of the copyright owner. The publisher has taken technical and administrative measures to assure authenticity, security and accessibility. According to intellectual property law the author has the right to be mentioned when his/her work is accessed as described above and to be protected against infringement. For additional information about the Linköping University Electronic Press and its procedures for publication and for assurance of document integrity, please refer to its www home page: http://www.ep.liu.se/ © Glenn Westerholm