ACCELEROMETER & LOGGER + göra & användning (4 / 9 steg)
Steg 4: Använda den - kalibrering
Varför behöver vi kalibrera?
Är inte kalibrerad sensorn redan från fabriken?
Dessa tio på varandra följande värden utgör (accelerationer följt av vinkelupplösning hastigheter, x, y, z i båda fallen) med GY521 i stillestånd, vertikal position (axel + X uppåt):
- 17088 208-1048 5-1-216
- 17028 308-1320 4 3-250
- 16988 360-1212 7 3-236
- 16876 376-1032 -13-36-218
- 16972 244-1348 -13-25-226
- 17060 316-1156 -2-11-224
- 16948 328-1300-31 0-224
- 17016 332-1124 1-1-209
- 17088 348-1088 -6-27-238
- 17072 284-1104 -13-24-228
Om enheten var verkligen vertikala, avläsningar för accelerationer bör vara (se nedan anledningen): (16384, 0, 0); och om enheten var verkligen fortfarande, avläsningarna för gyroskopet bör vara: (0,0,0). Så: avläsningarna borde alla ha varit: [16384, 0, 0, 0, 0, 0]: Vad är fel? Eller, egentligen är något fel?
Tre saker händer förmodligen:
- enheten är fortfarande, åtminstone med ingen märkbar rörelse, men det är sannolikt inte perfekt vertikal,
- Det finns signal brus, och detta är förmodligen orsaken till fluktuationer i omedelbar avläsningar,
- avläsningarna är rå, inte kalibreras, varför de är "avvikit", i genomsnitt.
Så, låt oss gå steg för steg.
ADC av MPU6050
MPU6050 har en integrerad ADC (Analog till Digital omvandlare) som matar ut varje kanal (acceleration och vinkelupplösning hastigheter, varje i x, y, z) i 16 bitar. Därför 2 ^ 16 olika resultat är möjliga: 0 till 65535, eller 32768 till +32767. Denna serie av avläsningar har mappats i standardkonfigurationen till + - 2g i accelerationer och +-250 grader/s i vinkelupplösning hastigheter. Sedan 1 g motsvarar 16384 LSB (mindre Signifficant Bit eller digital raw enheter av behandlingen), och 1 deg/s motsvarar 131 LSB.
Båda typerna kan ändras i inställningarna via programvara via Jeff Rowberg kod (se föregående steg). Möjligheterna är:
- Acceleration spänner: + - 2g, 4g, 8g, 16g
- Gyroskop spänner: +-250, 500, 1000, 2000 deg/s.
Observera att på grund av den ADC 16-bitars constraint, utvidga spänner av mätningar minskar känsligheten: + - 4 g spänna mappas till flera behandlingen (-32768, +32767) ger 8192 LSB/g.
Så, den rå behandlingen kan omvandlas till "fysiska" enheter med de kända känslighet är:
- 1,042969 0,012695 - 0,063965 0,038168 - 0,007634 - 1,648855
- 1,039307 0,018799 - 0,080566 0,030534 0,022901 - 1,908397
- 1,036865 0,021973 - 0,073975 0,053435 0,022901 - 1,801527
- 1,030029 0,022949 - 0,062988 - 0,099237 - 0,274809 - 1,664122
- 1,035889 0,014893 - 0,082275 - 0,099237 - 0,190840 - 1,725191
- 1,041260 0,019287 - 0,070557 - 0,015267 - 0,083969 - 1,709924
- 1,034424 0,020020 - 0,079346 - 0,236641 0,000000 - 1,709924
- 1,038574 0,020264 - 0,068604 0,007634 - 0,007634 - 1,595420
- 1,042969 0,021240 - 0,066406 - 0,045802 - 0,206107 - 1,816794
- 1,041992 0,017334 - 0,067383 - 0,099237 - 0,183206 - 1,740458
- Enheter: g och deg/s
Bra, men... Vad är det verkliga resultatet? Hur många decimaler kan användas ordentligt? Jag har valt 6 decimaler, men varför inte 10?
Manipulation av nummer
Vad vi kan säga är att med en konfidensnivå på 95% (baserat på alla poster för kalibrering, inte bara de 10 visas här) medelvärden kan beräknas med statistiska verktyg och övervägande av reglerna för signifikanta siffror. Se här på kalkylbladet, vars resultat är:
- AX = 17002 +-5 kg <> - 1,038 +-0.000 g
- AY = 328 +-4 LBS <> - 0.020 +-0.000 g
- AZ =-1170 +-6 kg <> --0.071 +-0.000 g
- GX =-1.9 +-0,7 kg <> --0.014 +-0,005 º / s
- Gy = 0.6 +-1.1 kg <> - 0,004 +-0,008 º / s
- Gz =-227 +-1 kg <> --1.730 +-0,007 º / s
Klart, bara genom att titta på resultaten: acceleration avläsningarna verkar vara "tillförlitliga", och Gy är inte. Men även dessa "statistiskt korrigerade" medelvärdena är fortfarande inte vad man förväntar sig! Acceleration bör vara 1.000; och dessutom, man undrar varför medelvärdet av Gz är så hög om enheten inte var rörliga.
Så, ange kalibrering - äntligen!
Kalibrering (av accelerometern)
Första kommentar: kalibrering är inte avsedd att korrigera resultatet av en felaktig sensor. Om från tidigare resultat anser vi att sensorn Gz är sannolikt trasig eller miss-ansluten, då finns det förmodligen ingen kalibrering som kan fixa det.
Andra anmärkning: en kalibrering jämför avläsningar eller avläsningar med antaganden. Extrapolering bortom de avläsningarna kräver vård.
MPU6050 visar teoretiska linjära förhållandet mellan den uppmätta accelerationen eller vinkelupplösning hastigheter och utdata. (Specifikation produktdatabladet nämner ett "länkarmar" på 0,5% och 0,2%, respektive; "cross-axis känslighet", hur mycket ändring införs i en axel genom tillämpningen av acceleration eller vinkelhastighet på en annan axel, är 2%).
Då kan det vara möjligt att använda korrigeringar konvertera ekvationer. I det tidigare fallet för accelerationer leder korrigering av vinst felet till:
- AX(g) = (Ax(LBS)) / (16384 + 618)
Offset avvikelser kan också korrigeras:
- AY(g) = (Ay(LBS) - 328) /(16384-328)
- AZ(g) = (Az(LBS) +1170)/(16384+1170)
Proceduren avräkning kan vara rätt om vi är säker på att accelerometern var verkligen vertikala (+ X upp) när de kalibrera åtgärderna vidtogs - annars är det inte rätt. Det kan vara att fel därmed infört är liten, men det är ändå inte rätt. Och tyvärr är det svårt att vara säker för riktigheten av den vertikalitet som MPU6050 placeras under kalibreringen.
Ett alternativt kalibreringen ("sex positioner-test") skulle vara att läsa sex gånger accelerationen resultat, med enheten fortfarande. På vart och ett av dessa fall skulle sensorn vändas så att varje gång en annan axel är på den "vertikalt" (+-x/y/z). De avlästa värdena på varje position för alla axel ger tillräckligt med information för en detaljerad kalibrering.
En enkel beskrivning av detta förfarande finns här; mer exakt info här; allvarligare här.
Oavsett sensorn, om det inte rör sig, sedan den normen eller modulus av vektor acceleration bör 1 g (eller beroende på vad som är allvar acceleration på plats). Detta kan också användas för kalibrering oberoende av sensorn.
Kalibrering (av accelerometern) annat än med G
Två enkla ytterligare kalibreringstesten verkar möjligt, även om jag inte har utvecklat dem:
- Fritt fall: en accelerometer i fritt fall bör läsa (0,0,0), oavsett dess rumslig orientering. Förmodligen blir det svårt att samla tillräckligt med data innan en arrestor (från min 7: e våningen det tar testaren knappt mer än 2 sekunder för att nå gatan).
- Pendeln: En pendel på vars bob är GY521 skulle mäta accelerationer och vinkelupplösning hastigheter som är förhållandevis lätt att beräkna.
Kalibrering (av gyroskopet)
Det normala förfarandet som används för kalibrering av accelerometern kan användas för offset kontroll av gyroskopet, men det ger ingen aning om fel som vinst. Om vinst felet måste kontrolleras, antar jag att en kalibrerad pendel kan krävas.
Hur mycket tid för uppvärmning? Och för kalibrering?
Ett diagram är ansluten visar mätvärdena loggas så snabbt som möjligt efter att ha slagit upp Arduino. Ingen uppvärmningsperiod framgår - eller, om det finns någon, det verkar som är mycket kort och inga ändamålsenliga verkan för mina syften.
Frågan om hur mycket tid som krävs för kalibrering data behandlingen kan omvandlas till en statistisk fråga: hur många prover krävs från en allmän population att korrekt uppskatta genomsnittligt? Svaret är: så många som krävs för att ge stabila resultat. Det finns explicita uttryck för numrera av prover, men i allmänhet och när möjligt, är det bättre att göra så många antaganden på befolkningen som möjligt. Ett bifogat diagram visar utvecklingen av skattning av Ax med provtagning storleken. Efter 10-15 sekunder av avläsningar resultaten är ganska stabil, och min rekommendation skulle vara att läsa för 20-25 s vid en frekvens på minst 25 Hz.